@kyro-cms/admin 0.10.5 → 0.10.7

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 DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/paths.ts","../src/lib/stores/index.ts","../src/lib/api.ts","../src/components/ui/Spinner.tsx","../src/components/ui/Shimmer.tsx","../src/components/ui/PageHeader.tsx","../src/components/ui/Badge.tsx","../src/components/ui/Button.tsx","../src/components/ui/Pagination.tsx","../src/lib/resolve-field-value.ts","../src/components/ListView.tsx","../src/components/fields/UploadField.tsx","../src/components/fields/FieldLayout.tsx","../src/components/ui/SlidePanel.tsx","../src/components/ui/Modal.tsx","../src/components/ui/PromptModal.tsx","../src/components/MediaGallery.tsx","../src/components/fields/RichTextField.tsx","../src/theme/tokens.ts","../src/theme/ThemeProvider.tsx","../src/components/fields/CodeField.tsx","../src/components/fields/MarkdownField.tsx","../src/components/fields/SecretField.tsx","../src/lib/autoform-store.ts","../src/lib/slugify.ts","../src/components/fields/TextField.tsx","../src/components/fields/NumberField.tsx","../src/components/fields/CheckboxField.tsx","../src/components/fields/DateField.tsx","../src/lib/config.ts","../src/components/fields/SelectField.tsx","../src/components/ui/EmptyState.tsx","../src/components/fields/RelationshipField.tsx","../src/components/fields/extensions/blocksStore.ts","../src/components/ui/BlockDrawer.tsx","../src/components/fields/HeadingField.tsx","../src/components/blocks/BlockWrapper.tsx","../src/components/blocks/HeadingBlock.tsx","../src/components/blocks/ParagraphBlock.tsx","../src/components/blocks/ImageBlock.tsx","../src/components/fields/VideoField.tsx","../src/components/blocks/VideoBlock.tsx","../src/components/fields/ListField.tsx","../src/components/blocks/ListBlock.tsx","../src/components/blocks/CodeBlock.tsx","../src/components/blocks/FileBlock.tsx","../src/components/fields/AccordionField.tsx","../src/components/blocks/AccordionBlock.tsx","../src/components/blocks/RichTextBlock.tsx","../src/components/fields/HeroField.tsx","../src/components/fields/GroupLayout.tsx","../src/components/fields/ArrayLayout.tsx","../src/lib/change-source.ts","../src/components/FieldRenderer.tsx","../src/components/blocks/BlockEditModal.tsx","../src/components/blocks/ChildBlocksTree.tsx","../src/components/blocks/HeroBlock.tsx","../src/components/fields/HeadingSubheadingField.tsx","../src/components/blocks/HeadingSubheadingBlock.tsx","../src/components/fields/CardField.tsx","../src/components/blocks/CardBlock.tsx","../src/components/blocks/ArrayBlock.tsx","../src/components/fields/RelationshipBlockField.tsx","../src/components/blocks/RelationshipBlock.tsx","../src/components/fields/extensions/blockComponents.tsx","../src/components/fields/BlocksField.tsx","../src/lib/normalize-upload-fields.ts","../src/hooks/useQueue.ts","../src/hooks/useAutoFormState.ts","../src/components/ui/Dropdown.tsx","../src/components/ui/SplitButton.tsx","../src/components/ui/SeoPreview.tsx","../src/components/fields/TabsLayout.tsx","../src/components/AutoForm.tsx","../src/components/ActionBar.tsx","../src/components/DetailView.tsx","../src/components/CreateView.tsx","../src/components/ui/Toast.tsx","../src/components/ui/Toaster.tsx","../src/components/LoginPage.tsx","../src/components/Dashboard.tsx","../src/components/UserManagement.tsx","../src/components/BrandingHub.tsx","../src/components/DeveloperCenter.tsx","../src/lib/useResourceManager.ts","../src/components/WebhookManager.tsx","../src/components/ui/CommandPalette.tsx","../src/components/ui/GlobalModal.tsx","../src/components/Admin.tsx","../src/components/BulkActionsBar.tsx","../src/components/VersionHistoryPanel.tsx","../src/components/layout/Header.tsx","../src/hooks/lifecycle.ts","../src/hooks/data.ts","../src/plugins/registry.ts","../src/plugins/examples/sample-plugin.ts","../src/plugins/examples/sample-plugin-2.ts","../src/blocks/registry.ts","../src/blocks/examples/sample-block.tsx","../src/blocks/examples/sample-block-2.tsx","../src/fields/registry.tsx","../src/fields/examples/sample-field.tsx","../src/fields/examples/sample-field-2.tsx","../src/integration.ts"],"names":["block","fields","jsx","Fragment","jsxs","field","Plus","Search","Filter","Columns3","X","Trash2","Archive","ChevronUp","Pencil","Image","Film","Music","File","useRef","useState","useEffect","useMemo","Check","createPortal","getFileType","useCallback","Grid3X3","Maximize2","FolderPlus","FolderInput","Folder","Link","Download","Crop","AlignLeft","ListOrdered","List","Terminal","ChevronDown","Undo","Redo","Bold","Italic","UnderlineIcon","Strikethrough","Code","Palette","Minus","LinkIcon","ImageIcon","Underline","editor","create","persist","path","collections","globals","fs","value","LoaderCircle","createContext","blocks","useContext","ChevronRight","React","CodeXml","items","useStore","getLabel","Heading1","Video","Star","Box","Link2","Blocks","Sparkles","Users","Activity","Tag","Database","Clock","Mail","getBlockLabel","GripVertical","Copy","data","response","parentData","onChange","ExternalLink","isDraft","CircleCheck","ShieldAlert","TriangleAlert","Info","LayoutDashboard","ArrowUpRight","ArrowRight","UserPlus","Shield","LockOpen","Lock","RefreshCcw","Save","API_BASE","Key","EyeOff","Eye","CirclePlay","aura","Webhook","Zap","Send","Pause","Play","RefreshCw","Settings","Hexagon","Network","Sun","Moon","LogOut","formatDate","User","Undo2","json","apiPath","config","loadDotEnv"],"mappings":"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","file":"index.js","sourcesContent":["declare const __KYRO_ADMIN_PATH__: string;\ndeclare const __KYRO_API_PATH__: string;\n\nexport const adminPath =\n typeof __KYRO_ADMIN_PATH__ !== \"undefined\" ? __KYRO_ADMIN_PATH__ : \"/admin\";\nexport const apiPath =\n typeof __KYRO_API_PATH__ !== \"undefined\" ? __KYRO_API_PATH__ : \"/api\";\n\nexport function resolveApi(url: string): string {\n // If URL is already absolute or prefixed with the correct apiPath, return as is\n if (url.startsWith(\"http\") || url.startsWith(apiPath)) return url;\n \n // If it starts with the standard \"/api/\", map it to the configured apiPath\n if (url.startsWith(\"/api/\")) {\n return apiPath + url.slice(4);\n }\n \n // Otherwise, prepend the apiPath\n const separator = url.startsWith(\"/\") ? \"\" : \"/\";\n return `${apiPath}${separator}${url}`;\n}\n\n\nexport function resolveAdmin(url: string): string {\n // If URL is already absolute or prefixed with the correct adminPath, return as is\n if (url.startsWith(\"http\") || url.startsWith(adminPath)) return url;\n \n // If it's a standard \"/admin/\" path, map it to the configured adminPath\n if (url.startsWith(\"/admin/\")) {\n return adminPath + url.slice(6);\n }\n \n // Otherwise, prepend the adminPath if it looks like a relative path\n if (url.startsWith(\"/\")) {\n return adminPath + url;\n }\n \n return url;\n}\n\n\nexport function resolveMedia(url: unknown): string {\n if (!url || typeof url !== \"string\") return \"\";\n // Absolute URLs, blob URLs, and data URLs are returned as-is\n if (url.startsWith(\"http\") || url.startsWith(\"blob:\") || url.startsWith(\"data:\")) {\n return url;\n }\n \n // For relative paths, ensure they start with a single slash\n // These are relative to the site root (where /uploads/ usually lives)\n return url.startsWith(\"/\") ? url : `/${url}`;\n}\n\n\nexport const paths = {\n admin: adminPath,\n api: apiPath,\n resolveApi,\n resolveAdmin,\n resolveMedia,\n} as const;\n","import { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\nimport { apiPath, adminPath } from \"../paths\";\n\n// ============================================================\n// AUTH STORE\n// ============================================================\n\nexport interface AuthUser {\n id: string;\n email: string;\n role: string;\n avatar?: string;\n tenantId?: string;\n [key: string]: unknown;\n}\n\nexport interface Permissions {\n collections?: Record<string, { read: boolean; create: boolean; update: boolean; delete: boolean }>;\n globals?: Record<string, { read: boolean; update: boolean }>;\n media?: { read: boolean; create: boolean; update: boolean; delete: boolean };\n users?: { read: boolean; create: boolean; update: boolean; delete: boolean };\n [key: string]: unknown;\n}\n\ninterface AuthState {\n user: AuthUser | null;\n permissions: Permissions | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: string | null;\n setUser: (user: AuthUser | null, permissions?: Permissions | null) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: string | null) => void;\n logout: () => void;\n}\n\nexport const useAuthStore = create<AuthState>((set) => ({\n user: null,\n permissions: null,\n isAuthenticated: false,\n isLoading: true,\n error: null,\n\n setUser: (user, permissions = null) =>\n set({\n user,\n permissions,\n isAuthenticated: !!user,\n isLoading: false,\n error: null,\n }),\n\n setLoading: (isLoading) => set({ isLoading }),\n\n setError: (error) =>\n set({\n error,\n isLoading: false,\n isAuthenticated: false,\n user: null,\n permissions: null,\n }),\n\n logout: () =>\n set({\n user: null,\n permissions: null,\n isAuthenticated: false,\n isLoading: false,\n error: null,\n }),\n}));\n\nconst API_BASE = apiPath;\nconst ADMIN_BASE = adminPath;\n\nexport async function verifyAuth(): Promise<{\n user: AuthUser | null;\n permissions: Permissions | null;\n}> {\n try {\n const [meRes, accessRes] = await Promise.all([\n fetch(`${API_BASE}/auth/me`, { credentials: \"include\" }),\n fetch(`${API_BASE}/auth/access`, { credentials: \"include\" }),\n ]);\n\n if (!meRes.ok) {\n return { user: null, permissions: null };\n }\n\n const [meData, accessData] = await Promise.all([\n meRes.json(),\n accessRes.ok ? accessRes.json() : Promise.resolve(null),\n ]);\n\n return {\n user: meData.user || null,\n permissions: accessData || null,\n };\n } catch {\n return { user: null, permissions: null };\n }\n}\n\nexport async function doLogout(): Promise<void> {\n try {\n await fetch(`${API_BASE}/auth/logout`, {\n method: \"POST\",\n credentials: \"include\",\n });\n } finally {\n useAuthStore.getState().logout();\n }\n}\n\nexport function redirectToLogin(): void {\n window.location.href = `${ADMIN_BASE}/login`;\n}\n\n\n// ============================================================\n// TOAST STORE\n// ============================================================\n\nexport interface Toast {\n id: string;\n type: \"success\" | \"error\" | \"warning\" | \"info\";\n message: string;\n}\n\ninterface ToastState {\n toasts: Toast[];\n addToast: (type: Toast[\"type\"], message: string) => void;\n removeToast: (id: string) => void;\n clearToasts: () => void;\n}\n\nexport const useToastStore = create<ToastState>((set) => ({\n toasts: [],\n\n addToast: (type, message) => {\n const id = Math.random().toString(36).substring(7);\n set((state) => ({\n toasts: [...state.toasts, { id, type, message }],\n }));\n },\n\n removeToast: (id) =>\n set((state) => ({\n toasts: state.toasts.filter((t) => t.id !== id),\n })),\n\n clearToasts: () => set({ toasts: [] }),\n}));\n\nexport const toast = {\n success: (message: string) =>\n useToastStore.getState().addToast(\"success\", message),\n error: (message: string) =>\n useToastStore.getState().addToast(\"error\", message),\n warning: (message: string) =>\n useToastStore.getState().addToast(\"warning\", message),\n info: (message: string) =>\n useToastStore.getState().addToast(\"info\", message),\n};\n\n// ============================================================\n// THEME STORE\n// ============================================================\n\nexport type ThemeMode = \"light\" | \"dark\";\n\ninterface ThemeState {\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n toggleMode: () => void;\n}\n\nexport const useThemeStore = create<ThemeState>()(\n persist(\n (set) => ({\n mode: \"light\",\n\n setMode: (mode) => set({ mode }),\n\n toggleMode: () =>\n set((state) => ({ mode: state.mode === \"light\" ? \"dark\" : \"light\" })),\n }),\n {\n name: \"kyro-theme\",\n },\n ),\n);\n\n// ============================================================\n// UI STORE\n// ============================================================\n\nexport interface ModalConfig {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm?: () => void | Promise<void>;\n onCancel?: () => void;\n variant?: \"default\" | \"danger\" | \"success\" | \"warning\";\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n}\n\ninterface UIState {\n sidebarOpen: boolean;\n toggleSidebar: () => void;\n setSidebarOpen: (open: boolean) => void;\n\n modal: {\n open: boolean;\n config: ModalConfig | null;\n };\n confirm: (config: ModalConfig) => void;\n alert: (config: Omit<ModalConfig, \"onConfirm\" | \"cancelLabel\">) => void;\n closeModal: () => void;\n\n activeModal: string | null; // Legacy for specific hardcoded modals\n openModal: (modal: string) => void;\n}\n\nexport const useUIStore = create<UIState>((set) => ({\n sidebarOpen: true,\n toggleSidebar: () => set((state) => ({ sidebarOpen: !state.sidebarOpen })),\n setSidebarOpen: (open) => set({ sidebarOpen: open }),\n\n modal: {\n open: false,\n config: null,\n },\n confirm: (config) => set({\n modal: {\n open: true,\n config: { ...config, variant: config.variant || \"default\" },\n }\n }),\n alert: (config) => set({\n modal: {\n open: true,\n config: { \n ...config, \n variant: config.variant || \"default\",\n confirmLabel: config.confirmLabel || \"OK\",\n onConfirm: () => set((s) => ({ modal: { ...s.modal, open: false } }))\n },\n }\n }),\n closeModal: () => set((state) => ({\n modal: { ...state.modal, open: false },\n activeModal: null\n })),\n\n activeModal: null,\n openModal: (modal) => set({ activeModal: modal }),\n}));\n\n// ============================================================\n// EDITOR STORE\n// ============================================================\n\ninterface EditorState {\n editor: unknown;\n setEditor: (editor: unknown) => void;\n\n blockDrawerOpen: boolean;\n openBlockDrawer: (options?: { targetColumn?: number }) => void;\n closeBlockDrawer: () => void;\n toggleBlockDrawer: () => void;\n\n selectedBlock: string | null;\n setSelectedBlock: (block: string | null) => void;\n\n pendingInsert: {\n pos: number | null;\n column: number | null;\n };\n setPendingInsert: (pos: number | null, column?: number) => void;\n clearPendingInsert: () => void;\n}\n\nexport const useEditorStore = create<EditorState>((set) => ({\n editor: null,\n setEditor: (editor) => set({ editor }),\n\n blockDrawerOpen: false,\n openBlockDrawer: (options) =>\n set({\n blockDrawerOpen: true,\n pendingInsert: { pos: null, column: options?.targetColumn ?? null },\n }),\n closeBlockDrawer: () =>\n set({\n blockDrawerOpen: false,\n pendingInsert: { pos: null, column: null },\n }),\n toggleBlockDrawer: () =>\n set((state) => ({ blockDrawerOpen: !state.blockDrawerOpen })),\n\n selectedBlock: null,\n setSelectedBlock: (block) => set({ selectedBlock: block }),\n\n pendingInsert: { pos: null, column: null },\n setPendingInsert: (pos, column) =>\n set({ pendingInsert: { pos, column: column ?? null } }),\n clearPendingInsert: () => set({ pendingInsert: { pos: null, column: null } }),\n}));\n\n// ============================================================\n// DATA STORE\n// ============================================================\n\ninterface DataCache<T> {\n data: T | null;\n loading: boolean;\n error: string | null;\n lastFetch: number | null;\n}\n\ninterface DataStore {\n cache: Record<string, DataCache<unknown>>;\n setCache: (key: string, data: unknown) => void;\n setLoading: (key: string, loading: boolean) => void;\n setError: (key: string, error: string) => void;\n getCache: (key: string) => DataCache<unknown> | null;\n invalidateCache: (key?: string) => void;\n}\n\nexport const useDataStore = create<DataStore>((set, get) => ({\n cache: {},\n\n setCache: (key, data) =>\n set((state) => ({\n cache: {\n ...state.cache,\n [key]: { data, loading: false, error: null, lastFetch: Date.now() },\n },\n })),\n\n setLoading: (key, loading) =>\n set((state) => ({\n cache: {\n ...state.cache,\n [key]: { ...state.cache[key], loading, error: null },\n },\n })),\n\n setError: (key, error) =>\n set((state) => ({\n cache: {\n ...state.cache,\n [key]: { data: null, loading: false, error, lastFetch: null },\n },\n })),\n\n getCache: (key) => get().cache[key] || null,\n\n invalidateCache: (key) =>\n set((state) => {\n if (key) {\n const { [key]: _, ...rest } = state.cache;\n return { cache: rest };\n }\n return { cache: {} };\n }),\n}));\n","import { apiPath, adminPath, resolveApi, resolveAdmin, resolveMedia } from \"./paths\";\nimport { toast } from \"./stores\";\n\nexport interface ApiResponse<T = unknown> {\n docs?: T[];\n doc?: T;\n totalDocs?: number;\n error?: string;\n}\n\nexport { resolveApi as resolveApi, resolveAdmin as resolveAdminUrl, resolveApi as resolveUrl, resolveMedia as resolveMedia };\n\nconst API_BASE = apiPath;\nconst ADMIN_BASE = adminPath;\n\nconst TOKEN_REFRESH_URL = \"/api/auth/refresh\";\n\nasync function refreshToken(): Promise<boolean> {\n try {\n const response = await fetch(resolveApi(TOKEN_REFRESH_URL), {\n method: \"POST\",\n credentials: \"include\",\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\nexport async function fetchWithAuth(\n url: string,\n options: RequestInit = {},\n): Promise<Response> {\n const headers: Record<string, string> = {};\n if (!(options.body instanceof FormData)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n Object.assign(headers, options.headers as Record<string, string> | undefined);\n\n const response = await fetch(resolveApi(url), {\n ...options,\n credentials: \"include\",\n headers,\n });\n\n if (response.status === 401) {\n const refreshed = await refreshToken();\n if (refreshed) {\n const retryHeaders: Record<string, string> = {};\n if (!(options.body instanceof FormData)) {\n retryHeaders[\"Content-Type\"] = \"application/json\";\n }\n Object.assign(retryHeaders, options.headers as Record<string, string> | undefined);\n const retryResponse = await fetch(resolveApi(url), {\n ...options,\n credentials: \"include\",\n headers: retryHeaders,\n });\n return retryResponse;\n }\n window.location.href = \"/admin/login\";\n }\n\n return response;\n}\n\nexport async function apiGet<T = unknown>(\n url: string,\n options?: RequestInit & { autoToast?: boolean },\n): Promise<T> {\n const { autoToast = true, ...fetchOptions } = options || {};\n const response = await fetchWithAuth(url, fetchOptions);\n if (!response.ok) {\n const errorMsg = `GET Failed: ${response.status}`;\n if (autoToast) toast.error(errorMsg);\n throw new Error(errorMsg);\n }\n return response.json();\n}\n\nexport async function apiPost<T = unknown>(\n url: string,\n body?: unknown,\n options?: RequestInit & { autoToast?: boolean },\n): Promise<T> {\n const { autoToast = true, ...fetchOptions } = options || {};\n const response = await fetchWithAuth(url, {\n method: \"POST\",\n body: body ? JSON.stringify(body) : undefined,\n ...fetchOptions,\n });\n if (!response.ok) {\n let errorMessage = `POST Failed: ${response.status}`;\n try {\n const errorData = await response.json();\n if (errorData.error) errorMessage = errorData.error;\n } catch {}\n if (autoToast) toast.error(errorMessage);\n throw new Error(errorMessage);\n }\n return response.json();\n}\n\nexport async function apiPatch<T = unknown>(\n url: string,\n body?: unknown,\n options?: RequestInit & { autoToast?: boolean },\n): Promise<T> {\n const { autoToast = true, ...fetchOptions } = options || {};\n const response = await fetchWithAuth(url, {\n method: \"PATCH\",\n body: body ? JSON.stringify(body) : undefined,\n ...fetchOptions,\n });\n if (!response.ok) {\n let errorMessage = `Update Failed: ${response.status}`;\n try {\n const errorData = await response.json();\n if (errorData.error) errorMessage = errorData.error;\n } catch {}\n if (autoToast) toast.error(errorMessage);\n throw new Error(errorMessage);\n }\n return response.json();\n}\n\nexport async function apiPatchNoThrow<T = unknown>(\n url: string,\n body?: unknown,\n): Promise<{ ok: boolean; data?: T; error?: string }> {\n const response = await fetchWithAuth(url, {\n method: \"PATCH\",\n body: body ? JSON.stringify(body) : undefined,\n });\n if (!response.ok) {\n return { ok: false, error: `Error: ${response.status}` };\n }\n const data = await response.json();\n return { ok: true, data };\n}\n\nexport async function apiDelete<T = unknown>(\n url: string,\n options?: RequestInit & { autoToast?: boolean },\n): Promise<T> {\n const { autoToast = true, ...fetchOptions } = options || {};\n const response = await fetchWithAuth(url, {\n method: \"DELETE\",\n ...fetchOptions,\n });\n if (!response.ok) {\n let errorMessage = `Delete Failed: ${response.status}`;\n try {\n const errorData = await response.json();\n if (errorData.error) errorMessage = errorData.error;\n } catch {}\n if (autoToast) toast.error(errorMessage);\n throw new Error(errorMessage);\n }\n const text = await response.text();\n if (!text) return {} as T;\n return JSON.parse(text);\n}\n\nexport function buildQueryString(params: Record<string, unknown>): string {\n const urlParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null && value !== \"\") {\n urlParams.set(key, String(value));\n }\n }\n return urlParams.toString();\n}\n\nexport function withCacheBust(url: string): string {\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n return `${url}${separator}t=${Date.now()}`;\n}\n\nexport function buildSearchQuery(\n search: string,\n fields: string[],\n limit: number = 50,\n): string {\n if (!search || fields.length === 0) {\n return `limit=${limit}`;\n }\n const searchQuery = fields\n .map((f) => `where[${f}][contains]=${encodeURIComponent(search)}`)\n .join(\"&\");\n return `${searchQuery}&limit=${limit}`;\n}\n\nexport function buildCollectionUrl(\n collection: string,\n params?: Record<string, unknown>,\n): string {\n let url = `${API_BASE}/${collection}`;\n if (params) {\n const query = buildQueryString(params);\n if (query) url += `?${query}`;\n }\n return withCacheBust(url);\n}\n\nexport function buildDocumentUrl(\n collection: string,\n id: string,\n params?: Record<string, unknown>,\n): string {\n let url = `${API_BASE}/${collection}/${id}`;\n if (params) {\n const query = buildQueryString(params);\n if (query) url += `?${query}`;\n }\n return url;\n}\n\nexport async function apiUpload<T = unknown>(\n url: string,\n body: FormData,\n onProgress?: (percent: number) => void,\n): Promise<T> {\n if (!onProgress) {\n // Fast path: no progress tracking needed\n const response = await fetchWithAuth(url, {\n method: \"POST\",\n body,\n });\n if (!response.ok) {\n throw new Error(`Upload Error: ${response.status}`);\n }\n return response.json();\n }\n\n // Use XHR for upload progress events\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", resolveApi(url));\n xhr.withCredentials = true;\n\n xhr.upload.addEventListener(\"progress\", (e) => {\n if (e.lengthComputable) {\n onProgress(Math.round((e.loaded / e.total) * 100));\n }\n });\n\n xhr.addEventListener(\"load\", () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n resolve(JSON.parse(xhr.responseText));\n } catch {\n reject(new Error(\"Invalid JSON response\"));\n }\n } else if (xhr.status === 401) {\n // Attempt token refresh then retry once\n refreshToken().then((refreshed) => {\n if (!refreshed) { reject(new Error(`Upload Error: ${xhr.status}`)); return; }\n const xhr2 = new XMLHttpRequest();\n xhr2.open(\"POST\", resolveApi(url));\n xhr2.withCredentials = true;\n xhr2.upload.addEventListener(\"progress\", (e) => {\n if (e.lengthComputable) onProgress(Math.round((e.loaded / e.total) * 100));\n });\n xhr2.addEventListener(\"load\", () => {\n if (xhr2.status >= 200 && xhr2.status < 300) {\n try { resolve(JSON.parse(xhr2.responseText)); } catch { reject(new Error(\"Invalid JSON\")); }\n } else {\n reject(new Error(`Upload Error: ${xhr2.status}`));\n }\n });\n xhr2.addEventListener(\"error\", () => reject(new Error(\"Network error\")));\n xhr2.send(body);\n });\n } else {\n reject(new Error(`Upload Error: ${xhr.status}`));\n }\n });\n\n xhr.addEventListener(\"error\", () => reject(new Error(\"Network error during upload\")));\n xhr.send(body);\n });\n}","interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function Spinner({ size = \"md\", className = \"\" }: SpinnerProps) {\n return (\n <svg\n className={`kyro-spinner kyro-spinner-${size} ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeDasharray=\"40 20\"\n />\n </svg>\n );\n}\n","interface ShimmerProps {\n variant: \"text\" | \"circle\" | \"rect\" | \"card\" | \"table-row\" | \"media-card\" | \"stat-card\";\n count?: number;\n className?: string;\n}\n\nexport function Shimmer({ variant, count = 1, className = \"\" }: ShimmerProps) {\n const variants = {\n text: \"h-3 rounded-md\",\n circle: \"size-10 rounded-full\",\n rect: \"h-10 rounded-xl\",\n card: \"h-32 rounded-2xl\",\n \"table-row\": \"h-14 rounded-xl\",\n \"media-card\": \"aspect-square rounded-2xl\",\n \"stat-card\": \"h-24 rounded-2xl\",\n };\n\n return (\n <>\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n className={`kyro-shimmer ${variants[variant]} ${className}`}\n />\n ))}\n </>\n );\n}\n","import React, { type ReactNode } from \"react\";\nimport type { ComponentType, SVGAttributes } from \"react\";\n\ninterface Breadcrumb {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\ninterface Action {\n label: string;\n onClick: () => void;\n icon?: ComponentType<SVGAttributes<SVGSVGElement>>;\n variant?: \"primary\" | \"outline\" | \"ghost\";\n className?: string;\n}\n\ninterface PageHeaderProps {\n title?: string;\n description?: string;\n icon?: ComponentType<SVGAttributes<SVGSVGElement>>;\n breadcrumbs?: Breadcrumb[];\n metadata?: ReactNode[];\n back?: { label?: string; href?: string; onClick?: () => void };\n action?: Action;\n actions?: ReactNode | Action[];\n children?: ReactNode;\n}\n\nfunction BackButton({ back }: { back: NonNullable<PageHeaderProps[\"back\"]> }) {\n if (back.href) {\n return (\n <a\n href={back.href}\n onClick={(e) => {\n if (back.onClick) {\n e.preventDefault();\n back.onClick();\n }\n }}\n className=\"p-1.5 rounded-lg hover:bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] transition-all\"\n >\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"M19 12H5M12 19l-7-7 7-7\" />\n </svg>\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n onClick={back.onClick}\n className=\"p-1.5 rounded-lg hover:bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] transition-all\"\n >\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"M19 12H5M12 19l-7-7 7-7\" />\n </svg>\n </button>\n );\n}\n\nfunction DesktopBreadcrumbs({ breadcrumbs }: { breadcrumbs: Breadcrumb[] }) {\n return breadcrumbs?.map((crumb: Breadcrumb, i: number) => (\n <React.Fragment key={i}>\n {i > 0 && <span className=\"opacity-20 text-[10px]\">/</span>}\n {crumb.href || crumb.onClick ? (\n <a\n href={crumb.href}\n onClick={(e) => {\n if (crumb.onClick) {\n e.preventDefault();\n crumb.onClick();\n }\n }}\n className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-primary)] transition-all\"\n >\n {crumb.label}\n </a>\n ) : (\n <span className=\"text-[10px] font-bold tracking-widest opacity-40\">\n {crumb.label}\n </span>\n )}\n </React.Fragment>\n ));\n}\n\nfunction ActionsSlot({ actions }: { actions: NonNullable<PageHeaderProps[\"actions\"]> }) {\n if (Array.isArray(actions)) {\n return (\n <div className=\"flex items-center gap-3\">\n {actions.map((act, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={act.onClick}\n className={`flex items-center gap-2 px-6 py-2.5 rounded-xl font-bold text-sm transition-all shadow-lg shadow-[var(--kyro-primary)]/10 ${\n act.variant === \"outline\"\n ? \"border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)]\"\n : act.variant === \"ghost\"\n ? \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] shadow-none\"\n : \"kyro-btn-primary hover:opacity-90\"\n } ${act.className || \"\"}`}\n >\n {act.icon && <act.icon className=\"w-4 h-4\" />}\n {act.label}\n </button>\n ))}\n </div>\n );\n }\n return <>{actions}</>;\n}\n\nfunction SingleAction({ action }: { action: NonNullable<PageHeaderProps[\"action\"]> }) {\n return (\n <button\n type=\"button\"\n onClick={action.onClick}\n className={`kyro-btn kyro-btn-primary flex items-center gap-2 px-6 py-2.5 rounded-xl font-bold text-sm hover:opacity-90 transition-all shadow-lg shadow-[var(--kyro-primary)]/10 w-full lg:w-auto justify-center ${action.className || \"\"}`}\n >\n {action.icon && <action.icon className=\"w-4 h-4\" />}\n {action.label}\n </button>\n );\n}\n\nexport function PageHeader({\n title,\n description,\n icon: Icon,\n breadcrumbs,\n metadata,\n back,\n action,\n actions,\n children,\n}: PageHeaderProps) {\n const lastBreadcrumb = breadcrumbs?.[breadcrumbs.length - 1];\n\n return (\n <div className=\"surface-tile px-3 md:px-6 py-3 md:pt-4 mb-4 md:mb-8\">\n {/* ─── MOBILE ─── */}\n <div className=\"md:hidden space-y-2\">\n {(breadcrumbs || back) && (\n <div className=\"flex items-center gap-2\">\n {back && <BackButton back={back} />}\n <details className=\"group [&::-webkit-details-marker]:hidden flex-1 min-w-0\">\n <summary className=\"flex items-center gap-2 cursor-pointer list-none\">\n <span className=\"flex-1 text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] truncate\">\n {lastBreadcrumb?.label || \"\"}\n </span>\n <svg className=\"w-3 h-3 text-[var(--kyro-text-secondary)] opacity-40 group-open:rotate-180 transition-transform\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </summary>\n <div className=\"mt-2 pt-2 border-t border-[var(--kyro-border)] space-y-2\">\n {breadcrumbs && (\n <div className=\"flex items-center gap-2\">\n {breadcrumbs.map((crumb: Breadcrumb, i: number) => (\n <React.Fragment key={i}>\n {i > 0 && <span className=\"opacity-20 text-[10px]\">/</span>}\n {crumb.href || crumb.onClick ? (\n <a\n href={crumb.href}\n onClick={(e) => {\n if (crumb.onClick) { e.preventDefault(); crumb.onClick(); }\n }}\n className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-primary)] transition-all\"\n >\n {crumb.label}\n </a>\n ) : (\n <span className=\"text-[10px] font-bold tracking-widest opacity-40\">{crumb.label}</span>\n )}\n </React.Fragment>\n ))}\n </div>\n )}\n {metadata && (\n <div className=\"flex items-center gap-2 flex-wrap\">\n {metadata.map((item, i) => (\n <React.Fragment key={i}>{item}</React.Fragment>\n ))}\n </div>\n )}\n {children}\n </div>\n </details>\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n {Icon && <Icon className=\"w-5 h-5 text-[var(--kyro-primary)] shrink-0\" />}\n {title && (\n <h1 className=\"text-lg font-bold tracking-tighter text-[var(--kyro-text-primary)] truncate\">\n {title}\n </h1>\n )}\n {metadata && !description && (\n <span className=\"h-2 w-2 rounded-full bg-[var(--kyro-primary)] shrink-0\" />\n )}\n </div>\n\n {description && (\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <p className=\"text-[var(--kyro-text-secondary)] font-medium opacity-60 line-clamp-1 min-w-0 text-xs\">\n {description}\n </p>\n {metadata && (\n <div className=\"flex items-center gap-2\">\n {metadata.map((item: ReactNode, i: number) => (\n <React.Fragment key={i}>\n {i === 0 && <span className=\"opacity-20 ml-1\">·</span>}\n {item}\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* ─── DESKTOP ─── */}\n <div className=\"hidden md:flex md:flex-row md:items-center justify-between gap-6\">\n <div className=\"min-w-0 flex-1\">\n {(breadcrumbs || back) && (\n <div className=\"flex items-center gap-2 mb-3\">\n {back && <BackButton back={back} />}\n {breadcrumbs && <DesktopBreadcrumbs breadcrumbs={breadcrumbs} />}\n </div>\n )}\n\n <div className=\"flex items-center gap-3\">\n {Icon && <Icon className=\"w-6 h-6 text-[var(--kyro-primary)]\" />}\n {title && (\n <h1 className=\"text-xl font-bold tracking-tighter text-[var(--kyro-text-primary)] truncate\">\n {title}\n </h1>\n )}\n </div>\n\n {(description || metadata) && (\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 mt-1\">\n {description && (\n <p className=\"text-[var(--kyro-text-secondary)] font-medium opacity-60 line-clamp-1 min-w-0\">\n {description}\n </p>\n )}\n {metadata && (\n <div className=\"flex items-center gap-2\">\n {metadata.map((item: ReactNode, i: number) => (\n <React.Fragment key={i}>\n {i === 0 && (description || i > 0) && <span className=\"opacity-20 ml-1\">·</span>}\n {item}\n </React.Fragment>\n ))}\n </div>\n )}\n {children}\n </div>\n )}\n </div>\n\n <div className=\"flex items-center gap-3 flex-wrap shrink-0\">\n {actions && <ActionsSlot actions={actions} />}\n {action && <SingleAction action={action} />}\n </div>\n </div>\n\n {/* mobile actions */}\n {(actions || action) && (\n <div className=\"md:hidden flex items-center gap-2 mt-3 pt-3 border-t border-[var(--kyro-border)]\">\n {action && <SingleAction action={action} />}\n {actions && <ActionsSlot actions={actions} />}\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport type BadgeVariant =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"outline\"\n | \"draft\"\n | \"published\"\n | \"scheduled\"\n | \"archived\"\n | \"active\"\n | \"inactive\"\n | \"pending\"\n | \"completed\"\n | \"cancelled\";\n\ninterface BadgeProps {\n variant?: BadgeVariant;\n status?: BadgeVariant; // Alias for variant when used for statuses\n className?: string;\n children?: ReactNode;\n dot?: boolean;\n}\n\nconst statusConfig: Record<string, { class: string; label?: string }> = {\n draft: { class: \"bg-gray-100 text-gray-600\", label: \"Draft\" },\n published: { class: \"bg-green-100 text-green-700\", label: \"Published\" },\n scheduled: { class: \"bg-blue-100 text-blue-700\", label: \"Scheduled\" },\n archived: { class: \"bg-yellow-100 text-yellow-700\", label: \"Archived\" },\n active: { class: \"bg-green-100 text-green-700\", label: \"Active\" },\n inactive: { class: \"bg-gray-100 text-gray-600\", label: \"Inactive\" },\n pending: { class: \"bg-yellow-100 text-yellow-700\", label: \"Pending\" },\n completed: { class: \"bg-green-100 text-green-700\", label: \"Completed\" },\n cancelled: { class: \"bg-red-100 text-red-700\", label: \"Cancelled\" },\n};\n\nexport function Badge({\n variant,\n status,\n className = \"\",\n children,\n dot = false,\n}: BadgeProps) {\n const activeVariant = variant || status || \"default\";\n const config = statusConfig[activeVariant];\n\n const variantClass = config \n ? config.class \n : `kyro-badge-${activeVariant}`;\n\n return (\n <span className={`kyro-badge ${variantClass} ${className}`}>\n {dot && (\n <span className=\"w-1.5 h-1.5 rounded-full bg-current mr-1.5 opacity-60\" />\n )}\n {children || config?.label || activeVariant}\n </span>\n );\n}\n\nexport function CountBadge({ count, max = 99 }: { count: number; max?: number }) {\n if (count === 0) return null;\n\n return (\n <span className=\"inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 text-xs font-medium bg-gray-200 text-gray-700 rounded-full\">\n {count > max ? `${max}+` : count}\n </span>\n );\n}\n\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'danger' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n loading?: boolean;\n children: ReactNode;\n}\n\nexport function Button({\n variant = 'secondary',\n size = 'md',\n loading = false,\n children,\n className = '',\n disabled,\n ...props\n}: ButtonProps) {\n const baseClass = 'kyro-btn';\n const variantClass = `kyro-btn-${variant}`;\n const sizeClass = `kyro-btn-${size}`;\n\n return (\n <button type=\"button\"\n className={`${baseClass} ${variantClass} ${sizeClass} ${className}`}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? (\n <span className=\"kyro-btn-loading\">\n <svg className=\"kyro-btn-spinner\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"3\" fill=\"none\" strokeDasharray=\"60 30\" />\n </svg>\n </span>\n ) : null}\n <span className={loading ? 'kyro-btn-text-hidden' : ''}>\n {children}\n </span>\n </button>\n );\n}\n","import { Button } from \"./Button\";\n\ninterface PaginationProps {\n page: number;\n totalPages: number;\n totalDocs?: number;\n limit?: number;\n onPageChange: (page: number) => void;\n onLimitChange?: (limit: number) => void;\n}\n\nexport function Pagination({ page, totalPages, totalDocs, limit, onPageChange, onLimitChange }: PaginationProps) {\n if (totalPages <= 1) return null;\n\n return (\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-3 px-4 py-3 border-t border-[var(--kyro-border)]\">\n {totalDocs !== undefined && limit ? (\n <span className=\"text-xs text-[var(--kyro-text-secondary)] font-medium\">\n Showing {(page - 1) * limit + 1} to {Math.min(page * limit, totalDocs)} of {totalDocs}\n </span>\n ) : (\n <span />\n )}\n <div className=\"flex items-center gap-2 flex-wrap justify-center\">\n {onLimitChange && (\n <select\n value={limit}\n onChange={(e) => onLimitChange(Number(e.target.value))}\n className=\"text-xs border border-[var(--kyro-border)] rounded-lg px-2 py-1 bg-[var(--kyro-bg)] text-[var(--kyro-text-secondary)]\"\n >\n <option value={10}>10/page</option>\n <option value={25}>25/page</option>\n <option value={50}>50/page</option>\n <option value={100}>100/page</option>\n </select>\n )}\n <span className=\"text-xs text-[var(--kyro-text-secondary)] font-medium\">\n Page {page} of {totalPages}\n </span>\n <div className=\"flex gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n >\n ← Previous\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n >\n Next →\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","/**\n * Recursively resolves a field value from formData regardless of\n * whether it lives at root level, inside a tab container, group,\n * or collapsible.\n *\n * Mirrors the `useAsTitle` pattern — finds where a field actually\n * lives in the config, then reads from the correct location in formData.\n *\n * @param fields - The top-level field definitions from the collection/global config\n * @param formData - The current form data object\n * @param fieldName - The name of the field to resolve\n * @returns The field value, or undefined if not found\n */\nexport function resolveFieldValue(\n fields: Record<string, unknown>[],\n formData: Record<string, unknown>,\n fieldName: string,\n): unknown {\n // 1. Check root level first\n if (fieldName in formData) {\n return formData[fieldName];\n }\n\n // 2. Search inside containers (tabs, groups, collapsibles)\n return searchContainers(fields, formData, fieldName);\n}\n\nfunction searchContainers(\n fields: Record<string, unknown>[],\n formData: Record<string, unknown>,\n fieldName: string,\n): unknown {\n for (const field of fields) {\n if (!field.name) continue;\n\n // Tabs container\n if (field.type === \"tabs\" && \"tabs\" in field) {\n const containerData = formData[field.name as string];\n if (containerData && typeof containerData === \"object\") {\n // Check if the field is directly inside the tab data\n if (fieldName in (containerData as Record<string, unknown>)) {\n return (containerData as Record<string, unknown>)[fieldName];\n }\n // Recursively search nested tabs/groups inside this tab container\n const nested = searchContainers(\n (field as any).tabs?.flatMap((t: any) => t.fields || []) || [],\n containerData as Record<string, unknown>,\n fieldName,\n );\n if (nested !== undefined) return nested;\n }\n }\n\n // Group or collapsible container\n if ((field.type === \"group\" || field.type === \"collapsible\") && \"fields\" in field) {\n const containerData = formData[field.name as string];\n if (containerData && typeof containerData === \"object\") {\n // Check if the field is directly inside the group data\n if (fieldName in (containerData as Record<string, unknown>)) {\n return (containerData as Record<string, unknown>)[fieldName];\n }\n // Recursively search nested fields inside this group\n const nested = searchContainers(\n (field as any).fields || [],\n containerData as Record<string, unknown>,\n fieldName,\n );\n if (nested !== undefined) return nested;\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds the container path for a field (useful for debugging).\n * Returns an array of container names leading to the field, or [] if at root.\n */\nexport function resolveFieldPath(\n fields: Record<string, unknown>[],\n fieldName: string,\n prefix: string = \"\",\n): string[] {\n for (const field of fields) {\n if (!field.name) continue;\n\n if (field.type === \"tabs\" && \"tabs\" in field) {\n const tabs = (field as any).tabs || [];\n for (const tab of tabs) {\n if (tab.fields) {\n const found = tab.fields.find((f: any) => f.name === fieldName);\n if (found) return [field.name as string];\n const nested = resolveFieldPath(tab.fields, fieldName, field.name as string);\n if (nested.length > 0) return [field.name as string, ...nested];\n }\n }\n }\n\n if ((field.type === \"group\" || field.type === \"collapsible\") && \"fields\" in field) {\n const groupFields = (field as any).fields || [];\n const found = groupFields.find((f: any) => f.name === fieldName);\n if (found) return [field.name as string];\n const nested = resolveFieldPath(groupFields, fieldName, field.name as string);\n if (nested.length > 0) return [field.name as string, ...nested];\n }\n }\n\n return [];\n}\n","import { Search, Filter, Columns3, X, Trash2, Archive, ChevronUp, Edit2 } from \"./ui/icons\";\nimport { useState, useEffect, useMemo, useCallback, useRef } from \"react\";\nimport { Spinner } from \"./ui/Spinner\";\nimport { Shimmer } from \"./ui/Shimmer\";\nimport { Plus } from \"./ui/icons\";\nimport { apiGet, apiDelete, withCacheBust } from \"../lib/api\";\n\nimport { useAuthStore, toast } from \"../lib/stores\";\nimport { useUIStore } from \"../lib/stores\";\nimport { adminPath as ADMIN_BASE } from \"../lib/paths\";\nimport { PageHeader } from \"./ui/PageHeader\";\nimport { Badge } from \"./ui/Badge\";\nimport { Pagination } from \"./ui/Pagination\";\n\n\nimport type { CollectionConfig, Field } from \"@kyro-cms/core\";\nimport { resolveFieldValue } from \"../lib/resolve-field-value\";\n\ntype FieldConfig = Field;\n\ninterface FilterConfig {\n field: string;\n operator:\n | \"equals\"\n | \"contains\"\n | \"gt\"\n | \"lt\"\n | \"gte\"\n | \"lte\"\n | \"between\"\n | \"in\";\n value: string;\n}\n\ninterface SortConfig {\n field: string;\n direction: \"asc\" | \"desc\";\n}\n\ninterface ListViewProps {\n collection: CollectionConfig;\n collectionSlug?: string;\n initialDocs?: any[];\n initialTotal?: number;\n onCreate?: () => void;\n onEdit?: (id: string) => void;\n // For legacy Admin.tsx compatibility\n config?: any;\n}\n\n/**\n * Unified ListView component used across both SPA (Admin.tsx) and MPA (Astro pages) modes.\n */\nexport function ListView({\n collection,\n collectionSlug: providedSlug,\n initialDocs = [],\n initialTotal = 0,\n onCreate: providedOnCreate,\n onEdit: providedOnEdit,\n config,\n}: ListViewProps) {\n const collectionSlug = providedSlug || collection.slug;\n const { permissions } = useAuthStore();\n const canCreate = permissions?.collections?.[collectionSlug]?.create !== false;\n const canDelete = permissions?.collections?.[collectionSlug]?.delete !== false;\n const canUpdate = permissions?.collections?.[collectionSlug]?.update !== false;\n\n const handleCreate = () => {\n if (!canCreate) return;\n if (providedOnCreate) {\n providedOnCreate();\n } else {\n window.location.href = `${ADMIN_BASE}/${collectionSlug}/new`;\n }\n };\n\n const handleEdit = (id: string) => {\n if (providedOnEdit) {\n providedOnEdit(id);\n } else {\n window.location.href = `${ADMIN_BASE}/${collectionSlug}/${id}`;\n }\n };\n\n const [docs, setDocs] = useState<any[]>(initialDocs);\n const [totalDocs, setTotalDocs] = useState(initialTotal);\n const [loading, setLoading] = useState(false);\n const [page, setPage] = useState(1);\n const [limit, setLimit] = useState(10);\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [search, setSearch] = useState(\"\");\n const [filters, setFilters] = useState<FilterConfig[]>([]);\n const { confirm, alert } = useUIStore();\n\n const addFilter = () => {\n setFilters([...filters, { field: \"\", operator: \"equals\", value: \"\" }]);\n };\n\n const clearAll = () => {\n setSearch(\"\");\n setFilters([]);\n setSort(null);\n };\n\n const removeFilter = (index: number) => {\n setFilters(filters.filter((_, i) => i !== index));\n };\n\n const updateFilter = (index: number, updates: Partial<FilterConfig>) => {\n setFilters(filters.map((f, i) => (i === index ? { ...f, ...updates } : f)));\n };\n const [sort, setSort] = useState<SortConfig | null>(null);\n const [showFilters, setShowFilters] = useState(false);\n const [showColumns, setShowColumns] = useState(false);\n\n function flattenFields(fields: FieldConfig[]): FieldConfig[] {\n const result: FieldConfig[] = [];\n for (const field of fields || []) {\n if (!field.name || field.hidden === true || field.admin?.hidden || field.name === \"id\") continue;\n if (field.type === \"tabs\" && field.tabs) {\n for (const tab of field.tabs) {\n if (tab.fields) {\n result.push(...flattenFields(tab.fields));\n }\n }\n } else if (\n (field.type === \"row\" || field.type === \"collapsible\") &&\n field.fields\n ) {\n result.push(...flattenFields(field.fields));\n } else {\n result.push(field);\n }\n }\n return result;\n }\n\n const allFields = useMemo(\n () => flattenFields(collection.fields),\n [collection.fields],\n );\n\n const titleField: string | undefined =\n typeof collection.admin?.useAsTitle === \"string\"\n ? collection.admin.useAsTitle\n : allFields.find((f) => f.type !== \"group\" && typeof f.name === \"string\")?.name;\n\n const [visibleColumns, setVisibleColumns] = useState<Set<string>>(() => {\n let cols: string[];\n if (collection.admin?.defaultColumns) {\n cols = [...(collection.admin?.defaultColumns as string[] || [])];\n } else {\n cols = allFields.slice(0, 4).map((f) => f.name).filter((n): n is string => !!n);\n }\n\n if (titleField && cols.includes(titleField)) {\n cols = [titleField, ...cols.filter((c) => c !== titleField)];\n }\n\n if (!cols.includes(\"updatedAt\")) {\n cols.push(\"updatedAt\");\n }\n\n return new Set(cols);\n });\n\n const toggleColumn = useCallback((fieldName: string) => {\n setVisibleColumns((prev) => {\n const next = new Set(prev);\n if (next.has(fieldName)) {\n next.delete(fieldName);\n } else {\n next.add(fieldName);\n }\n return next;\n });\n }, []);\n\n function resolveSortField(fieldName: string): string {\n const field = allFields.find((f) => f.name === fieldName);\n if (!field) return fieldName;\n if (field.type === \"group\" && field.fields?.[0]?.name) {\n return `${fieldName}.${field.fields[0].name}`;\n }\n return fieldName;\n }\n\n const handleSort = useCallback((fieldName: string) => {\n const resolvedField = resolveSortField(fieldName);\n setSort((prev) => {\n if (prev && prev.field === resolvedField) {\n return {\n field: resolvedField,\n direction: prev.direction === \"asc\" ? \"desc\" : \"asc\",\n };\n }\n return { field: resolvedField, direction: \"asc\" };\n });\n }, []);\n\n const displayFields = useMemo(\n () => {\n const fields = allFields.filter((f): f is typeof f & { name: string } => !!f.name && visibleColumns.has(f.name));\n if (visibleColumns.has(\"status\")) {\n fields.push({\n name: \"status\",\n type: \"select\",\n label: \"Status\",\n options: [\n { value: \"draft\", label: \"Draft\" },\n { value: \"published\", label: \"Published\" },\n ],\n } as any);\n }\n return fields;\n },\n [allFields, visibleColumns],\n );\n\n function fieldContainsTitle(field: FieldConfig): boolean {\n if (!field.name || !titleField) return false;\n if (field.name === titleField) return true;\n if (field.type === \"group\" && field.fields?.[0]?.name === titleField)\n return true;\n return false;\n }\n\n function extractFieldValue(doc: any, field: FieldConfig): any {\n if (!field.name) return null;\n const val = resolveFieldValue(collection.fields as any, doc, field.name);\n return val ?? null;\n }\n\n const fetchDocs = useCallback(async () => {\n setLoading(true);\n try {\n const params = new URLSearchParams({\n page: page.toString(),\n limit: limit.toString(),\n });\n\n if (search) params.append(\"search\", search);\n if (sort) params.append(\"sort\", sort.field);\n if (sort) params.append(\"order\", sort.direction);\n if (filters.length > 0) {\n params.append(\"filters\", JSON.stringify(filters));\n }\n\n const result = (await apiGet(\n withCacheBust(`/api/${collectionSlug}?${params}`),\n { autoToast: false },\n ) as { docs?: Record<string, unknown>[]; totalDocs?: number });\n setDocs(result.docs || []);\n setTotalDocs(result.totalDocs || 0);\n } catch (error) {\n console.error(\"Failed to load docs:\", error);\n } finally {\n setLoading(false);\n }\n }, [collectionSlug, page, limit, search, sort, filters]);\n\n // Initial fetch only if not provided with initialDocs or if empty\n useEffect(() => {\n if (docs.length === 0 && initialTotal === 0) {\n fetchDocs();\n }\n }, []);\n\n // Subsequent fetches on filter/pagination changes\n const isFirstRender = useRef(true);\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n fetchDocs();\n }, [page, limit, search, sort, filters]);\n\n const handleSelectAll = () => {\n if (selectedIds.size === docs.length) {\n setSelectedIds(new Set());\n } else {\n setSelectedIds(new Set(docs.map((d) => d.id)));\n }\n };\n\n const handleSelectOne = (id: string) => {\n const newSet = new Set(selectedIds);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n setSelectedIds(newSet);\n };\n\n const handleBulkDelete = () => {\n confirm({\n title: \"Delete Documents\",\n message: `Are you sure you want to delete ${selectedIds.size} document(s)? This cannot be undone.`,\n variant: \"danger\",\n onConfirm: async () => {\n try {\n for (const id of Array.from(selectedIds)) {\n await apiDelete(`/api/${collectionSlug}/${id}`);\n }\n setSelectedIds(new Set());\n fetchDocs();\n toast.success(\"Documents deleted\");\n } catch (error) {\n console.error(\"Bulk delete failed:\", error);\n toast.error(\"Failed to delete some documents\");\n }\n }\n });\n };\n\n const handleDeleteSingle = (id: string) => {\n confirm({\n title: \"Delete Document\",\n message: \"Are you sure you want to delete this document? This cannot be undone.\",\n variant: \"danger\",\n onConfirm: async () => {\n try {\n await apiDelete(`/api/${collectionSlug}/${id}`);\n fetchDocs();\n toast.success(\"Document deleted\");\n } catch (error) {\n console.error(\"Delete failed:\", error);\n toast.error(\"Failed to delete document\");\n }\n }\n });\n };\n\n const totalPages = Math.ceil(totalDocs / limit);\n const hasActiveFilters = search || filters.length > 0 || sort;\n\n return (\n <div className=\"space-y-6\">\n <PageHeader\n title={collection.label || collectionSlug}\n description={collection.admin?.description || `Manage your ${collection.label || collectionSlug}`}\n metadata={totalDocs > 0 ? [\n <span key=\"count\" className=\"text-xs font-bold opacity-60\">\n {totalDocs} documents\n </span>\n ] : undefined}\n action={canCreate ? {\n label: `Create ${collection.singularLabel || collection.label || collectionSlug}`,\n onClick: handleCreate,\n icon: Plus,\n } : undefined}\n\n />\n\n\n {/* Toolbar */}\n <div className=\"surface-tile p-4 flex flex-col lg:flex-row gap-4 items-start lg:items-center\">\n {/* Search */}\n <div className=\"relative flex-1 w-full lg:max-w-md\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--kyro-text-muted)]\" />\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full pl-10 pr-4 py-2.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-sm font-medium text-[var(--kyro-text-primary)] placeholder:text-[var(--kyro-text-muted)] focus:outline-none focus:ring-2 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n />\n </div>\n\n <div className=\"flex items-center gap-2 flex-wrap\">\n {/* Filter Toggle */}\n <button\n type=\"button\"\n onClick={() => setShowFilters(!showFilters)}\n className={`flex items-center gap-2 px-4 py-2 rounded-xl font-bold text-sm transition-all ${showFilters || filters.length > 0\n ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)]\"\n : \"bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)]\"\n }`}\n >\n <Filter className=\"w-4 h-4\" />\n Filters\n {filters.length > 0 && (\n <span className=\"ml-1 px-1.5 py-0.5 bg-[var(--kyro-sidebar-text-active)] text-[var(--kyro-sidebar-active)] rounded-full text-xs\">\n {filters.length}\n </span>\n )}\n </button>\n\n {/* Column Toggle */}\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setShowColumns(!showColumns)}\n className=\"flex items-center gap-2 px-4 py-2 rounded-xl font-bold text-sm bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] transition-all\"\n >\n <Columns3 className=\"w-4 h-4\" />\n Columns\n </button>\n {showColumns && (\n <div className=\"absolute right-0 top-full mt-2 w-56 surface-tile border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 overflow-hidden\">\n <div className=\"p-3 border-b border-[var(--kyro-border)]\">\n <span className=\"text-xs font-bold tracking-wider text-[var(--kyro-text-secondary)]\">\n Toggle Columns\n </span>\n </div>\n <div className=\"p-2 max-h-64 overflow-y-auto\">\n {allFields.map((field) => {\n if (!field.name) return null;\n return (\n <label\n key={field.name}\n className=\"flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--kyro-surface-accent)] cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n checked={visibleColumns.has(field.name)}\n onChange={() => toggleColumn(field.name!)}\n className=\"w-4 h-4 rounded border-[var(--kyro-border)] text-[var(--kyro-sidebar-active)] focus:ring-[var(--kyro-sidebar-active)]\"\n />\n <span className=\"text-sm font-medium text-[var(--kyro-text-primary)]\">\n {field.label || field.name}\n </span>\n </label>\n );\n })}\n </div>\n </div>\n )}\n </div>\n\n {/* Clear All */}\n {hasActiveFilters && (\n <button\n type=\"button\"\n onClick={clearAll}\n className=\"px-4 py-2 rounded-xl font-bold text-sm text-red-500 hover:bg-red-50 dark:hover:bg-red-500/10 transition-all\"\n >\n Clear All\n </button>\n )}\n </div>\n </div>\n\n {/* Filter Panel */}\n {showFilters && (\n <div className=\"surface-tile p-4 border-l-4 border-[var(--kyro-sidebar-active)]\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"font-medium text-[var(--kyro-text-primary)]\">\n Advanced Filters\n </h3>\n <button\n type=\"button\"\n onClick={addFilter}\n className=\"flex items-center gap-2 px-3 py-1.5 text-sm font-bold text-[var(--kyro-sidebar-active)] hover:bg-[var(--kyro-surface-accent)] rounded-lg transition-all\"\n >\n <Plus className=\"w-4 h-4\" />\n Add Filter\n </button>\n </div>\n <div className=\"space-y-3\">\n {filters.map((filter, index) => (\n <div key={index} className=\"flex flex-wrap gap-2 items-center\">\n <select\n value={filter.field}\n onChange={(e) =>\n updateFilter(index, { field: e.target.value })\n }\n className=\"px-3 py-2 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg text-sm font-medium text-[var(--kyro-text-primary)]\"\n >\n {allFields.map((field) => (\n <option key={field.name} value={field.name}>\n {field.label || field.name}\n </option>\n ))}\n </select>\n <select\n value={filter.operator}\n onChange={(e) =>\n updateFilter(index, {\n operator: e.target.value as FilterConfig[\"operator\"],\n })\n }\n className=\"px-3 py-2 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg text-sm font-medium text-[var(--kyro-text-primary)]\"\n >\n <option value=\"equals\">Equals</option>\n <option value=\"contains\">Contains</option>\n <option value=\"gt\">Greater than</option>\n <option value=\"lt\">Less than</option>\n <option value=\"gte\">Greater or equal</option>\n <option value=\"lte\">Less or equal</option>\n </select>\n <input\n type=\"text\"\n value={filter.value}\n onChange={(e) =>\n updateFilter(index, { value: e.target.value })\n }\n placeholder=\"Value...\"\n className=\"flex-1 min-w-[150px] px-3 py-2 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg text-sm font-medium text-[var(--kyro-text-primary)]\"\n />\n <button\n type=\"button\"\n onClick={() => removeFilter(index)}\n className=\"p-2 text-[var(--kyro-text-muted)] hover:text-red-500 transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n ))}\n {filters.length === 0 && (\n <p className=\"text-sm text-[var(--kyro-text-muted)]\">\n No filters applied. Click \"Add Filter\" to create one.\n </p>\n )}\n </div>\n </div>\n )}\n\n {/* Bulk Actions */}\n {selectedIds.size > 0 && (\n <div className=\"surface-tile p-4 flex items-center justify-between border-l-4 border-[var(--kyro-sidebar-active)]\">\n <span className=\"text-sm font-medium text-[var(--kyro-text-primary)]\">\n {selectedIds.size} selected\n </span>\n <div className=\"flex gap-2\">\n {canDelete && (\n <button\n type=\"button\"\n onClick={handleBulkDelete}\n className=\"flex items-center gap-2 px-4 py-2 bg-red-500 text-white rounded-lg font-bold text-sm hover:bg-red-600 transition-all\"\n >\n <Trash2 className=\"w-4 h-4\" />\n Delete Selected\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => setSelectedIds(new Set())}\n className=\"px-4 py-2 text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] font-bold text-sm transition-all\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n {/* Data Table */}\n <div className=\"surface-tile overflow-hidden\">\n {loading ? (\n <div className=\"space-y-2 p-4\">\n <Shimmer variant=\"table-row\" count={8} />\n </div>\n ) : docs.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-16 px-8\">\n <div className=\"w-16 h-16 rounded-2xl bg-[var(--kyro-surface-accent)] flex items-center justify-center mb-4\">\n <Archive className=\"w-4 h-4\" />\n </div>\n <p className=\"font-medium text-[var(--kyro-text-primary)] text-base\">\n No documents found\n </p>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] mt-1\">\n {hasActiveFilters\n ? \"Try adjusting your filters or search query.\"\n : `Get started by creating your first ${((collection.singularLabel || collection.label || collectionSlug) as string).toLowerCase()}.`}\n </p>\n {!hasActiveFilters && canCreate && (\n <button\n type=\"button\"\n onClick={handleCreate}\n className=\"mt-4 kyro-btn kyro-btn-md kyro-btn-primary shadow-md flex items-center gap-2\"\n >\n <Plus className=\"w-4 h-4\" />\n Create{\" \"}\n{String(collection.singularLabel || collection.label || collectionSlug)}\n </button>\n )}\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"text-[var(--kyro-text-secondary)] font-bold text-[10px] tracking-[0.3em] border-b border-[var(--kyro-border)] whitespace-nowrap\">\n <th className=\"px-4 py-4 w-10\">\n <input\n type=\"checkbox\"\n checked={\n selectedIds.size === docs.length && docs.length > 0\n }\n onChange={handleSelectAll}\n className=\"w-4 h-4 rounded border-[var(--kyro-border-strong)] text-[var(--kyro-sidebar-active)] focus:ring-[var(--kyro-sidebar-active)]\"\n />\n </th>\n {displayFields.map((field) => (\n <th\n key={field.name}\n className=\"px-4 py-4 cursor-pointer hover:text-[var(--kyro-text-primary)] transition-colors\"\n onClick={() => handleSort(field.name)}\n >\n <div className=\"flex items-center gap-2\">\n {checkTabbedValue(displayFields, field.type) ??\n (field.label || field.name)}\n {sort && sort.field === field.name && (\n <ChevronUp className=\"w-4 h-4\" />\n )}\n </div>\n </th>\n ))}\n {collection.timestamps ? (\n <th className=\"px-4 py-4\">Created</th>\n ) : null}\n <th className=\"px-4 py-4 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-[var(--kyro-border)]\">\n {docs.map((doc) => (\n <tr\n key={doc.id}\n className=\"hover:bg-[var(--kyro-surface-accent)] transition-colors cursor-pointer group\"\n onClick={() => handleEdit(doc.id)}\n >\n <td\n className=\"px-4 py-3\"\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={selectedIds.has(doc.id)}\n onChange={() => handleSelectOne(doc.id)}\n className=\"w-4 h-4 rounded border-[var(--kyro-border-strong)] text-[var(--kyro-sidebar-active)] focus:ring-[var(--kyro-sidebar-active)]\"\n />\n </td>\n {displayFields.map((field) => {\n const rawValue = extractFieldValue(doc, field);\n const cellValue =\n field.type === \"select\" && rawValue\n ? field.options?.find((o: any) => o.value === rawValue)\n ?.label || rawValue\n : formatCellValue(rawValue, field.type);\n return (\n <td\n key={field.name}\n className={`px-4 py-3 ${fieldContainsTitle(field) ? \"font-medium text-[var(--kyro-text-primary)]\" : \"text-[var(--kyro-text-secondary)]\"}`}\n >\n {cellValue}\n </td>\n );\n })}\n {collection.timestamps ? (\n <td className=\"px-4 py-3 text-sm text-[var(--kyro-text-secondary)]\">\n {doc.createdAt\n ? new Date(doc.createdAt as string).toLocaleDateString(\n \"en-US\",\n {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n },\n )\n : \"—\"}\n </td>\n ) : null}\n <td\n className=\"px-4 py-3 text-right\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-end gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => handleEdit(doc.id)}\n className=\"flex items-center gap-2 px-3 py-1.5 hover:bg-[var(--kyro-surface-accent)] rounded-lg text-sm font-bold text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] transition-all\"\n title={canUpdate ? \"Edit\" : \"View\"}\n >\n <Edit2 className=\"w-4 h-4\" />\n </button>\n {canDelete && (\n <button\n type=\"button\"\n onClick={() => handleDeleteSingle(doc.id)}\n className=\"inline-flex items-center justify-center w-8 h-8 rounded-md text-[var(--kyro-text-muted)] hover:bg-red-50 hover:text-red-500 dark:hover:bg-red-500/10 transition-colors\"\n title=\"Delete\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n\n {/* Pagination */}\n <Pagination\n page={page}\n totalPages={totalPages}\n totalDocs={totalDocs}\n limit={limit}\n onPageChange={setPage}\n onLimitChange={(newLimit) => {\n setLimit(newLimit);\n setPage(1);\n }}\n />\n </div>\n );\n}\n\nfunction formatCellValue(value: any, type?: string): string {\n if (value === null || value === undefined) return \"—\";\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n if (type === \"number\" || type === \"price\") return String(value);\n if (type === \"date\" || type === \"datetime\") {\n return new Date(value).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n }\n\n if (Array.isArray(value)) {\n return value.map(item => {\n if (item && typeof item === \"object\") {\n return item.title || item.name || item.email || item.filename || item.url || JSON.stringify(item).slice(0, 30);\n }\n return String(item ?? \"\").slice(0, 30);\n }).filter(Boolean).join(\", \");\n }\n\n if (typeof value === \"object\") {\n if (value.title) return value.title;\n if (value.name) return value.name;\n if (value.email) return value.email;\n return JSON.stringify(value).slice(0, 50);\n }\n return String(value).slice(0, 60);\n}\n\nfunction checkTabbedValue(data: any[], type: string): string | undefined {\n if (type !== \"tabs\") return;\n const label = data[0]?.tabs?.[0]?.fields?.[0]?.label;\n return label;\n}\n","import React, { useState, useEffect, useRef, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Image as ImageIcon, Film, FileText, Music, File, X, Loader2, Check } from \"../ui/icons\";\nimport { apiGet, withCacheBust, apiPost, apiUpload, resolveApi, resolveMedia } from \"../../lib/api\";\nimport { toast } from \"../../lib/stores\";\n\ninterface UploadFieldProps {\n field: any;\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n}\n\ninterface MediaItem {\n id: string;\n filename: string;\n url: string;\n thumbnailUrl?: string;\n mimeType: string;\n title?: string;\n folder?: string;\n}\n\ninterface MediaFolder {\n name: string;\n path: string;\n}\n\nconst getFileType = (mimeType?: string, filename?: string) => {\n const mime = mimeType?.toLowerCase() || \"\";\n const name = filename?.toLowerCase() || \"\";\n\n if (\n mime.startsWith(\"image/\") ||\n name.match(/\\.(jpe?g|png|gif|webp|avif|svg)$/i)\n )\n return \"image\";\n if (mime.startsWith(\"video/\") || name.match(/\\.(mp4|webm|ogg|mov)$/i))\n return \"video\";\n if (mime.startsWith(\"audio/\") || name.match(/\\.(mp3|wav|ogg|m4a)$/i))\n return \"audio\";\n if (mime.includes(\"pdf\") || name.endsWith(\".pdf\")) return \"pdf\";\n if (name.match(/\\.(doc|docx|txt|rtf|odt)$/i)) return \"document\";\n if (name.match(/\\.(xls|xlsx|csv)$/i)) return \"spreadsheet\";\n if (name.match(/\\.(zip|tar|gz|7z|rar)$/i)) return \"archive\";\n\n return \"other\";\n};\n\nconst FileIcon = ({\n type,\n className,\n}: {\n type: string;\n className?: string;\n}) => {\n switch (type) {\n case \"image\":\n return <ImageIcon className={className} />;\n case \"video\":\n return <Film className={className} />;\n case \"audio\":\n return <Music className={className} />;\n case \"pdf\":\n case \"document\":\n return <FileText className={className} />;\n default:\n return <File className={className} />;\n }\n};\n\nexport function UploadField({\n field,\n value,\n onChange,\n disabled,\n}: UploadFieldProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const urlInputRef = useRef<HTMLInputElement>(null);\n const [uploading, setUploading] = useState(false);\n const [showPicker, setShowPicker] = useState(false);\n const [isPickerFullscreen, setIsPickerFullscreen] = useState(false);\n const [mediaItems, setMediaItems] = useState<MediaItem[]>([]);\n const [folders, setFolders] = useState<MediaFolder[]>([]);\n const [selectedFolder, setSelectedFolder] = useState<string>(\"\");\n const [mediaLoading, setMediaLoading] = useState(false);\n const [pickerSearch, setPickerSearch] = useState(\"\");\n const [showUrlInput, setShowUrlInput] = useState(false);\n const [urlValue, setUrlValue] = useState(\"\");\n const [urlError, setUrlError] = useState(\"\");\n const [selectedItems, setSelectedItems] = useState<MediaItem[]>([]);\n\n const fieldLabel = field?.label || field?.name || \"File\";\n const maxCount = field.maxCount ?? (field.hasMany ? 999 : 1);\n const isMultiple = maxCount > 1;\n const currentValue = Array.isArray(value) ? value : value ? [value] : [];\n const canAddMore = currentValue.length < maxCount;\n\n useEffect(() => {\n const fetchMissingDetails = async () => {\n const idsToFetch = currentValue\n .filter((item): item is string => typeof item === 'string')\n .map(id => id);\n\n const objectIdsToFetch = currentValue\n .filter((item): item is Record<string, unknown> =>\n typeof item === 'object' && item !== null &&\n typeof item.id === 'string' &&\n !item.url && !item.filename && !item.mimeType\n )\n .map(item => item.id as string);\n\n const allIds = [...idsToFetch, ...objectIdsToFetch];\n if (allIds.length === 0) return;\n\n try {\n const fetchedItems = await Promise.all(\n allIds.map(id => apiGet<any>(`/api/media/${id}`))\n );\n\n const newItems = [...currentValue];\n fetchedItems.forEach(fetchedItem => {\n const id = fetchedItem.id as string;\n const strIndex = newItems.findIndex(item => item === id);\n if (strIndex !== -1) {\n newItems[strIndex] = fetchedItem;\n return;\n }\n const objIndex = newItems.findIndex(\n item => typeof item === 'object' && item !== null && (item as any).id === id\n );\n if (objIndex !== -1) {\n newItems[objIndex] = fetchedItem;\n }\n });\n\n onChange(isMultiple ? newItems : newItems[0]);\n } catch (err) {\n console.error(\"Failed to fetch media details:\", err);\n }\n };\n\n fetchMissingDetails();\n }, [value]);\n\n useEffect(() => {\n if (showPicker) {\n loadFolders();\n loadMedia();\n }\n }, [showPicker, selectedFolder]);\n\n const loadFolders = async () => {\n try {\n const result = await apiGet<any>(withCacheBust(\"/api/media/folders\"));\n setFolders(result.folders || []);\n } catch {\n setFolders([]);\n }\n };\n\n const loadMedia = async () => {\n setMediaLoading(true);\n try {\n let url = withCacheBust(\n `/api/media?limit=60&sortBy=createdAt&sortDir=desc`,\n );\n if (selectedFolder) {\n url += \"&folder=\" + encodeURIComponent(selectedFolder);\n }\n const result = await apiGet<any>(url);\n setMediaItems(result.docs || []);\n } catch {\n setMediaItems([]);\n } finally {\n setMediaLoading(false);\n }\n };\n\n const uploadFile = async (file: File) => {\n setUploading(true);\n try {\n const formData = new FormData();\n formData.append(\"file\", file);\n if (selectedFolder) {\n formData.append(\"folder\", selectedFolder);\n }\n const result = await apiUpload<any>(\"/api/media/upload\", formData);\n const newImage = {\n id: result.id,\n filename: result.filename,\n originalName: (result as any).originalName ?? file.name,\n url: result.url,\n mimeType: file.type,\n };\n if (isMultiple) {\n onChange([...currentValue, newImage]);\n } else {\n onChange(newImage);\n }\n toast.success(`Asset synchronized: ${newImage.filename}`);\n } catch (err) {\n console.error(\"Upload failed:\", err);\n toast.error(`Upload failed: ${err instanceof Error ? err.message : \"Unknown error\"}`);\n } finally {\n setUploading(false);\n }\n };\n\n const addByUrl = async () => {\n const url = urlValue.trim();\n if (!url) return;\n\n setUrlError(\"\");\n try {\n const result = await apiPost<any>(\"/api/media/upload\", { url });\n const originalName = (() => {\n try {\n return (\n new URL(url).pathname.split(\"/\").pop() ||\n result.originalName ||\n \"url-image\"\n );\n } catch {\n return result.originalName || \"url-image\";\n }\n })();\n const newImage = {\n id: result.id,\n filename: result.filename,\n originalName,\n url: result.url,\n mimeType: result.mimeType || \"image/*\",\n };\n if (isMultiple) {\n onChange([...currentValue, newImage]);\n } else {\n onChange(newImage);\n }\n toast.success(`URL asset established: ${newImage.filename}`);\n setUrlValue(\"\");\n setShowUrlInput(false);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : \"Invalid URL\";\n setUrlError(message);\n }\n };\n\n const toMediaObj = (item: MediaItem) => ({\n id: item.id,\n filename: item.filename,\n url: item.url,\n mimeType: item.mimeType,\n });\n\n const selectFromLibrary = (item: MediaItem) => {\n if (isMultiple) {\n setSelectedItems(prev => {\n const exists = prev.find(i => i.id === item.id);\n if (exists) return prev.filter(i => i.id !== item.id);\n return [...prev, item];\n });\n } else {\n onChange(toMediaObj(item));\n setShowPicker(false);\n setPickerSearch(\"\");\n }\n };\n\n const handleDone = () => {\n if (selectedItems.length > 0) {\n const newItems = [...currentValue, ...selectedItems.map(toMediaObj)];\n onChange(newItems);\n }\n setSelectedItems([]);\n setShowPicker(false);\n setPickerSearch(\"\");\n };\n\n const removeImage = (index: number) => {\n const newValue = [...currentValue];\n newValue.splice(index, 1);\n onChange(isMultiple ? newValue : newValue[0] || null);\n };\n\n const filteredMedia = useMemo(() => {\n return mediaItems.filter((item) => {\n return (\n !pickerSearch ||\n item.filename?.toLowerCase().includes(pickerSearch.toLowerCase()) ||\n item.title?.toLowerCase().includes(pickerSearch.toLowerCase())\n );\n });\n }, [mediaItems, pickerSearch]);\n\n if (uploading) {\n return (\n <div className=\"text-xs text-[var(--kyro-text-muted)] p-2\">\n Uploading...\n </div>\n );\n }\n\n const renderImagePreview = (img: any, index?: number) => {\n if (!img) return null;\n const fileType = getFileType(img.mimeType, img.filename || img.url);\n const isImage = fileType === \"image\";\n\n return (\n <div\n key={index}\n className=\"flex items-center gap-3 p-2.5 bg-[var(--kyro-surface-accent)] rounded-lg border border-[var(--kyro-border)] group\"\n >\n <div className=\"w-10 h-10 rounded-md overflow-hidden bg-[var(--kyro-surface)] border border-[var(--kyro-border)] flex items-center justify-center flex-shrink-0\">\n {isImage ? (\n <img\n src={resolveMedia(img.url)}\n alt={img.filename || \"Preview\"}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <FileIcon\n type={fileType}\n className=\"w-5 h-5 text-[var(--kyro-text-secondary)]\"\n />\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-[11px] font-medium truncate text-[var(--kyro-text-primary)]\">\n {img.originalName || img.filename || \"Unnamed File\"}\n </div>\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] tracking-wider font-bold\">\n {fieldLabel}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() =>\n index !== undefined ? removeImage(index) : onChange(null)\n }\n disabled={disabled}\n className=\"p-1.5 rounded-md text-[var(--kyro-text-muted)] hover:text-[var(--kyro-error)] hover:bg-[var(--kyro-danger-bg)] transition-all opacity-0 group-hover:opacity-100\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n );\n };\n\n if (value) {\n return (\n <div className=\"space-y-2\">\n {isMultiple ? (\n <div className=\"grid grid-cols-2 gap-2\">\n {currentValue.map((img: any, i: number) =>\n renderImagePreview(img, i),\n )}\n {canAddMore && (\n <button\n type=\"button\"\n onClick={() => {\n setSelectedItems([]);\n setShowPicker(true);\n }}\n disabled={disabled}\n className=\"flex items-center justify-center h-12 border-2 border-dashed border-[var(--kyro-border)] rounded-lg text-sm text-[var(--kyro-text-secondary)] hover:border-[var(--kyro-border-active)] cursor-pointer transition-colors\"\n >\n + Add {fieldLabel}\n </button>\n )}\n </div>\n ) : (\n renderImagePreview(value)\n )}\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) uploadFile(file);\n }}\n disabled={disabled}\n className=\"hidden\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2 relative\">\n <input\n ref={inputRef}\n type=\"file\"\n accept={field.allowedTypes?.join(\",\") || \"*/*\"}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) uploadFile(file);\n }}\n disabled={disabled}\n className=\"hidden\"\n />\n <div className=\"flex gap-2 flex-wrap\">\n <button\n type=\"button\"\n onClick={() => inputRef.current?.click()}\n disabled={disabled}\n className=\"px-3 py-1.5 text-xs font-semibold rounded border border-dashed border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] cursor-pointer hover:border-[var(--kyro-border-active)] transition-colors\"\n >\n + Upload {fieldLabel}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setSelectedItems([]);\n setShowPicker(true);\n }}\n disabled={disabled}\n className=\"px-3 py-1.5 text-xs font-semibold rounded border border-[var(--kyro-border)] bg-[var(--kyro-surface)] text-[var(--kyro-text-secondary)] cursor-pointer hover:border-[var(--kyro-border-active)] transition-colors\"\n >\n Library\n </button>\n <button\n type=\"button\"\n onClick={() => setShowUrlInput(!showUrlInput)}\n disabled={disabled}\n className=\"px-3 py-1.5 text-xs font-semibold rounded border border-[var(--kyro-border)] bg-[var(--kyro-surface)] text-[var(--kyro-text-secondary)] cursor-pointer hover:border-[var(--kyro-border-active)] transition-colors\"\n >\n URL\n </button>\n </div>\n\n {showUrlInput && (\n <div className=\"flex gap-2 items-center\">\n <input\n ref={urlInputRef}\n type=\"url\"\n placeholder=\"https://example.com/image.jpg\"\n value={urlValue}\n onChange={(e) => {\n setUrlValue(e.target.value);\n setUrlError(\"\");\n }}\n onKeyDown={(e) => e.key === \"Enter\" && addByUrl()}\n disabled={disabled}\n className=\"flex-1 px-2 py-1.5 text-xs rounded border border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-primary)]\"\n />\n <button\n type=\"button\"\n onClick={addByUrl}\n disabled={disabled || !urlValue.trim()}\n className=\"kyro-btn kyro-btn-primary px-3 py-1.5 text-xs rounded cursor-pointer hover:opacity-90 transition-opacity disabled:opacity-50\"\n >\n Add\n </button>\n {urlError && (\n <span className=\"text-xs text-[var(--kyro-error)]\">{urlError}</span>\n )}\n </div>\n )}\n\n {showPicker &&\n (isPickerFullscreen ? (\n createPortal(\n <MediaPickerContent\n isFullscreen\n isMultiple={isMultiple}\n selectedItems={selectedItems}\n pickerSearch={pickerSearch}\n setPickerSearch={setPickerSearch}\n folders={folders}\n selectedFolder={selectedFolder}\n setSelectedFolder={setSelectedFolder}\n mediaLoading={mediaLoading}\n filteredMedia={filteredMedia}\n selectFromLibrary={selectFromLibrary}\n onDone={handleDone}\n setIsPickerFullscreen={setIsPickerFullscreen}\n setShowPicker={setShowPicker}\n />,\n document.body,\n )\n ) : (\n <MediaPickerContent\n isFullscreen={false}\n isMultiple={isMultiple}\n selectedItems={selectedItems}\n pickerSearch={pickerSearch}\n setPickerSearch={setPickerSearch}\n folders={folders}\n selectedFolder={selectedFolder}\n setSelectedFolder={setSelectedFolder}\n mediaLoading={mediaLoading}\n filteredMedia={filteredMedia}\n selectFromLibrary={selectFromLibrary}\n onDone={handleDone}\n setIsPickerFullscreen={setIsPickerFullscreen}\n setShowPicker={setShowPicker}\n />\n ))}\n </div>\n );\n}\n\nfunction MediaPickerContent({\n isFullscreen,\n isMultiple,\n selectedItems,\n pickerSearch,\n setPickerSearch,\n folders,\n selectedFolder,\n setSelectedFolder,\n mediaLoading,\n filteredMedia,\n selectFromLibrary,\n onDone,\n setIsPickerFullscreen,\n setShowPicker,\n}: {\n isFullscreen: boolean;\n isMultiple: boolean;\n selectedItems: MediaItem[];\n pickerSearch: string;\n setPickerSearch: (v: string) => void;\n folders: MediaFolder[];\n selectedFolder: string;\n setSelectedFolder: (v: string) => void;\n mediaLoading: boolean;\n filteredMedia: MediaItem[];\n selectFromLibrary: (item: MediaItem) => void;\n onDone: () => void;\n setIsPickerFullscreen: (v: boolean) => void;\n setShowPicker: (v: boolean) => void;\n}) {\n const isItemSelected = (id: string) => selectedItems.some(i => i.id === id);\n\n return (\n <div\n className={`${isFullscreen\n ? \"fixed inset-0 z-[9999]\"\n : \"relative z-[9999] w-[360px] max-h-[400px] mt-1 rounded-lg shadow-lg\"\n } overflow-hidden bg-[var(--kyro-surface)] border border-[var(--kyro-border)] flex flex-col`}\n >\n <div className=\"p-2 border-b border-[var(--kyro-border)] flex flex-col gap-2\">\n <input\n type=\"text\"\n placeholder=\"Search media...\"\n value={pickerSearch}\n onChange={(e) => setPickerSearch(e.target.value)}\n className=\"w-full px-2 py-1.5 text-xs rounded border border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-primary)]\"\n />\n {folders.length > 0 && (\n <div className=\"flex gap-1 flex-wrap\">\n <button\n type=\"button\"\n onClick={() => setSelectedFolder(\"\")}\n className={`kyro-btn-primary px-2 py-1 text-xs rounded transition-colors ${selectedFolder === \"\"\n ? \"\"\n : \"bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-border)]\"\n }`}\n >\n All\n </button>\n {folders.slice(0, 6).map((folder) => (\n <button\n key={folder.path}\n type=\"button\"\n onClick={() => setSelectedFolder(folder.path)}\n className={`kyro-btn-primary px-2 py-1 text-xs rounded transition-colors ${selectedFolder === folder.path\n ? \"\"\n : \"bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-border)]\"\n }`}\n >\n {folder.name}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Picker Items */}\n <div className=\"flex-1 overflow-auto p-2\">\n {mediaLoading ? (\n <div className=\"text-center py-5 text-xs text-[var(--kyro-text-muted)]\">\n Loading...\n </div>\n ) : filteredMedia.length === 0 ? (\n <div className=\"text-center py-5 text-xs text-[var(--kyro-text-muted)]\">\n No media found\n </div>\n ) : (\n <div\n className={`grid gap-1 ${isFullscreen\n ? \"grid-cols-[repeat(auto-fill,minmax(140px,1fr))]\"\n : \"grid-cols-3\"\n }`}\n >\n {filteredMedia.map((item) => {\n const selected = isItemSelected(item.id);\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => selectFromLibrary(item)}\n className={`border rounded-md overflow-hidden cursor-pointer p-0 bg-[var(--kyro-surface)] transition-all relative group ${selected\n ? \"border-[var(--kyro-primary)] ring-2 ring-[var(--kyro-primary)]\"\n : \"border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]\"\n }`}\n >\n <div\n className={`w-full flex items-center justify-center bg-[var(--kyro-surface-accent)] ${isFullscreen ? \"h-[120px]\" : \"h-[80px]\"\n }`}\n >\n {getFileType(item.mimeType, item.filename) === \"image\" ? (\n <img\n src={resolveMedia(item.thumbnailUrl || item.url)}\n alt={item.filename}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <FileIcon\n type={getFileType(item.mimeType, item.filename)}\n className={isFullscreen ? \"w-10 h-10\" : \"w-8 h-8\"}\n />\n )}\n </div>\n {isMultiple && selected && (\n <div className=\"absolute top-1 right-1 w-5 h-5 rounded-full bg-[var(--kyro-primary)] flex items-center justify-center\">\n <Check className=\"w-3 h-3 text-white\" />\n </div>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n <div className=\"p-2 border-t border-[var(--kyro-border)] flex justify-between items-center\">\n <span className=\"text-xs text-[var(--kyro-text-muted)]\">\n {filteredMedia.length} items\n </span>\n <div className=\"flex gap-2 items-center\">\n {isMultiple && (\n <button\n type=\"button\"\n onClick={onDone}\n className=\"kyro-btn kyro-btn-primary px-3 py-1 text-xs font-semibold rounded cursor-pointer hover:opacity-90 transition-opacity\"\n >\n Done{selectedItems.length > 0 ? ` (${selectedItems.length})` : \"\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => setIsPickerFullscreen(!isFullscreen)}\n className=\"p-1.5 rounded text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)] transition-colors\"\n title={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"}\n >\n {isFullscreen ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\" />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7\" />\n </svg>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowPicker(false);\n setIsPickerFullscreen(false);\n }}\n className=\"text-xs text-[var(--kyro-text-secondary)] bg-transparent border-none cursor-pointer hover:text-[var(--kyro-text-primary)]\"\n >\n Close\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { Field } from \"@kyro-cms/core/client\";\n\ninterface FieldLayoutProps {\n field: Field;\n error?: string;\n children: React.ReactNode;\n hideLabel?: boolean;\n}\n\nexport default function FieldLayout({\n field,\n error,\n children,\n hideLabel = false,\n}: FieldLayoutProps) {\n return (\n <div className=\"space-y-2.5 w-full group\">\n {field.label && !hideLabel && (\n <div className=\"flex justify-between items-end mb-1\">\n <label className=\"block text-xs font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50 group-focus-within:opacity-100 group-focus-within:text-[var(--kyro-primary)] transition-all duration-300\">\n {field.label}\n {field.required && (\n <span className=\"text-[var(--kyro-error)] ml-1\">*</span>\n )}\n </label>\n </div>\n )}\n\n <div className=\"relative transform transition-transform duration-200 focus-within:scale-[1.002]\">\n {children}\n </div>\n\n {(field.admin?.description || error) && (\n <div className=\"flex flex-col gap-1.5 px-1\">\n {field.admin?.description && !error && (\n <p className=\"text-[11px] leading-relaxed text-[var(--kyro-text-muted)] font-medium opacity-60 italic\">\n {field.admin.description}\n </p>\n )}\n {error && (\n <p className=\"text-[11px] leading-relaxed text-[var(--kyro-error)] font-bold flex items-center gap-2 animate-in fade-in slide-in-from-top-1 duration-300\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-[var(--kyro-error)] shadow-[0_0_8px_var(--kyro-error)]\" />\n {error}\n </p>\n )}\n </div>\n )}\n </div>\n\n );\n}\n","import { X } from \"./icons\";\nimport React, { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface SlidePanelProps {\n open: boolean;\n onClose: () => void;\n title: string;\n subtitle?: string;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n children: ReactNode;\n width?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n showOverlay?: boolean;\n accentClass?: string;\n}\n\nexport function SlidePanel({\n open,\n onClose,\n title,\n children,\n width = \"md\",\n showOverlay = false,\n accentClass,\n}: SlidePanelProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n const [hydrated, setHydrated] = useState(false);\n\n useEffect(() => {\n setHydrated(true);\n }, []);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"\";\n };\n }, [open, onClose]);\n\n const widthClasses = {\n sm: \"w-full sm:w-[320px]\",\n md: \"w-full sm:w-[400px]\",\n lg: \"w-full sm:w-[550px]\",\n xl: \"w-full sm:w-[700px]\",\n };\n\n if (!open || !hydrated) return null;\n\n return createPortal(\n <>\n {showOverlay && (\n <div\n className=\"fixed inset-0 z-[99998] bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n )}\n <div\n ref={panelRef}\n data-kyro-slide-panel=\"true\"\n data-kyro-slide-width={width}\n className={`fixed right-0 top-0 bottom-0 z-[99999] ${widthClasses[width]} bg-[var(--kyro-surface)] ${accentClass ? `border-l-2 ${accentClass}` : \"border-l border-[var(--kyro-border)]\"\n } shadow-2xl flex flex-col animate-slideIn`}\n >\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-[var(--kyro-border)] bg-[var(--kyro-surface)]\">\n <h2 className=\"text-sm font-semibold text-[var(--kyro-text-primary)]\">\n {title}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1.5 text-[var(--kyro-text-muted)] hover:text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)] rounded-lg transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"flex-1 overflow-y-auto p-4\">{children}</div>\n </div>\n <style>{`\n @keyframes slideIn {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n .animate-slideIn {\n animation: slideIn 300ms ease-out;\n }\n `}</style>\n </>,\n document.body,\n );\n}\n","import { X } from \"./icons\";\nimport React, { useEffect, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function ModalContent({ children }: { children: ReactNode }) {\n return <div className=\"text-[var(--kyro-text-secondary)]\">{children}</div>;\n}\n\nexport function ModalActions({ children }: { children: ReactNode }) {\n return (\n <div className=\"flex items-center justify-end gap-3 mt-6\">{children}</div>\n );\n}\n\ninterface ModalProps {\n open: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n footer?: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"full\";\n variant?: \"default\" | \"danger\" | \"lightbox\";\n}\n\nexport function Modal({\n open,\n onClose,\n title,\n children,\n footer,\n size = \"md\",\n variant = \"default\",\n}: ModalProps) {\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"\";\n };\n }, [open, onClose]);\n\n if (!open) return null;\n\n const sizeClasses = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n full: \"w-full h-full max-w-none rounded-none border-0\",\n };\n\n const isLightbox = variant === \"lightbox\";\n\n return createPortal(\n <div className=\"fixed inset-0 z-[9999] flex items-center justify-center p-4\">\n <div\n className={`absolute inset-0 transition-all duration-500 ${isLightbox ? \"bg-black/95 backdrop-blur-none\" : \"bg-[var(--kyro-black)]/40 backdrop-blur-md\"}`}\n onClick={onClose}\n />\n <div\n className={`relative ${sizeClasses[size]} ${isLightbox ? \"bg-transparent text-white\" : \"bg-[var(--kyro-surface)]\"} ${!isLightbox && size !== \"full\" ? \"rounded-[var(--kyro-radius-lg)]\" : \"\"} shadow-2xl animate-in fade-in zoom-in-95 duration-300 ${!isLightbox ? \"border\" : \"\"} ${variant === \"danger\"\n ? \"border-red-500/30\"\n : \"border-[var(--kyro-border)]\"\n } flex flex-col overflow-hidden`}\n >\n {!isLightbox && (\n <div className=\"flex items-center justify-between px-8 py-6 border-b border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)]/50 backdrop-blur-md\">\n <h2 className=\"text-xl font-bold text-[var(--kyro-text-primary)]\">\n {title}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-2 text-[var(--kyro-text-muted)] hover:text-[var(--kyro-text-primary)] rounded-xl hover:bg-[var(--kyro-surface)] transition-all duration-200\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n )}\n <div className={`flex-1 overflow-auto ${isLightbox ? \"\" : \"px-8 py-8\"}`}>{children}</div>\n {footer && !isLightbox && (\n <div className=\"flex items-center justify-end gap-3 px-8 py-6 border-t border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)]/50\">\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n\n}\n\ninterface ConfirmModalProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: \"default\" | \"danger\";\n loading?: boolean;\n}\n\nexport function ConfirmModal({\n open,\n onClose,\n onConfirm,\n title,\n message,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n variant = \"default\",\n loading = false,\n}: ConfirmModalProps) {\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={title}\n size=\"sm\"\n footer={\n <>\n <button\n type=\"button\"\n onClick={onClose}\n disabled={loading}\n className=\"kyro-btn kyro-btn-md kyro-btn-secondary\"\n >\n {cancelLabel}\n </button>\n <button\n type=\"button\"\n onClick={onConfirm}\n disabled={loading}\n className={`kyro-btn kyro-btn-md ${variant === \"danger\"\n ? \"kyro-btn-danger\"\n : \"kyro-btn-primary\"\n }`}\n >\n {loading ? \"Loading...\" : confirmLabel}\n </button>\n </>\n }\n >\n <p className=\"text-[var(--kyro-text-secondary)]\">{message}</p>\n </Modal>\n );\n}\n","import { X } from \"./icons\";\nimport React, { useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface PromptModalProps {\n open: boolean;\n onClose: () => void;\n onSubmit: (value: string) => void;\n title: string;\n placeholder?: string;\n defaultValue?: string;\n}\n\nexport function PromptModal({\n open,\n onClose,\n onSubmit,\n title,\n placeholder = \"\",\n defaultValue = \"\",\n}: PromptModalProps) {\n const [value, setValue] = useState(defaultValue);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (value.trim()) {\n onSubmit(value.trim());\n setValue(\"\");\n onClose();\n }\n };\n\n if (!open) return null;\n\n return createPortal(\n <div className=\"fixed inset-0 z-[9999] flex items-center justify-center\">\n <div\n className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\"\n onClick={onClose}\n />\n <div className=\"relative w-full max-w-lg mx-4 bg-[var(--kyro-surface)] rounded-lg shadow-2xl animate-in fade-in zoom-in-95 duration-200 border border-[var(--kyro-border)]\">\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-[var(--kyro-border)]\">\n <h2 className=\"text-lg font-semibold text-[var(--kyro-text-primary)]\">\n {title}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1 text-[var(--kyro-text-muted)] hover:text-[var(--kyro-text-primary)] rounded-lg hover:bg-[var(--kyro-surface-accent)] transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n <form onSubmit={handleSubmit}>\n <div className=\"px-6 py-4\">\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n autoFocus\n className=\"w-full px-3 py-2 border border-[var(--kyro-input-border)] rounded-lg bg-[var(--kyro-input-bg)] text-[var(--kyro-text-primary)] placeholder-[var(--kyro-text-muted)] focus:outline-none focus:ring-2 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n />\n </div>\n <div className=\"flex items-center justify-end gap-3 px-6 py-4 border-t border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)] rounded-b-lg\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-4 py-2 rounded-lg font-medium text-sm border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] hover:text-[var(--kyro-text-primary)] transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n disabled={!value.trim()}\n className=\"px-4 py-2 rounded-lg font-medium text-sm bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] hover:opacity-90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Confirm\n </button>\n </div>\n </form>\n </div>\n </div>,\n document.body,\n );\n}\n","import { Search, Check, Server, Filter } from \"./ui/icons\";\nimport React, { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Spinner } from \"./ui/Spinner\";\nimport { Shimmer } from \"./ui/Shimmer\";\nimport { SlidePanel } from \"./ui/SlidePanel\";\nimport { Modal } from \"./ui/Modal\";\nimport { Pagination } from \"./ui/Pagination\";\nimport { Badge } from \"./ui/Badge\";\nimport { Folder } from \"./ui/icons\";\n\nimport {\n Trash2,\n Download,\n Maximize2,\n X,\n FileIcon,\n FolderInput,\n FolderPlus,\n Grid,\n Link,\n Crop as CropIcon,\n Film,\n Music,\n FileText,\n Archive,\n} from \"./ui/icons\";\nimport { PromptModal } from \"./ui/PromptModal\";\nimport ReactCrop, {\n type Crop,\n centerCrop,\n makeAspectCrop,\n convertToPixelCrop,\n} from \"react-image-crop\";\nimport \"react-image-crop/dist/ReactCrop.css\";\nimport {\n apiGet,\n apiPost,\n apiDelete,\n apiPatch,\n withCacheBust,\n apiUpload,\n} from \"../lib/api\";\nimport { useAuthStore, useUIStore, toast } from \"../lib/stores\";\n\ninterface MediaItem {\n id: string;\n title: string;\n filename: string;\n originalName?: string;\n url: string;\n thumbnailUrl?: string;\n type: \"image\" | \"video\" | \"audio\" | \"document\" | \"archive\" | \"other\";\n mimeType: string;\n fileSize: number;\n folder?: string;\n alt?: string;\n caption?: string;\n createdAt: string;\n updatedAt?: string;\n}\n\nfunction getAbsoluteUrl(relativeUrl: unknown): string {\n if (typeof relativeUrl !== \"string\" || !relativeUrl) return \"\";\n if (typeof window === \"undefined\") return relativeUrl;\n // Remote URLs and blob URLs are returned as-is\n if (relativeUrl.startsWith(\"http\") || relativeUrl.startsWith(\"blob:\")) {\n return relativeUrl;\n }\n // Remove consecutive slashes for local paths (e.g. //photo... -> /photo...)\n const sanitized = relativeUrl.replace(/^\\/+/, \"/\");\n return `${window.location.origin}${sanitized}`;\n}\n\ntype FilterType =\n | \"all\"\n | \"image\"\n | \"video\"\n | \"audio\"\n | \"document\"\n | \"archive\"\n | \"other\";\n\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + \" \" + sizes[i];\n}\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nfunction getFileType(mimeType: string): FilterType {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (\n mimeType.includes(\"zip\") ||\n mimeType.includes(\"tar\") ||\n mimeType.includes(\"archive\")\n )\n return \"archive\";\n if (\n mimeType.includes(\"pdf\") ||\n mimeType.includes(\"doc\") ||\n mimeType.includes(\"text\")\n )\n return \"document\";\n return \"other\";\n}\n\nexport function MediaGallery({\n onSelect,\n multiple = true,\n pickerMode = false,\n}: {\n onSelect?: (items: MediaItem[]) => void;\n multiple?: boolean;\n pickerMode?: boolean;\n}) {\n const { permissions } = useAuthStore();\n const canUpload = permissions?.media?.create !== false;\n const canDelete = permissions?.media?.delete !== false;\n const canUpdate = permissions?.media?.update !== false;\n\n const [items, setItems] = useState<MediaItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [folders, setFolders] = useState<string[]>([]);\n const [currentFolder, setCurrentFolder] = useState<string>(\"\");\n const [search, setSearch] = useState(\"\");\n const [filter, setFilter] = useState<FilterType>(\"all\");\n const [view, setView] = useState<\"grid\" | \"list\">(\"grid\");\n const [panelItem, setPanelItem] = useState<MediaItem | null>(null);\n const [showPreview, setShowPreview] = useState(false);\n const [showCrop, setShowCrop] = useState(false);\n const [uploading, setUploading] = useState(false);\n const [uploadProgress, setUploadProgress] = useState<Record<string, number>>(\n {},\n );\n const [showNewFolderModal, setShowNewFolderModal] = useState(false);\n const [showMobileFilters, setShowMobileFilters] = useState(false);\n const [storageConfigured, setStorageConfigured] = useState<boolean | null>(null);\n const [storageChecked, setStorageChecked] = useState(false);\n const [showStorageConfigModal, setShowStorageConfigModal] = useState(false);\n const [page, setPage] = useState(1);\n const [total, setTotal] = useState(0);\n const [totalPages, setTotalPages] = useState(1);\n const limit = 40;\n\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const { confirm, alert } = useUIStore();\n const [isDragging, setIsDragging] = useState(false);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [crop, setCrop] = useState<Crop>();\n const imgRef = useRef<HTMLImageElement>(null);\n\n const loadMedia = useCallback(async () => {\n setLoading(true);\n try {\n const params = new URLSearchParams({\n page: page.toString(),\n limit: limit.toString(),\n });\n if (currentFolder) params.append(\"folder\", currentFolder);\n if (search) params.append(\"search\", search);\n if (filter !== \"all\") params.append(\"type\", filter);\n\n const result = await apiGet(withCacheBust(`/api/media?${params}`));\n setItems((result.docs || []).map((doc: Record<string, unknown>) => ({\n ...doc,\n type: getFileType(doc.mimeType),\n })));\n setTotal(result.totalDocs || 0);\n setTotalPages(result.totalPages || 1);\n } catch (error) {\n console.error(\"Failed to load media:\", error);\n } finally {\n setLoading(false);\n }\n }, [page, currentFolder, search, filter]);\n\n const loadFolders = useCallback(async () => {\n try {\n const result = await apiGet(withCacheBust(\"/api/media/folders\"));\n setFolders(Array.isArray(result) ? result : result.folders || []);\n } catch (error) {\n console.error(\"Failed to load folders:\", error);\n }\n }, []);\n\n const checkStorage = useCallback(async () => {\n try {\n const res = await apiGet(\"/api/globals/storage-settings\");\n const isConfigured = !!res?.data?.provider;\n setStorageConfigured(isConfigured);\n } catch (e) {\n setStorageConfigured(false);\n }\n }, []);\n\n useEffect(() => {\n if (!pickerMode) checkStorage();\n }, [checkStorage, pickerMode]);\n\n useEffect(() => {\n if (pickerMode) return;\n if (storageConfigured === false && !storageChecked) {\n setStorageChecked(true);\n setShowStorageConfigModal(true);\n }\n }, [pickerMode, storageConfigured, storageChecked]);\n\n useEffect(() => {\n loadMedia();\n }, [loadMedia]);\n\n useEffect(() => {\n loadFolders();\n }, [loadFolders]);\n\n useEffect(() => {\n if (pickerMode) return;\n const handlePaste = (e: ClipboardEvent) => {\n const files = e.clipboardData?.files;\n if (files && files.length > 0) {\n handleUpload(files);\n }\n };\n window.addEventListener(\"paste\", handlePaste);\n return () => window.removeEventListener(\"paste\", handlePaste);\n }, [pickerMode, currentFolder, storageConfigured]);\n\n const handleUpload = async (files: FileList | File[]) => {\n if (!storageConfigured) {\n setShowStorageConfigModal(true);\n return;\n }\n\n setUploading(true);\n let successCount = 0;\n let failCount = 0;\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n try {\n const formData = new FormData();\n formData.append(\"file\", file);\n if (currentFolder) formData.append(\"folder\", currentFolder);\n\n await apiUpload(\"/api/media/upload\", formData, (progress: number) => {\n setUploadProgress((prev) => ({\n ...prev,\n [file.name]: progress,\n }));\n });\n successCount++;\n } catch (error) {\n console.error(`Upload failed for ${file.name}:`, error);\n failCount++;\n }\n }\n\n setUploading(false);\n setUploadProgress({});\n loadMedia();\n loadFolders();\n if (failCount > 0) {\n toast.error(`${failCount} file(s) failed to upload`);\n }\n if (successCount > 0) {\n toast.success(`${successCount} file(s) uploaded successfully`);\n }\n };\n\n const handleBulkDelete = () => {\n confirm({\n title: \"Delete Media\",\n message: `Are you sure you want to delete ${selectedIds.size} item(s)? This cannot be undone.`,\n variant: \"danger\",\n onConfirm: async () => {\n try {\n for (const id of Array.from(selectedIds)) {\n await apiDelete(`/api/media/${id}`);\n }\n setSelectedIds(new Set());\n loadMedia();\n toast.success(`${selectedIds.size} item(s) deleted`);\n } catch (error) {\n console.error(\"Bulk delete failed:\", error);\n toast.error(\"Failed to delete some items\");\n }\n }\n });\n };\n\n const handleSelectOne = (id: string, e: React.SyntheticEvent) => {\n e.stopPropagation();\n const newSet = new Set(selectedIds);\n if (newSet.has(id)) {\n newSet.delete(id);\n } else {\n if (!multiple) newSet.clear();\n newSet.add(id);\n }\n setSelectedIds(newSet);\n };\n\n const createFolder = async (name: string) => {\n try {\n await apiPost(\"/api/media/folders\", { name });\n loadFolders();\n setShowNewFolderModal(false);\n toast.success(`Folder \"${name}\" created`);\n } catch (error) {\n console.error(\"Failed to create folder:\", error);\n toast.error(\"Failed to create folder\");\n }\n };\n\n const handleDeleteFolder = (folder: string) => {\n confirm({\n title: \"Delete Folder\",\n message: `Are you sure you want to delete the folder \"${folder}\"? All media in this folder will be moved to the root.`,\n variant: \"danger\",\n confirmLabel: \"Delete Folder\",\n onConfirm: async () => {\n try {\n await apiDelete(`/api/media/folders?path=${encodeURIComponent(folder)}`);\n if (currentFolder === folder) setCurrentFolder(\"\");\n loadFolders();\n loadMedia();\n toast.success(`Folder \"${folder}\" deleted`);\n } catch (error) {\n console.error(\"Failed to delete folder:\", error);\n toast.error(\"Failed to delete folder\");\n }\n }\n });\n };\n\n const updateMetadata = async (id: string, data: Partial<MediaItem>) => {\n try {\n const result = await apiPatch(`/api/media/${id}`, data);\n setItems((prev) => prev.map((item) => (item.id === id ? result.doc : item)));\n if (panelItem?.id === id) {\n setPanelItem(result.doc);\n }\n toast.success(\"Metadata updated\");\n } catch (error) {\n console.error(\"Failed to update metadata:\", error);\n toast.error(\"Failed to update metadata\");\n }\n };\n\n const onImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n const { width, height } = e.currentTarget;\n const initialCrop = centerCrop(\n makeAspectCrop({ unit: \"%\", width: 90 }, 1, width, height),\n width,\n height,\n );\n setCrop(initialCrop);\n };\n\n const onCropComplete = async () => {\n if (!crop || !imgRef.current || !panelItem) return;\n\n setUploading(true);\n try {\n const pixelCrop = convertToPixelCrop(\n crop,\n imgRef.current.width,\n imgRef.current.height,\n );\n\n const canvas = document.createElement(\"canvas\");\n const scaleX = imgRef.current.naturalWidth / imgRef.current.width;\n const scaleY = imgRef.current.naturalHeight / imgRef.current.height;\n\n canvas.width = pixelCrop.width;\n canvas.height = pixelCrop.height;\n const ctx = canvas.getContext(\"2d\");\n\n if (ctx) {\n ctx.drawImage(\n imgRef.current,\n pixelCrop.x * scaleX,\n pixelCrop.y * scaleY,\n pixelCrop.width * scaleX,\n pixelCrop.height * scaleY,\n 0,\n 0,\n pixelCrop.width,\n pixelCrop.height,\n );\n\n const blob = await new Promise<Blob | null>((resolve) =>\n canvas.toBlob(resolve, panelItem.mimeType),\n );\n\n if (blob) {\n const formData = new FormData();\n formData.append(\"file\", blob, `cropped-${panelItem.filename}`);\n if (currentFolder) formData.append(\"folder\", currentFolder);\n\n await apiUpload(\"/api/media\", formData);\n loadMedia();\n setShowCrop(false);\n toast.success(\"Cropped image saved\");\n }\n }\n } catch (err) {\n console.error(\"Crop failed:\", err);\n toast.error(\"Crop failed\");\n } finally {\n setUploading(false);\n }\n };\n\n const stats = useMemo(() => {\n return items.reduce(\n (acc, item) => {\n acc.totalSize += item.fileSize || 0;\n return acc;\n },\n { totalSize: 0 },\n );\n }, [items]);\n\n return (\n <div\n className={`flex flex-col h-full bg-[var(--kyro-bg)] transition-all duration-300 ${isDragging ? \"ring-4 ring-[var(--kyro-sidebar-active)] ring-inset\" : \"\"}`}\n {...(pickerMode ? {} : {\n onDragOver: (e) => { e.preventDefault(); setIsDragging(true); },\n onDragLeave: () => setIsDragging(false),\n onDrop: (e) => { e.preventDefault(); setIsDragging(false); if (e.dataTransfer.files) handleUpload(e.dataTransfer.files); },\n })}\n >\n {/* Top Bar */}\n <div className={`flex flex-col lg:flex-row lg:items-center justify-between gap-6 border-b border-[var(--kyro-border)] backdrop-blur-md sticky top-0 ${pickerMode ? \"p-2\" : \"p-6 rounded-xl surface-tile\"}`}>\n {!pickerMode && (\n <div className=\"flex items-center gap-4\">\n <div>\n <h2 className=\"text-xl font-bold tracking-tighter text-[var(--kyro-text-primary)]\">\n Media Library\n </h2>\n <div className=\"flex items-center gap-3 mt-1\">\n <span className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50\">\n {total} Items · {formatFileSize(stats.totalSize)}\n </span>\n </div>\n </div>\n </div>\n )}\n\n <div className={`flex items-center gap-3 flex-wrap lg:flex-nowrap ${pickerMode ? \"w-full\" : \"\"}`}>\n <div className=\"relative group flex-1 min-w-[200px]\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--kyro-text-muted)]\" />\n <input\n type=\"text\"\n placeholder=\"Search assets...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full pl-11 pr-4 py-2.5 bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] rounded-xl focus:outline-none focus:ring-2 focus:ring-[var(--kyro-sidebar-active)] transition-all text-xs font-bold\"\n />\n </div>\n\n {!pickerMode && (\n <>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex bg-[var(--kyro-surface-accent)] p-1 rounded-xl border border-[var(--kyro-border)]\">\n <button\n onClick={() => setView(\"grid\")}\n className={`p-2 rounded-lg transition-all ${view === \"grid\" ? \"bg-[var(--kyro-surface)] shadow-sm text-[var(--kyro-text-primary)]\" : \"text-[var(--kyro-text-secondary)] opacity-50 hover:opacity-100\"}`}\n >\n <Grid className=\"w-4 h-4\" />\n </button>\n <button\n onClick={() => setView(\"list\")}\n className={`p-2 rounded-lg transition-all ${view === \"list\" ? \"bg-[var(--kyro-surface)] shadow-sm text-[var(--kyro-text-primary)]\" : \"text-[var(--kyro-text-secondary)] opacity-50 hover:opacity-100\"}`}\n >\n <FileIcon className=\"w-4 h-4\" />\n </button>\n </div>\n\n <button\n onClick={() => setShowMobileFilters(true)}\n className=\"md:hidden p-2 rounded-xl bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] transition-colors\"\n >\n <Filter className=\"w-4 h-4\" />\n </button>\n </div>\n\n {canUpload && (\n <button\n onClick={() => fileInputRef.current?.click()}\n className=\"flex items-center gap-2 px-6 py-2.5 bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] rounded-xl font-bold text-xs shadow-lg active:scale-95 transition-all\"\n >\n <Maximize2 className=\"w-4 h-4\" />\n Upload\n </button>\n )}\n </>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-1 min-h-0 overflow-hidden\">\n {/* Folders Sidebar */}\n {!pickerMode && (\n <div className=\"w-64 border-r border-[var(--kyro-border)] surface-tile mt-6 overflow-y-auto hidden md:block\">\n <div className=\"p-6 space-y-6\">\n <div>\n <span className=\"text-[10px] font-bold tracking-[0.2em] text-[var(--kyro-text-secondary)] opacity-40 block mb-4\">\n Quick Filters\n </span>\n <div className=\"space-y-1\">\n {(\n [\n \"all\",\n \"image\",\n \"video\",\n \"audio\",\n \"document\",\n \"archive\",\n ] as const\n ).map((t) => (\n <button\n key={t}\n onClick={() => setFilter(t)}\n className={`w-full flex items-center gap-3 px-4 py-2 rounded-xl text-[11px] font-bold capitalize transition-all ${filter === t ? \"text-[var(--kyro-text-primary)] bg-[var(--kyro-surface-accent)]\" : \"text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)]/50\"}`}\n >\n <span\n className={`w-1.5 h-1.5 rounded-full ${filter === t ? \"bg-[var(--kyro-primary)]\" : \"bg-transparent border border-current opacity-30\"}`}\n />\n {t}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"pt-6 border-t border-[var(--kyro-border)]\">\n <div className=\"flex items-center justify-between mb-4\">\n <span className=\"text-[10px] font-bold tracking-[0.2em] text-[var(--kyro-text-secondary)] opacity-40\">\n Folders\n </span>\n <button\n onClick={() => setShowNewFolderModal(true)}\n className=\"p-1.5 hover:bg-[var(--kyro-surface-accent)] rounded-lg transition-colors text-[var(--kyro-text-primary)]\"\n >\n <FolderPlus className=\"w-4 h-4\" />\n </button>\n </div>\n\n <nav className=\"space-y-1\">\n <button\n onClick={() => setCurrentFolder(\"\")}\n className={`w-full flex items-center gap-3 px-4 py-2.5 rounded-xl text-xs font-bold transition-all ${currentFolder === \"\" ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] shadow-md\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] hover:text-[var(--kyro-text-primary)]\"}`}\n >\n <FolderInput className=\"w-4 h-4 opacity-70\" />\n All Assets\n </button>\n {folders.map((folder) => (\n <div key={folder} className=\"group relative\">\n <button\n onClick={() => setCurrentFolder(folder)}\n className={`w-full flex items-center gap-3 px-4 py-2.5 rounded-xl text-xs font-bold transition-all ${currentFolder === folder ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] shadow-md\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] hover:text-[var(--kyro-text-primary)]\"}`}\n >\n <div className=\"w-4 h-4 flex items-center justify-center opacity-70\">\n <Folder fill={currentFolder === folder ? \"currentColor\" : \"none\"} />\n </div>\n {folder}\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteFolder(folder);\n }}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1.5 text-red-500 opacity-0 group-hover:opacity-100 transition-all hover:bg-red-50 rounded-lg\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n ))}\n </nav>\n </div>\n </div>\n </div>\n )}\n\n {/* Main Content Area */}\n <div className=\"flex-1 flex flex-col min-h-0 bg-[var(--kyro-bg)]\">\n <div className={`flex-1 overflow-y-auto custom-scrollbar ${pickerMode ? \"px-2 py-4\" : \"py-4 px-2 md:py-8 md:px-4\"}`}>\n {loading ? (\n <div className=\"grid grid-cols-2 gap-4 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5\">\n <Shimmer variant=\"media-card\" count={12} />\n </div>\n ) : items.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-32 text-center\">\n <div className=\"w-24 h-24 rounded-[2rem] bg-[var(--kyro-surface-accent)] flex items-center justify-center mb-8 rotate-12 group-hover:rotate-0 transition-transform duration-500\">\n <Grid className=\"w-10 h-10 text-[var(--kyro-text-muted)] opacity-30\" />\n </div>\n <h3 className=\"text-xl font-bold text-[var(--kyro-text-primary)] tracking-tight\">\n No assets found\n </h3>\n <p className=\"text-[var(--kyro-text-secondary)] mt-2 max-w-xs mx-auto text-sm font-medium leading-relaxed\">\n Upload your first file or create a folder to organize your\n media assets.\n </p>\n {!pickerMode && canUpload && (\n <button\n onClick={() => fileInputRef.current?.click()}\n className=\"mt-8 px-8 py-3 bg-[var(--kyro-text-primary)] text-[var(--kyro-bg)] rounded-2xl font-bold text-xs hover:scale-105 transition-all shadow-xl\"\n >\n Start Uploading\n </button>\n )}\n </div>\n ) : view === \"grid\" ? (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 gap-1\">\n {items.map((item, index) => (\n <div\n key={item.id}\n className={`group relative aspect-square rounded-lg overflow-hidden bg-[var(--kyro-surface-accent)] border-2 transition-all duration-300 cursor-pointer ${selectedIds.has(item.id) ? \"border-[var(--kyro-primary)]\" : \"border-transparent hover:border-[var(--kyro-border-strong)] hover:shadow-2xl hover:-translate-y-1\"}`}\n onClick={() => setPanelItem(item)}\n onContextMenu={(e) => {\n e.preventDefault();\n handleSelectOne(item.id, e);\n }}\n >\n {item.type === \"image\" ? (\n <img\n src={item.url}\n alt={item.title}\n className=\"w-full h-full object-cover transition-transform duration-700 group-hover:scale-110\"\n loading=\"lazy\"\n />\n ) : (\n <div className=\"w-full h-full flex flex-col items-center justify-center p-6 gap-4\">\n <div className=\"p-4 rounded-2xl bg-[var(--kyro-surface)] shadow-inner text-[var(--kyro-text-secondary)] group-hover:scale-110 transition-transform duration-500\">\n {item.type === \"video\" ? (\n <Film className=\"w-8 h-8\" />\n ) : item.type === \"audio\" ? (\n <Music className=\"w-8 h-8\" />\n ) : item.type === \"document\" ? (\n <FileText className=\"w-8 h-8\" />\n ) : item.type === \"archive\" ? (\n <Archive className=\"w-8 h-8\" />\n ) : (\n <FileIcon className=\"w-8 h-8\" />\n )}\n </div>\n <span className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50 text-center px-4 line-clamp-2\">\n {item.title}\n </span>\n </div>\n )}\n\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-end p-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-white font-bold text-[10px] truncate max-w-[120px]\">\n {item.filename}\n </span>\n <div className=\"flex gap-1\">\n <button\n onClick={(e) => handleSelectOne(item.id, e)}\n className={`kyro-btn-primary p-1.5 rounded-lg transition-all ${selectedIds.has(item.id) ? \"\" : \"bg-white/10 text-white hover:bg-white/20\"}`}\n >\n <Check className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n </div>\n\n {selectedIds.has(item.id) && (\n <div className=\"absolute top-3 left-3 w-6 h-6 rounded-lg bg-[var(--kyro-primary)] text-white flex items-center justify-center shadow-lg border-2 border-white/20 animate-in zoom-in duration-300\">\n <Check className=\"w-4 h-4\" />\n </div>\n )}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"surface-tile overflow-hidden animate-in fade-in duration-500\">\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"text-[10px] font-bold tracking-[0.2em] text-[var(--kyro-text-secondary)] opacity-40 border-b border-[var(--kyro-border)]\">\n <th className=\"px-6 py-4 w-12\">\n <input\n type=\"checkbox\"\n className=\"w-4 h-4 rounded border-[var(--kyro-border)] text-[var(--kyro-primary)] focus:ring-[var(--kyro-primary)]\"\n checked={selectedIds.size === items.length}\n onChange={(e) => {\n if (e.target.checked)\n setSelectedIds(new Set(items.map((i) => i.id)));\n else setSelectedIds(new Set());\n }}\n />\n </th>\n <th className=\"px-6 py-4\">Asset</th>\n <th className=\"px-6 py-4\">Type</th>\n <th className=\"px-6 py-4\">Size</th>\n <th className=\"px-6 py-4\">Date</th>\n <th className=\"px-6 py-4 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-[var(--kyro-border)]\">\n {items.map((item) => (\n <tr\n key={item.id}\n className={`group hover:bg-[var(--kyro-surface-accent)] transition-colors cursor-pointer ${selectedIds.has(item.id) ? \"bg-[var(--kyro-surface-accent)]\" : \"\"}`}\n onClick={() => setPanelItem(item)}\n >\n <td\n className=\"px-6 py-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={selectedIds.has(item.id)}\n onChange={(e) => handleSelectOne(item.id, e)}\n className=\"w-4 h-4 rounded border-[var(--kyro-border)] text-[var(--kyro-primary)] focus:ring-[var(--kyro-primary)]\"\n />\n </td>\n <td className=\"px-6 py-4\">\n <div className=\"flex items-center gap-4\">\n <div className=\"w-12 h-12 rounded-xl bg-[var(--kyro-bg)] overflow-hidden border border-[var(--kyro-border)] flex-shrink-0 flex items-center justify-center\">\n {item.type === \"image\" ? (\n <img\n src={item.url}\n alt=\"\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <FileIcon className=\"w-5 h-5 text-[var(--kyro-text-secondary)] opacity-50\" />\n )}\n </div>\n <div className=\"flex flex-col min-w-0\">\n <span className=\"font-bold text-xs text-[var(--kyro-text-primary)] truncate max-w-[200px]\">\n {item.title || item.filename}\n </span>\n <span className=\"text-[10px] text-[var(--kyro-text-secondary)] opacity-50 truncate\">\n {item.filename}\n </span>\n </div>\n </div>\n </td>\n <td className=\"px-6 py-4\">\n <Badge variant=\"outline\" className=\"text-[9px]\">\n {item.mimeType}\n </Badge>\n </td>\n <td className=\"px-6 py-4 text-[11px] font-bold text-[var(--kyro-text-secondary)]\">\n {formatFileSize(item.fileSize)}\n </td>\n <td className=\"px-6 py-4 text-[11px] font-bold text-[var(--kyro-text-secondary)]\">\n {formatDate(item.createdAt)}\n </td>\n <td className=\"px-6 py-4 text-right\">\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleSelectOne(item.id, e);\n }}\n className={`kyro-btn-primary p-2 rounded-lg transition-all ${selectedIds.has(item.id) ? \"\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] opacity-0 group-hover:opacity-100\"}`}\n >\n <Grid className=\"w-4 h-4\" />\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n\n <Pagination\n page={page}\n totalPages={totalPages}\n onPageChange={setPage}\n />\n </div>\n </div>\n\n {/* Upload Banner */}\n {!pickerMode && uploading && (\n <div className=\"fixed bottom-12 left-1/2 -translate-x-1/2 z-[60] w-full max-w-lg\">\n <div className=\"bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-[2rem] shadow-2xl p-6 ring-1 ring-white/10 animate-in slide-in-from-bottom-12 duration-700\">\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-8 h-8 rounded-full bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] flex items-center justify-center animate-pulse\">\n <Spinner />\n </div>\n <span className=\"text-sm font-bold tracking-tight text-[var(--kyro-text-primary)]\">\n Uploading Files\n </span>\n </div>\n <span className=\"text-[10px] font-bold tracking-[0.2em] text-[var(--kyro-text-secondary)] opacity-50\">\n {Object.keys(uploadProgress).length} Total\n </span>\n </div>\n <div className=\"space-y-4 max-h-[160px] overflow-y-auto pr-2 custom-scrollbar\">\n {Object.entries(uploadProgress).map(([name, progress]) => (\n <div key={name} className=\"space-y-2\">\n <div className=\"flex justify-between text-[10px] font-bold\">\n <span className=\"text-[var(--kyro-text-primary)] truncate max-w-[200px]\">\n {name}\n </span>\n <span className=\"text-[var(--kyro-primary)]\">\n {progress}%\n </span>\n </div>\n <div className=\"h-1.5 w-full bg-[var(--kyro-surface-accent)] rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-[var(--kyro-primary)] transition-all duration-300 rounded-full\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* Selection Footer */}\n {selectedIds.size > 0 && (\n <div className=\"fixed bottom-12 left-1/2 -translate-x-1/2 z-[60] bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-full shadow-2xl px-2 py-2 flex items-center gap-12 animate-in slide-in-from-bottom-12 duration-700 ring-1 ring-white/10 backdrop-blur-xl\">\n <div className=\"flex items-center gap-5 border-r border-[var(--kyro-border)] \">\n <div className=\"w-12 h-12 rounded-full bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] flex items-center justify-center text-lg font-bold shadow-inner\">\n {selectedIds.size}\n </div>\n <div>\n <p className=\"text-[11px] font-bold tracking-[0.2em] text-[var(--kyro-text-primary)]\">\n Selected\n </p>\n <button\n onClick={() => setSelectedIds(new Set())}\n className=\"text-[10px] font-bold text-[var(--kyro-primary)] hover:underline opacity-80\"\n >\n Clear all\n </button>\n </div>\n </div>\n <div className=\"flex items-center gap-4\">\n {onSelect && (\n <button\n onClick={() => {\n const selectedItems = items.filter((i) => selectedIds.has(i.id));\n onSelect(selectedItems);\n }}\n className=\"px-8 py-3 bg-[var(--kyro-text-primary)] text-[var(--kyro-bg)] rounded-full font-bold text-xs hover:scale-105 transition-all shadow-xl\"\n >\n Confirm Selection\n </button>\n )}\n {!pickerMode && canDelete && (\n <button\n onClick={handleBulkDelete}\n className=\"p-3 bg-red-500/10 text-red-500 hover:bg-red-500 hover:text-white rounded-full transition-all active:scale-90\"\n >\n <Trash2 className=\"w-5 h-5\" />\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Mobile Filters Bottom Sheet */}\n {showMobileFilters && !pickerMode && (\n <div className=\"fixed inset-0 z-[70] md:hidden\">\n <div\n className=\"fixed inset-0 bg-black/50 backdrop-blur-sm\"\n onClick={() => setShowMobileFilters(false)}\n />\n <div className=\"fixed bottom-0 left-0 right-0 bg-[var(--kyro-surface)] rounded-t-3xl shadow-2xl max-h-[70vh] overflow-y-auto animate-in slide-in-from-bottom-12 duration-300\">\n <div className=\"sticky top-0 bg-[var(--kyro-surface)] z-10 flex items-center justify-between p-6 pb-4 border-b border-[var(--kyro-border)]\">\n <h3 className=\"text-sm font-bold tracking-tight text-[var(--kyro-text-primary)]\">\n Filters\n </h3>\n <button\n onClick={() => setShowMobileFilters(false)}\n className=\"p-2 rounded-xl hover:bg-[var(--kyro-surface-accent)] transition-colors text-[var(--kyro-text-muted)]\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"p-6 space-y-8\">\n {/* Quick Filters */}\n <div>\n <span className=\"text-[10px] font-bold tracking-[0.2em] text-[var(--kyro-text-secondary)] opacity-40 block mb-4\">\n Quick Filters\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {([\"all\", \"image\", \"video\", \"audio\", \"document\", \"archive\"] as const).map((t) => (\n <button\n key={t}\n onClick={() => { setFilter(t); setShowMobileFilters(false); }}\n className={`px-4 py-2 rounded-xl text-[11px] font-bold capitalize transition-all border ${filter === t ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] border-transparent\" : \"bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] border-[var(--kyro-border)] hover:border-[var(--kyro-text-muted)]\"}`}\n >\n {t}\n </button>\n ))}\n </div>\n </div>\n\n {/* Folders */}\n <div>\n <div className=\"flex items-center justify-between mb-4\">\n <span className=\"text-[10px] font-bold tracking-[0.2em] text-[var(--kyro-text-secondary)] opacity-40\">\n Folders\n </span>\n <button\n onClick={() => { setShowNewFolderModal(true); setShowMobileFilters(false); }}\n className=\"p-1.5 hover:bg-[var(--kyro-surface-accent)] rounded-lg transition-colors text-[var(--kyro-text-primary)]\"\n >\n <FolderPlus className=\"w-4 h-4\" />\n </button>\n </div>\n <nav className=\"space-y-1\">\n <button\n onClick={() => { setCurrentFolder(\"\"); setShowMobileFilters(false); }}\n className={`w-full flex items-center gap-3 px-4 py-2.5 rounded-xl text-xs font-bold transition-all ${currentFolder === \"\" ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] shadow-md\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] hover:text-[var(--kyro-text-primary)]\"}`}\n >\n <FolderInput className=\"w-4 h-4 opacity-70\" />\n All Assets\n </button>\n {folders.map((folder) => (\n <div key={folder} className=\"group relative\">\n <button\n onClick={() => { setCurrentFolder(folder); setShowMobileFilters(false); }}\n className={`w-full flex items-center gap-3 px-4 py-2.5 rounded-xl text-xs font-bold transition-all ${currentFolder === folder ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] shadow-md\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] hover:text-[var(--kyro-text-primary)]\"}`}\n >\n <div className=\"w-4 h-4 flex items-center justify-center opacity-70\">\n <Folder fill={currentFolder === folder ? \"currentColor\" : \"none\"} />\n </div>\n {folder}\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDeleteFolder(folder);\n setShowMobileFilters(false);\n }}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1.5 text-red-500 opacity-0 group-hover:opacity-100 transition-all hover:bg-red-50 rounded-lg\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n ))}\n </nav>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Asset Panel */}\n <SlidePanel\n open={!!panelItem}\n onClose={() => setPanelItem(null)}\n title=\"Asset Details\"\n subtitle={panelItem?.filename}\n >\n {panelItem && (\n <div className=\"flex flex-col h-full\">\n <div className=\"aspect-video w-full rounded-2xl bg-[var(--kyro-bg)] border border-[var(--kyro-border)] overflow-hidden relative group\">\n {panelItem.type === \"image\" ? (\n <img\n src={getAbsoluteUrl(panelItem.url)}\n alt=\"\"\n className=\"w-full h-full object-contain p-4\"\n />\n ) : panelItem.type === \"video\" ? (\n <video\n src={getAbsoluteUrl(panelItem.url)}\n controls\n className=\"w-full h-full\"\n />\n ) : (\n <div className=\"w-full h-full flex flex-col items-center justify-center p-12 gap-6\">\n <div className=\"w-20 h-20 rounded-[2rem] bg-[var(--kyro-surface-accent)] flex items-center justify-center\">\n <FileIcon className=\"w-10 h-10 text-[var(--kyro-text-secondary)]\" />\n </div>\n <Badge variant=\"outline\" className=\"text-xs font-bold\">\n {panelItem.mimeType}\n </Badge>\n </div>\n )}\n\n <div className=\"absolute top-4 right-4 flex gap-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n onClick={() => setShowPreview(true)}\n className=\"p-2.5 bg-black/50 backdrop-blur-md text-white rounded-xl hover:bg-black/70 transition-all\"\n >\n <Maximize2 className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n <div className=\"mt-8 space-y-8 flex-1\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"p-4 rounded-2xl bg-[var(--kyro-surface-accent)]/50 border border-[var(--kyro-border)]\">\n <span className=\"text-[9px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50 block mb-1\">\n Dimensions\n </span>\n <span className=\"text-xs font-bold text-[var(--kyro-text-primary)]\">\n {panelItem.type === \"image\" ? \"Original Resolution\" : \"N/A\"}\n </span>\n </div>\n <div className=\"p-4 rounded-2xl bg-[var(--kyro-surface-accent)]/50 border border-[var(--kyro-border)]\">\n <span className=\"text-[9px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50 block mb-1\">\n File Size\n </span>\n <span className=\"text-xs font-bold text-[var(--kyro-text-primary)]\">\n {formatFileSize(panelItem.fileSize)}\n </span>\n </div>\n </div>\n\n <div className=\"space-y-4\">\n <div>\n <label className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50 block mb-2 px-1\">\n Public Link\n </label>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n readOnly\n value={getAbsoluteUrl(panelItem.url)}\n className=\"flex-1 px-4 py-3 bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] rounded-xl text-[10px] font-bold font-mono focus:outline-none\"\n />\n <button\n onClick={() => {\n navigator.clipboard.writeText(\n getAbsoluteUrl(panelItem.url),\n );\n toast.success(\"URL copied to clipboard\");\n }}\n className=\"p-3 bg-[var(--kyro-surface-accent)] hover:bg-[var(--kyro-border)] border border-[var(--kyro-border)] rounded-xl transition-all\"\n >\n <Link className=\"w-4 h-4 text-[var(--kyro-text-primary)]\" />\n </button>\n </div>\n </div>\n\n <div className=\"space-y-4\">\n <div>\n <label className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50 block mb-2 px-1\">\n Alt Text\n </label>\n <textarea\n value={panelItem.alt || \"\"}\n onChange={(e) =>\n updateMetadata(panelItem.id, { alt: e.target.value })\n }\n className=\"w-full px-4 py-3 bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] rounded-lg text-xs font-bold transition-all resize-none min-h-[80px] focus:outline-none focus:ring-2 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n placeholder=\"Describe this asset...\"\n />\n </div>\n <div>\n <label className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-50 block mb-2 px-1\">\n Caption\n </label>\n <textarea\n value={panelItem.caption || \"\"}\n onChange={(e) =>\n updateMetadata(panelItem.id, {\n caption: e.target.value,\n })\n }\n className=\"w-full px-4 py-3 bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] rounded-lg text-xs font-bold transition-all resize-none min-h-[80px] focus:outline-none focus:ring-2 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n placeholder=\"Add a caption...\"\n />\n </div>\n </div>\n </div>\n </div>\n\n {!pickerMode && (\n <div className=\"pt-8 border-t border-[var(--kyro-border)] mt-8 flex gap-3 pb-8\">\n <button\n onClick={() => {\n const link = document.createElement(\"a\");\n link.href = getAbsoluteUrl(panelItem.url);\n link.download = panelItem.filename;\n link.click();\n }}\n className=\"flex-1 flex items-center justify-center gap-2 px-6 py-3 bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] rounded-xl font-bold text-xs shadow-lg hover:opacity-90 transition-all\"\n >\n <Download className=\"w-4 h-4\" />\n Download\n </button>\n {panelItem.type === \"image\" && canUpdate && (\n <button\n onClick={() => setShowCrop(true)}\n className=\"p-3 border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)] transition-all\"\n >\n <CropIcon className=\"w-4 h-4\" />\n </button>\n )}\n {canDelete && (\n <button\n onClick={() => {\n confirm({\n title: \"Delete Asset\",\n message: `Are you sure you want to delete ${panelItem.filename}? This cannot be undone.`,\n variant: \"danger\",\n onConfirm: async () => {\n try {\n await apiDelete(`/api/media/${panelItem.id}`);\n setPanelItem(null);\n loadMedia();\n } catch (error) {\n console.error(\"Delete failed:\", error);\n toast.error(\"Failed to delete asset\");\n }\n }\n });\n }}\n className=\"p-3 border border-red-100 text-red-500 rounded-xl hover:bg-red-50 transition-all\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </SlidePanel>\n\n {/* Preview Modal */}\n {showPreview && panelItem && (\n <Modal\n open={showPreview}\n onClose={() => setShowPreview(false)}\n title=\"\"\n size=\"full\"\n variant=\"lightbox\"\n >\n <div className=\"flex items-center justify-between p-6\">\n <div className=\"flex flex-col\">\n <span className=\"text-white font-bold text-lg tracking-tight\">\n {panelItem.filename}\n </span>\n <span className=\"text-white/40 text-[10px] font-bold tracking-widest mt-1\">\n {formatFileSize(panelItem.fileSize)} · {panelItem.mimeType}\n </span>\n </div>\n <button\n onClick={() => setShowPreview(false)}\n className=\"p-3 bg-white/10 hover:bg-white/20 text-white rounded-2xl transition-all active:scale-90\"\n >\n <X className=\"w-6 h-6\" />\n </button>\n </div>\n <div className=\"flex-1 w-full flex items-center justify-center p-12\">\n {panelItem.type === \"image\" ? (\n <img\n src={getAbsoluteUrl(panelItem.url)}\n alt=\"\"\n className=\"max-h-full max-w-full object-contain shadow-2xl rounded-lg animate-in zoom-in-95 duration-500\"\n />\n ) : panelItem.type === \"video\" ? (\n <video\n src={getAbsoluteUrl(panelItem.url)}\n controls\n autoPlay\n className=\"max-h-full max-w-full rounded-lg shadow-2xl\"\n />\n ) : (\n <div className=\"text-white text-center\">\n <FileIcon className=\"w-24 h-24 mx-auto mb-6 opacity-20\" />\n <p className=\"text-xl font-bold opacity-50\">\n Preview not available for this file type\n </p>\n </div>\n )}\n </div>\n </Modal>\n )}\n\n {/* Crop Modal */}\n {!pickerMode && showCrop && panelItem && (\n <Modal\n open={showCrop}\n onClose={() => setShowCrop(false)}\n title=\"\"\n size=\"full\"\n variant=\"lightbox\"\n >\n <div className=\"flex flex-col h-full p-8\">\n <div className=\"flex items-center justify-between mb-8\">\n <h3 className=\"text-white font-bold text-2xl tracking-tighter\">\n Crop Image\n </h3>\n <div className=\"flex gap-3\">\n <button\n type=\"button\"\n onClick={() => setShowCrop(false)}\n className=\"px-4 py-2 border border-white/20 text-white/80 hover:bg-white/10 rounded-lg font-bold text-sm transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={uploading}\n onClick={onCropComplete}\n className=\"px-4 py-2 bg-[var(--kyro-sidebar-active)] hover:opacity-90 text-[var(--kyro-sidebar-text-active)] rounded-lg font-bold text-sm transition-colors\"\n >\n {uploading ? \"Saving...\" : \"Save Crop\"}\n </button>\n </div>\n </div>\n <div className=\"flex-1 w-full flex items-center justify-center overflow-auto\">\n <ReactCrop crop={crop} onChange={(c) => setCrop(c)}>\n <img\n ref={imgRef}\n src={panelItem.url}\n alt=\"Crop preview\"\n className=\"max-h-[70vh] object-contain\"\n onLoad={onImageLoad}\n />\n </ReactCrop>\n </div>\n </div>\n </Modal>\n )}\n {!pickerMode && (\n <PromptModal\n open={showNewFolderModal}\n onClose={() => setShowNewFolderModal(false)}\n onSubmit={createFolder}\n title=\"Create New Folder\"\n placeholder=\"Folder name\"\n />\n )}\n {!pickerMode && (\n <Modal\n open={showStorageConfigModal}\n onClose={() => setShowStorageConfigModal(false)}\n title=\"Storage Not Configured\"\n size=\"md\"\n >\n <div className=\"text-center\">\n <div className=\"w-16 h-16 mx-auto mb-4 rounded-full bg-[var(--kyro-sidebar-active)] flex items-center justify-center\">\n <Server className=\"w-8 h-8 text-[var(--kyro-sidebar-text-active)]\" />\n </div>\n <p className=\"text-[var(--kyro-text-secondary)] mb-6 text-sm\">\n Before uploading media, you need to configure your storage\n settings. Choose where files should be stored and how URLs are\n generated.\n </p>\n <div className=\"flex gap-3\">\n <a\n href=\"/settings/storage-settings\"\n className=\"flex-1 px-4 py-3 bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] rounded-xl font-bold text-center hover:opacity-90 transition-colors\"\n >\n Configure Storage\n </a>\n <button\n type=\"button\"\n onClick={() => {\n // Set default storage config programmatically\n apiPost(\"/api/globals/storage-settings\", {\n provider: \"local\",\n local: {\n uploadDir: \"./public/uploads\",\n baseUrl: \"/uploads\",\n },\n }).then(() => {\n setShowStorageConfigModal(false);\n setStorageConfigured(true);\n window.location.reload();\n }).catch(() => {\n toast.error(\"Failed to configure storage\");\n });\n }}\n className=\"flex-1 px-4 py-3 border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] rounded-xl font-bold hover:bg-[var(--kyro-surface-accent)] transition-colors\"\n >\n Use Defaults\n </button>\n </div>\n </div>\n </Modal>\n )}\n {!pickerMode && (\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={(e) => {\n if (e.target.files) handleUpload(e.target.files);\n }}\n multiple\n className=\"hidden\"\n accept=\"image/*,video/*,audio/*,.pdf,.doc,.docx,.txt,.zip,.rar,.tar\"\n />\n )}\n </div>\n );\n}\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport { TextStyle } from \"@tiptap/extension-text-style\";\nimport Color from \"@tiptap/extension-color\";\nimport type { Field } from \"@kyro-cms/core/client\";\nimport FieldLayout from \"./FieldLayout\";\nimport { SlidePanel } from \"../ui/SlidePanel\";\nimport { MediaGallery } from \"../MediaGallery\";\nimport {\n Bold,\n Italic,\n Strikethrough,\n Code,\n Heading1,\n Heading2,\n Heading3,\n List,\n ListOrdered,\n Quote,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Link as LinkIcon,\n Image as ImageIcon,\n Undo,\n Redo,\n Terminal,\n Minus,\n Underline as UnderlineIcon,\n Highlighter,\n Palette,\n CheckSquare,\n Eye,\n Edit2,\n Maximize2,\n Minimize2,\n ChevronDown,\n} from \"lucide-react\";\n\ninterface RichTextFieldProps {\n field: Field;\n value: Record<string, any> | null;\n onChange: (value: Record<string, any>) => void;\n error?: string;\n disabled?: boolean;\n}\n\nconst PRESET_COLORS = [\n { name: \"Default\", value: \"inherit\" },\n { name: \"Red\", value: \"#ef4444\" },\n { name: \"Orange\", value: \"#f97316\" },\n { name: \"Amber\", value: \"#f59e0b\" },\n { name: \"Emerald\", value: \"#10b981\" },\n { name: \"Blue\", value: \"#3b82f6\" },\n { name: \"Indigo\", value: \"#6366f1\" },\n { name: \"Violet\", value: \"#8b5cf6\" },\n { name: \"Rose\", value: \"#f43f5e\" },\n { name: \"Slate\", value: \"#64748b\" },\n];\n\nconst MenuBar = ({\n editor,\n isExpanded,\n setIsExpanded,\n onOpenMediaPicker,\n}: {\n editor: any;\n isExpanded: boolean;\n setIsExpanded: (expanded: boolean) => void;\n onOpenMediaPicker: () => void;\n}) => {\n const [activeDropdown, setActiveDropdown] = useState<string | null>(null);\n const menuBarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuBarRef.current && !menuBarRef.current.contains(event.target as Node)) {\n setActiveDropdown(null);\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n if (!editor) {\n return null;\n }\n\n const addImage = () => {\n onOpenMediaPicker();\n };\n\n const setLink = () => {\n const previousUrl = editor.getAttributes(\"link\").href;\n const url = window.prompt(\"URL\", previousUrl);\n\n if (url === null) {\n return;\n }\n\n if (url === \"\") {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n };\n\n const selectColor = (colorVal: string) => {\n if (colorVal === \"inherit\") {\n editor.chain().focus().unsetColor().run();\n } else {\n editor.chain().focus().setColor(colorVal).run();\n }\n setActiveDropdown(null);\n };\n\n const toggleDropdown = (name: string) => {\n setActiveDropdown(activeDropdown === name ? null : name);\n };\n\n const getHeadingLabel = () => {\n if (editor.isActive(\"heading\", { level: 1 })) return \"Heading 1\";\n if (editor.isActive(\"heading\", { level: 2 })) return \"Heading 2\";\n if (editor.isActive(\"heading\", { level: 3 })) return \"Heading 3\";\n if (editor.isActive(\"heading\", { level: 4 })) return \"Heading 4\";\n return \"Normal Text\";\n };\n\n const getAlignIcon = () => {\n if (editor.isActive({ textAlign: \"center\" })) return <AlignCenter size={12} />;\n if (editor.isActive({ textAlign: \"right\" })) return <AlignRight size={12} />;\n return <AlignLeft size={12} />;\n };\n\n const getListIcon = () => {\n if (editor.isActive(\"orderedList\")) return <ListOrdered size={12} />;\n if (editor.isActive(\"taskList\")) return <CheckSquare size={12} />;\n return <List size={12} />;\n };\n\n const getBlockIcon = () => {\n if (editor.isActive(\"codeBlock\")) return <Terminal size={12} />;\n return <Quote size={12} />;\n };\n\n const ToolbarButton = ({\n onClick,\n isActive = false,\n disabled = false,\n children,\n title,\n }: any) => (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n className={`p-1 rounded flex items-center justify-center transition-all duration-150 relative\n ${isActive ? \"bg-[var(--kyro-primary)] text-white shadow-xs scale-95\" : \"text-[var(--kyro-text)] hover:bg-[var(--kyro-bg-hover)]\"}\n ${disabled ? \"opacity-35 cursor-not-allowed\" : \"cursor-pointer active:scale-90\"}`}\n >\n {children}\n </button>\n );\n\n const DropdownTrigger = ({ onClick, isActive, children, title }: any) => (\n <button\n type=\"button\"\n onClick={onClick}\n title={title}\n className={`px-2 py-1 rounded flex items-center gap-1 transition-all duration-150 text-xs border border-transparent hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] active:scale-98\n ${isActive ? \"bg-[var(--kyro-bg-hover)] border-[var(--kyro-border)]\" : \"\"}`}\n >\n {children}\n <ChevronDown size={10} className=\"opacity-60\" />\n </button>\n );\n\n return (\n <div\n ref={menuBarRef}\n className=\"flex flex-wrap items-center gap-1.5 p-1.5 border-b border-[var(--kyro-border)] bg-[var(--kyro-bg-secondary)] rounded-t-lg select-none\"\n >\n {/* Group 1: History Actions */}\n <div className=\"flex items-center gap-0.5 p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs\">\n <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().chain().focus().undo().run()}\n title=\"Undo (Ctrl+Z)\"\n >\n <Undo size={12} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().chain().focus().redo().run()}\n title=\"Redo (Ctrl+Y)\"\n >\n <Redo size={12} />\n </ToolbarButton>\n </div>\n\n {/* Group 2: Inline Styles */}\n <div className=\"flex items-center gap-0.5 p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs\">\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n disabled={!editor.can().chain().focus().toggleBold().run()}\n isActive={editor.isActive(\"bold\")}\n title=\"Bold (Ctrl+B)\"\n >\n <Bold size={12} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n disabled={!editor.can().chain().focus().toggleItalic().run()}\n isActive={editor.isActive(\"italic\")}\n title=\"Italic (Ctrl+I)\"\n >\n <Italic size={12} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n disabled={!editor.can().chain().focus().toggleUnderline().run()}\n isActive={editor.isActive(\"underline\")}\n title=\"Underline (Ctrl+U)\"\n >\n <UnderlineIcon size={12} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n disabled={!editor.can().chain().focus().toggleStrike().run()}\n isActive={editor.isActive(\"strike\")}\n title=\"Strikethrough\"\n >\n <Strikethrough size={12} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleCode().run()}\n disabled={!editor.can().chain().focus().toggleCode().run()}\n isActive={editor.isActive(\"code\")}\n title=\"Inline Code\"\n >\n <Code size={12} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleHighlight().run()}\n isActive={editor.isActive(\"highlight\")}\n title=\"Highlight Text\"\n >\n <Highlighter size={12} />\n </ToolbarButton>\n\n {/* Text Color Picker Dropdown */}\n <div className=\"relative flex items-center justify-center\">\n <ToolbarButton\n onClick={() => toggleDropdown(\"color\")}\n title=\"Text Color\"\n isActive={activeDropdown === \"color\" || editor.isActive(\"textStyle\")}\n >\n <Palette size={12} />\n </ToolbarButton>\n {activeDropdown === \"color\" && (\n <div className=\"absolute top-full left-0 mt-1.5 p-2 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 flex flex-wrap gap-1 w-44 animate-in fade-in slide-in-from-top-1 duration-150\">\n {PRESET_COLORS.map((col) => (\n <button\n key={col.name}\n type=\"button\"\n onClick={() => selectColor(col.value)}\n title={col.name}\n className=\"w-6 h-6 rounded-full border border-[var(--kyro-border)] transition-transform hover:scale-115 active:scale-95 cursor-pointer relative\"\n style={{\n backgroundColor: col.value === \"inherit\" ? \"transparent\" : col.value,\n }}\n >\n {col.value === \"inherit\" && (\n <span className=\"absolute inset-0 flex items-center justify-center text-[10px] text-[var(--kyro-text)] font-semibold\">\n ∅\n </span>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Group 3: Headings hierarchy Dropdown */}\n <div className=\"relative flex items-center p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs\">\n <DropdownTrigger\n onClick={() => toggleDropdown(\"heading\")}\n isActive={activeDropdown === \"heading\"}\n title=\"Heading hierarchy\"\n >\n <span className=\"font-medium text-[11px] leading-none min-w-[70px] text-left\">\n {getHeadingLabel()}\n </span>\n </DropdownTrigger>\n {activeDropdown === \"heading\" && (\n <div className=\"absolute top-full left-0 mt-1.5 p-1 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 min-w-36 flex flex-col gap-0.5 animate-in fade-in slide-in-from-top-1 duration-150\">\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().setParagraph().run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] transition-colors\n ${!editor.isActive(\"heading\") ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n Normal Text\n </button>\n {[1, 2, 3, 4].map((level) => (\n <button\n key={level}\n type=\"button\"\n onClick={() => {\n editor.chain().focus().toggleHeading({ level }).run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] transition-colors\n ${editor.isActive(\"heading\", { level }) ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n Heading {level}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Group 4: List Types Dropdown */}\n <div className=\"relative flex items-center p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs\">\n <DropdownTrigger\n onClick={() => toggleDropdown(\"lists\")}\n isActive={activeDropdown === \"lists\"}\n title=\"List Types\"\n >\n {getListIcon()}\n </DropdownTrigger>\n {activeDropdown === \"lists\" && (\n <div className=\"absolute top-full left-0 mt-1.5 p-1 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 min-w-36 flex flex-col gap-0.5 animate-in fade-in slide-in-from-top-1 duration-150\">\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().toggleBulletList().run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive(\"bulletList\") ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <List size={12} />\n Bullet List\n </button>\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().toggleOrderedList().run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive(\"orderedList\") ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <ListOrdered size={12} />\n Ordered List\n </button>\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().toggleTaskList().run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive(\"taskList\") ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <CheckSquare size={12} />\n Task Checklist\n </button>\n </div>\n )}\n </div>\n\n {/* Group 5: Blocks Dropdown */}\n <div className=\"relative flex items-center p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs\">\n <DropdownTrigger\n onClick={() => toggleDropdown(\"blocks\")}\n isActive={activeDropdown === \"blocks\"}\n title=\"Structural Blocks\"\n >\n {getBlockIcon()}\n </DropdownTrigger>\n {activeDropdown === \"blocks\" && (\n <div className=\"absolute top-full left-0 mt-1.5 p-1 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 min-w-36 flex flex-col gap-0.5 animate-in fade-in slide-in-from-top-1 duration-150\">\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().toggleBlockquote().run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive(\"blockquote\") ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <Quote size={12} />\n Blockquote\n </button>\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().toggleCodeBlock().run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive(\"codeBlock\") ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <Terminal size={12} />\n Code Block\n </button>\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().setHorizontalRule().run();\n setActiveDropdown(null);\n }}\n className=\"px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\"\n >\n <Minus size={12} />\n Horizontal Rule\n </button>\n </div>\n )}\n </div>\n\n {/* Group 6: Text Alignments Dropdown */}\n <div className=\"relative flex items-center p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs\">\n <DropdownTrigger\n onClick={() => toggleDropdown(\"align\")}\n isActive={activeDropdown === \"align\"}\n title=\"Alignment\"\n >\n {getAlignIcon()}\n </DropdownTrigger>\n {activeDropdown === \"align\" && (\n <div className=\"absolute top-full left-0 mt-1.5 p-1 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 min-w-32 flex flex-col gap-0.5 animate-in fade-in slide-in-from-top-1 duration-150\">\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().setTextAlign(\"left\").run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive({ textAlign: \"left\" }) ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <AlignLeft size={12} />\n Align Left\n </button>\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().setTextAlign(\"center\").run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive({ textAlign: \"center\" }) ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <AlignCenter size={12} />\n Align Center\n </button>\n <button\n type=\"button\"\n onClick={() => {\n editor.chain().focus().setTextAlign(\"right\").run();\n setActiveDropdown(null);\n }}\n className={`px-2.5 py-1.5 text-xs text-left rounded-md hover:bg-[var(--kyro-bg-hover)] cursor-pointer text-[var(--kyro-text)] flex items-center gap-2 transition-colors\n ${editor.isActive({ textAlign: \"right\" }) ? \"font-semibold text-[var(--kyro-primary)] bg-[var(--kyro-bg-hover)]\" : \"\"}`}\n >\n <AlignRight size={12} />\n Align Right\n </button>\n </div>\n )}\n </div>\n\n {/* Group 7: Rich Media Embeds */}\n <div className=\"flex items-center gap-0.5 p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs\">\n <ToolbarButton\n onClick={setLink}\n isActive={editor.isActive(\"link\")}\n title=\"Link\"\n >\n <LinkIcon size={12} />\n </ToolbarButton>\n <ToolbarButton onClick={addImage} title=\"Add Image\">\n <ImageIcon size={12} />\n </ToolbarButton>\n </div>\n\n {/* Group 8: Workspace Controls */}\n <div className=\"flex items-center gap-0.5 p-0.5 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-xs ml-auto\">\n <ToolbarButton\n onClick={() => setIsExpanded(!isExpanded)}\n title={isExpanded ? \"Collapse Workspace\" : \"Enlarge Workspace\"}\n >\n {isExpanded ? <Minimize2 size={12} /> : <Maximize2 size={12} />}\n </ToolbarButton>\n </div>\n </div>\n );\n};\n\nexport default function RichTextField({\n field,\n value,\n onChange,\n error,\n disabled,\n}: RichTextFieldProps) {\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n if (!isMounted) {\n return (\n <FieldLayout field={field} error={error}>\n <div\n className={`border rounded-lg bg-[var(--kyro-bg)] overflow-hidden border-[var(--kyro-border)] flex flex-col shadow-sm transition-all duration-200\n ${error ? \"border-[var(--kyro-error)] shadow-[0_0_0_1px_var(--kyro-error)]\" : \"border-[var(--kyro-border)]\"}\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\n >\n <div className=\"flex flex-wrap items-center gap-1.5 p-1.5 border-b border-[var(--kyro-border)] bg-[var(--kyro-bg-secondary)] rounded-t-lg h-[40px]\"></div>\n <div className=\"overflow-y-auto min-h-[160px] max-h-[400px] p-4\"></div>\n </div>\n </FieldLayout>\n );\n }\n\n return (\n <RichTextEditor\n field={field}\n value={value}\n onChange={onChange}\n error={error}\n disabled={disabled}\n />\n );\n}\n\nfunction RichTextEditor({\n field,\n value,\n onChange,\n error,\n disabled,\n}: RichTextFieldProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const [panelWidth, setPanelWidth] = useState(0);\n const [isMediaPickerOpen, setIsMediaPickerOpen] = useState(false);\n\n useEffect(() => {\n if (!isExpanded) {\n setPanelWidth(0);\n return;\n }\n\n const panel = document.querySelector('[data-kyro-slide-panel=\"true\"]');\n\n const updateWidth = () => {\n if (panel) {\n setPanelWidth(panel.getBoundingClientRect().width);\n } else {\n setPanelWidth(0);\n }\n };\n\n updateWidth();\n\n const observer = new MutationObserver(() => {\n updateWidth();\n });\n if (panel) {\n observer.observe(panel);\n }\n\n window.addEventListener(\"resize\", updateWidth);\n const interval = setInterval(updateWidth, 100);\n\n return () => {\n if (observer) {\n observer.disconnect();\n }\n window.removeEventListener(\"resize\", updateWidth);\n clearInterval(interval);\n };\n }, [isExpanded]);\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n codeBlock: true,\n link: false,\n underline: false,\n }),\n Link.configure({\n openOnClick: false,\n }),\n Image,\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Underline,\n Highlight.configure({\n multicolor: true,\n }),\n TaskList,\n TaskItem.configure({\n nested: true,\n }),\n TextStyle,\n Color,\n ],\n content: Array.isArray(value) ? { type: \"doc\", content: value } : (value || { type: \"doc\", content: [] }),\n editable: !disabled,\n onUpdate: ({ editor }: { editor: any }) => {\n onChange(editor.getJSON());\n },\n editorProps: {\n attributes: {\n class:\n \"prose prose-sm dark:prose-invert focus:outline-none min-h-[160px] p-4 max-w-none kyro-richtext text-[0.875rem] leading-relaxed\",\n },\n },\n });\n\n useEffect(() => {\n if (editor && value && JSON.stringify(value) !== JSON.stringify(editor.getJSON())) {\n editor.commands.setContent(Array.isArray(value) ? { type: \"doc\", content: value } : value);\n }\n }, [value, editor]);\n\n return (\n <FieldLayout field={field} error={error}>\n {isExpanded ? (\n // Maximize mode placeholder inside form\n <div className=\"border rounded-lg bg-[var(--kyro-bg-secondary)] border-[var(--kyro-border)] p-4 text-center text-xs text-[var(--kyro-text-muted)] flex items-center justify-center gap-3 h-20 transition-all duration-200 shadow-inner\">\n <span className=\"font-medium\">\n Rich text editor workspace is currently maximized.\n </span>\n <button\n type=\"button\"\n onClick={() => setIsExpanded(false)}\n className=\"px-2.5 py-1 bg-[var(--kyro-primary)] text-white text-xs rounded-md shadow-sm font-medium hover:scale-102 active:scale-98 transition-transform cursor-pointer\"\n >\n Minimize Workspace\n </button>\n </div>\n ) : (\n // Standard inline editor\n <div\n className={`border rounded-lg bg-[var(--kyro-bg)] overflow-hidden border-[var(--kyro-border)] flex flex-col shadow-sm transition-all duration-200\n ${error ? \"border-[var(--kyro-error)] shadow-[0_0_0_1px_var(--kyro-error)]\" : \"border-[var(--kyro-border)] focus-within:border-[var(--kyro-primary)] focus-within:ring-1 focus-within:ring-[var(--kyro-primary)]\"}\n ${disabled ? \"opacity-60 cursor-not-allowed\" : \"\"}`}\n >\n <MenuBar\n editor={editor}\n isExpanded={isExpanded}\n setIsExpanded={setIsExpanded}\n onOpenMediaPicker={() => setIsMediaPickerOpen(true)}\n />\n <div className=\"overflow-y-auto min-h-[160px] max-h-[400px]\">\n <EditorContent editor={editor} />\n </div>\n </div>\n )}\n\n {/* Portal absolute fullscreen overlay directly inside document.body */}\n {isExpanded &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n style={{\n position: \"fixed\",\n top: \"16px\",\n bottom: \"16px\",\n left: \"16px\",\n right: panelWidth > 0 ? `${panelWidth + 16}px` : \"16px\",\n zIndex: 9999,\n }}\n className=\"flex flex-col bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-md shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-200 transition-all duration-300\"\n >\n <MenuBar\n editor={editor}\n isExpanded={isExpanded}\n setIsExpanded={setIsExpanded}\n onOpenMediaPicker={() => setIsMediaPickerOpen(true)}\n />\n <div className=\"overflow-y-auto flex-1 h-[calc(100vh-140px)] bg-[var(--kyro-bg)]\">\n <EditorContent editor={editor} />\n </div>\n </div>,\n document.body\n )}\n\n {/* Injected tasklist, and highlight custom styles for preview & editor */}\n <style>{`\n .kyro-richtext ul[data-type=\"taskList\"] {\n list-style: none !important;\n padding: 0 !important;\n margin: 0.5rem 0 !important;\n }\n .kyro-richtext li[data-type=\"taskItem\"] {\n display: flex !important;\n align-items: flex-start !important;\n gap: 0.5rem !important;\n margin-bottom: 0.25rem !important;\n }\n .kyro-richtext li[data-type=\"taskItem\"] > label {\n margin-top: 0.25rem !important;\n user-select: none !important;\n cursor: pointer !important;\n }\n .kyro-richtext li[data-type=\"taskItem\"] > div {\n flex: 1 !important;\n }\n .kyro-richtext mark {\n background-color: #fef08a !important;\n border-radius: 0.25rem !important;\n padding: 0.125rem 0.25rem !important;\n color: #1e293b !important;\n }\n .kyro-richtext pre {\n background-color: var(--kyro-bg-secondary, #1e1e3f) !important;\n color: var(--kyro-text, #f8f8f2) !important;\n padding: 1rem !important;\n border-radius: 0.375rem !important;\n border: 1px solid var(--kyro-border) !important;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n overflow-x: auto !important;\n margin: 1rem 0 !important;\n }\n .kyro-richtext pre code {\n background: none !important;\n padding: 0 !important;\n border-radius: 0 !important;\n font-size: 0.85rem !important;\n }\n .kyro-richtext h1 { font-size: 2em !important; font-weight: 700 !important; margin: 0 0 0.75rem !important; line-height: 1.2 !important; }\n .kyro-richtext h2 { font-size: 1.5em !important; font-weight: 600 !important; margin: 0 0 0.75rem !important; line-height: 1.2 !important; }\n .kyro-richtext h3 { font-size: 1.17em !important; font-weight: 600 !important; margin: 0 0 0.75rem !important; line-height: 1.2 !important; }\n .kyro-richtext h4 { font-size: 1em !important; font-weight: 600 !important; margin: 0 0 0.75rem !important; line-height: 1.2 !important; }\n .kyro-richtext ul, .kyro-richtext ol {\n padding-left: 1.5rem !important;\n }\n .kyro-richtext blockquote {\n border-left: 4px solid rgba(148, 163, 184, 0.5) !important;\n margin-left: 0 !important;\n padding-left: 1rem !important;\n font-style: italic !important;\n }\n\n `}</style>\n\n {/* Media Picker Modal */}\n {isMediaPickerOpen && (\n <SlidePanel\n open={isMediaPickerOpen}\n onClose={() => setIsMediaPickerOpen(false)}\n title=\"Select Image\"\n width=\"xl\"\n >\n <MediaGallery\n pickerMode\n multiple={false}\n onSelect={(selectedItems) => {\n if (selectedItems && selectedItems.length > 0) {\n const selectedImage = selectedItems[0];\n editor\n .chain()\n .focus()\n .setImage({\n src: selectedImage.url,\n alt: selectedImage.alt || selectedImage.title || \"\",\n title: selectedImage.title || \"\",\n })\n .run();\n }\n setIsMediaPickerOpen(false);\n }}\n />\n </SlidePanel>\n )}\n </FieldLayout>\n );\n}\n","export interface ThemeColors {\n primary?: string;\n secondary?: string;\n accent?: string;\n background?: string;\n surface?: string;\n text?: string;\n textMuted?: string;\n border?: string;\n success?: string;\n error?: string;\n warning?: string;\n info?: string;\n}\n\nexport interface ThemeTypography {\n fontFamily?: string;\n fontFamilyMono?: string;\n fontSize?: {\n xs?: string;\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n \"2xl\"?: string;\n \"3xl\"?: string;\n \"4xl\"?: string;\n };\n fontWeight?: {\n normal?: number;\n medium?: number;\n semibold?: number;\n bold?: number;\n };\n}\n\nexport interface ThemeSpacing {\n xs?: string;\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n \"2xl\"?: string;\n}\n\nexport interface ThemeRadius {\n sm?: string;\n md?: string;\n lg?: string;\n full?: string;\n}\n\nexport interface ThemeShadows {\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n}\n\nexport interface BlockThemeOverrides {\n card?: {\n background?: string;\n borderRadius?: string;\n padding?: string;\n shadow?: string;\n };\n hero?: {\n background?: string;\n textAlign?: \"left\" | \"center\" | \"right\";\n };\n gallery?: {\n gridColumns?: number;\n gap?: string;\n };\n code?: {\n fontFamily?: string;\n fontSize?: string;\n background?: string;\n };\n}\n\nexport interface FieldThemeOverrides {\n input?: {\n background?: string;\n border?: string;\n borderRadius?: string;\n padding?: string;\n focusRing?: string;\n };\n select?: {\n background?: string;\n border?: string;\n };\n textarea?: {\n background?: string;\n minHeight?: string;\n };\n richText?: {\n toolbarBackground?: string;\n buttonActive?: string;\n };\n upload?: {\n dropzoneBackground?: string;\n dropzoneActive?: string;\n };\n}\n\nexport interface KyroTheme {\n id?: string;\n label?: string;\n colors?: ThemeColors;\n typography?: ThemeTypography;\n spacing?: ThemeSpacing;\n borderRadius?: ThemeRadius;\n shadows?: ThemeShadows;\n blocks?: BlockThemeOverrides;\n fields?: FieldThemeOverrides;\n}\n\nexport const LIGHT_THEME: KyroTheme = {\n id: \"light\",\n label: \"Light\",\n colors: {\n primary: \"#3b82f6\",\n secondary: \"#8b5cf6\",\n background: \"#f8fafc\",\n surface: \"#ffffff\",\n text: \"#0f172a\",\n textMuted: \"#64748b\",\n border: \"#e2e8f0\",\n success: \"#22c55e\",\n error: \"#ef4444\",\n warning: \"#f59e0b\",\n info: \"#06b6d4\",\n },\n typography: {\n fontFamily: \"'Inter', system-ui, -apple-system, sans-serif\",\n fontFamilyMono: \"'Fira Code', 'Cascadia Code', monospace\",\n },\n spacing: {\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"1rem\",\n lg: \"1.5rem\",\n xl: \"2rem\",\n \"2xl\": \"3rem\",\n },\n borderRadius: {\n sm: \"0.25rem\",\n md: \"0.5rem\",\n lg: \"0.75rem\",\n full: \"9999px\",\n },\n shadows: {\n sm: \"0 1px 2px rgba(0,0,0,0.05)\",\n md: \"0 4px 6px -1px rgba(0,0,0,0.1)\",\n lg: \"0 10px 15px -3px rgba(0,0,0,0.1)\",\n xl: \"0 20px 25px -5px rgba(0,0,0,0.1)\",\n },\n};\n\nexport const DARK_THEME: KyroTheme = {\n id: \"dark\",\n label: \"Dark\",\n colors: {\n primary: \"#60a5fa\",\n secondary: \"#a78bfa\",\n background: \"#0b1222\",\n surface: \"#1e293b\",\n text: \"#f1f5f9\",\n textMuted: \"#94a3b8\",\n border: \"#334155\",\n success: \"#4ade80\",\n error: \"#f87171\",\n warning: \"#fbbf24\",\n info: \"#22d3ee\",\n },\n typography: {\n fontFamily: \"'Inter', system-ui, -apple-system, sans-serif\",\n fontFamilyMono: \"'Fira Code', 'Cascadia Code', monospace\",\n },\n spacing: {\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"1rem\",\n lg: \"1.5rem\",\n xl: \"2rem\",\n \"2xl\": \"3rem\",\n },\n borderRadius: {\n sm: \"0.25rem\",\n md: \"0.5rem\",\n lg: \"0.75rem\",\n full: \"9999px\",\n },\n shadows: {\n sm: \"0 1px 2px rgba(0,0,0,0.3)\",\n md: \"0 4px 6px -1px rgba(0,0,0,0.4)\",\n lg: \"0 10px 15px -3px rgba(0,0,0,0.4)\",\n xl: \"0 20px 25px -5px rgba(0,0,0,0.5)\",\n },\n};\n\nexport function mergeThemes(\n base: KyroTheme,\n overrides: Partial<KyroTheme>,\n): KyroTheme {\n return {\n ...base,\n ...overrides,\n colors: { ...base.colors, ...overrides.colors },\n typography: { ...base.typography, ...overrides.typography },\n spacing: { ...base.spacing, ...overrides.spacing },\n borderRadius: { ...base.borderRadius, ...overrides.borderRadius },\n shadows: { ...base.shadows, ...overrides.shadows },\n blocks: base.blocks\n ? { ...base.blocks, ...overrides.blocks }\n : overrides.blocks,\n fields: base.fields\n ? { ...base.fields, ...overrides.fields }\n : overrides.fields,\n };\n}\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n type ReactNode,\n} from \"react\";\nimport type { KyroTheme } from \"./tokens.js\";\nimport { LIGHT_THEME, DARK_THEME, mergeThemes } from \"./tokens.js\";\n\nexport type ThemeMode = \"light\" | \"dark\" | \"system\";\n\ninterface ThemeContextValue {\n mode: ThemeMode;\n theme: KyroTheme;\n lightTheme: KyroTheme;\n darkTheme: KyroTheme;\n setMode: (mode: ThemeMode) => void;\n updateTheme: (overrides: Partial<KyroTheme>) => void;\n getCssVar: (key: string) => string;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n return {\n mode: \"light\" as ThemeMode,\n theme: LIGHT_THEME,\n lightTheme: LIGHT_THEME,\n darkTheme: DARK_THEME,\n setMode: () => {},\n updateTheme: () => {},\n getCssVar: (key: string) => `var(--kyro-${key})`,\n };\n }\n return context;\n}\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultMode?: ThemeMode;\n light?: Partial<KyroTheme>;\n dark?: Partial<KyroTheme>;\n}\n\nfunction applyThemeToDOM(config: KyroTheme) {\n const root = document.documentElement;\n if (!root) return;\n\n // Apply colors\n if (config.colors) {\n Object.entries(config.colors).forEach(([key, value]) => {\n if (value) {\n root.style.setProperty(`--kyro-${key}`, value);\n root.style.setProperty(\n `--kyro-${key}-light`,\n adjustBrightness(value, 0.9),\n );\n root.style.setProperty(\n `--kyro-${key}-dark`,\n adjustBrightness(value, 0.8),\n );\n }\n });\n }\n\n // Apply typography\n if (config.typography) {\n if (config.typography.fontFamily) {\n root.style.setProperty(\n \"--kyro-font-family\",\n config.typography.fontFamily,\n );\n }\n if (config.typography.fontFamilyMono) {\n root.style.setProperty(\n \"--kyro-font-mono\",\n config.typography.fontFamilyMono,\n );\n }\n }\n\n // Apply spacing\n if (config.spacing) {\n Object.entries(config.spacing).forEach(([key, value]) => {\n if (value) root.style.setProperty(`--kyro-spacing-${key}`, value);\n });\n }\n\n // Apply border radius\n if (config.borderRadius) {\n Object.entries(config.borderRadius).forEach(([key, value]) => {\n if (value) root.style.setProperty(`--kyro-radius-${key}`, value);\n });\n }\n\n // Apply shadows\n if (config.shadows) {\n Object.entries(config.shadows).forEach(([key, value]) => {\n if (value) root.style.setProperty(`--kyro-shadow-${key}`, value);\n });\n }\n\n // Apply block theme overrides\n if (config.blocks) {\n if (config.blocks.card) {\n Object.entries(config.blocks.card).forEach(([key, value]) => {\n if (value) root.style.setProperty(`--kyro-block-card-${key}`, value);\n });\n }\n if (config.blocks.hero?.background) {\n root.style.setProperty(\n \"--kyro-block-hero-bg\",\n config.blocks.hero.background,\n );\n }\n if (config.blocks.code) {\n Object.entries(config.blocks.code).forEach(([key, value]) => {\n if (value) root.style.setProperty(`--kyro-block-code-${key}`, value);\n });\n }\n }\n\n // Apply field theme overrides\n if (config.fields) {\n if (config.fields.input) {\n Object.entries(config.fields.input).forEach(([key, value]) => {\n if (value) root.style.setProperty(`--kyro-field-input-${key}`, value);\n });\n }\n if (config.fields.upload) {\n if (config.fields.upload.dropzoneBackground) {\n root.style.setProperty(\n \"--kyro-field-upload-dropzone-bg\",\n config.fields.upload.dropzoneBackground,\n );\n }\n }\n }\n}\n\nfunction adjustBrightness(hex: string, factor: number): string {\n if (!hex.startsWith(\"#\")) return hex;\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n const adjust = (c: number) =>\n Math.round(c * factor)\n .toString(16)\n .padStart(2, \"0\");\n return `#${adjust(r)}${adjust(g)}${adjust(b)}`;\n}\n\nexport function ThemeProvider({\n children,\n defaultMode = \"light\",\n light: lightOverrides,\n dark: darkOverrides,\n}: ThemeProviderProps) {\n const [mode, setMode] = useState<ThemeMode>(defaultMode);\n const [baseLight, setBaseLight] = useState<Partial<KyroTheme>>(\n lightOverrides || {},\n );\n const [baseDark, setBaseDark] = useState<Partial<KyroTheme>>(\n darkOverrides || {},\n );\n\n const lightTheme = mergeThemes(LIGHT_THEME, baseLight);\n const darkTheme = mergeThemes(DARK_THEME, baseDark);\n\n const getResolvedTheme = useCallback((): KyroTheme => {\n if (mode === \"system\") {\n if (typeof window !== \"undefined\") {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? darkTheme\n : lightTheme;\n }\n return lightTheme;\n }\n return mode === \"dark\" ? darkTheme : lightTheme;\n }, [mode, lightTheme, darkTheme]);\n\n const [theme, setTheme] = useState<KyroTheme>(getResolvedTheme());\n\n // Apply theme on mode/customization change\n useEffect(() => {\n const resolved = getResolvedTheme();\n setTheme(resolved);\n applyThemeToDOM(resolved);\n }, [getResolvedTheme]);\n\n // Handle system theme changes\n useEffect(() => {\n if (mode !== \"system\") return;\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = () => {\n const resolved = getResolvedTheme();\n setTheme(resolved);\n applyThemeToDOM(resolved);\n };\n mediaQuery.addEventListener(\"change\", handler);\n return () => mediaQuery.removeEventListener(\"change\", handler);\n }, [mode, getResolvedTheme]);\n\n const updateTheme = useCallback((overrides: Partial<KyroTheme>) => {\n setBaseLight((prev) => ({ ...prev, ...overrides }));\n setBaseDark((prev) => ({ ...prev, ...overrides }));\n }, []);\n\n const getCssVar = useCallback((key: string) => `var(--kyro-${key})`, []);\n\n return (\n <ThemeContext.Provider\n value={{\n mode,\n theme,\n lightTheme,\n darkTheme,\n setMode,\n updateTheme,\n getCssVar,\n }}\n >\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport const LightThemeProvider = (\n props: Omit<ThemeProviderProps, \"defaultMode\">,\n) => <ThemeProvider defaultMode=\"light\" {...props} />;\n\nexport const DarkThemeProvider = (\n props: Omit<ThemeProviderProps, \"defaultMode\">,\n) => <ThemeProvider defaultMode=\"dark\" {...props} />;\n","import React, { useCallback, useEffect, useState, Suspense, lazy } from \"react\";\nimport { githubLight } from \"@uiw/codemirror-theme-github\";\nimport { aura } from \"@uiw/codemirror-theme-aura\";\nimport type { CodeField as CodeFieldType } from \"@kyro-cms/core/client\";\nimport { useTheme } from \"../ThemeProvider\";\n\ninterface CodeFieldProps {\n field: CodeFieldType;\n value?: string;\n onChange?: (value: string) => void;\n error?: string;\n disabled?: boolean;\n}\n\nconst CodeMirrorEditor = lazy(() =>\n import(\"@uiw/react-codemirror\").then((mod) => ({ default: mod.default })),\n);\n\nconst LANGUAGES = [\n { value: \"javascript\", label: \"JavaScript\" },\n { value: \"typescript\", label: \"TypeScript\" },\n { value: \"json\", label: \"JSON\" },\n { value: \"html\", label: \"HTML\" },\n { value: \"css\", label: \"CSS\" },\n { value: \"sql\", label: \"SQL\" },\n { value: \"python\", label: \"Python\" },\n { value: \"rust\", label: \"Rust\" },\n { value: \"java\", label: \"Java\" },\n { value: \"php\", label: \"PHP\" },\n { value: \"markdown\", label: \"Markdown\" },\n];\n\nconst languageExtensions: Record<string, () => Promise<unknown>> = {\n javascript: () =>\n import(\"@codemirror/lang-javascript\").then((m) =>\n m.javascript({ jsx: true, typescript: true }),\n ),\n typescript: () =>\n import(\"@codemirror/lang-javascript\").then((m) =>\n m.javascript({ jsx: true, typescript: true }),\n ),\n js: () =>\n import(\"@codemirror/lang-javascript\").then((m) =>\n m.javascript({ jsx: true }),\n ),\n jsx: () =>\n import(\"@codemirror/lang-javascript\").then((m) =>\n m.javascript({ jsx: true }),\n ),\n ts: () =>\n import(\"@codemirror/lang-javascript\").then((m) =>\n m.javascript({ typescript: true }),\n ),\n json: () => import(\"@codemirror/lang-json\").then((m) => m.json()),\n css: () => import(\"@codemirror/lang-css\").then((m) => m.css()),\n sql: () => import(\"@codemirror/lang-sql\").then((m) => m.sql()),\n python: () => import(\"@codemirror/lang-python\").then((m) => m.python()),\n html: () => import(\"@codemirror/lang-html\").then((m) => m.html()),\n rust: () => import(\"@codemirror/lang-rust\").then((m) => m.rust()),\n java: () => import(\"@codemirror/lang-java\").then((m) => m.java()),\n cpp: () => import(\"@codemirror/lang-cpp\").then((m) => m.cpp()),\n c: () => import(\"@codemirror/lang-cpp\").then((m) => m.cpp()),\n php: () => import(\"@codemirror/lang-php\").then((m) => m.php()),\n markdown: () => import(\"@codemirror/lang-markdown\").then((m) => m.markdown()),\n py: () => import(\"@codemirror/lang-python\").then((m) => m.python()),\n};\n\nexport const CodeField: React.FC<CodeFieldProps> = ({\n field,\n value = \"\",\n onChange,\n error,\n disabled,\n}) => {\n const [isMounted, setIsMounted] = useState(false);\n const [isDark, setIsDark] = useState(false);\n const [extensions, setExtensions] = useState<unknown[]>([]);\n const [loading, setLoading] = useState(false);\n const [copied, setCopied] = useState(false);\n const [isFullScreen, setIsFullScreen] = useState(false);\n\n const { theme } = useTheme();\n const accent = theme.colors?.accent || theme.colors?.primary || \"#6366f1\";\n const language = field.language?.toLowerCase() || \"javascript\";\n\n useEffect(() => {\n setIsMounted(true);\n setIsDark(document.documentElement.classList.contains(\"dark\"));\n const observer = new MutationObserver(() => {\n setIsDark(document.documentElement.classList.contains(\"dark\"));\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n return () => observer.disconnect();\n }, []);\n\n useEffect(() => {\n if (!isMounted) return;\n const loadExtensions = async () => {\n setLoading(true);\n try {\n const loader =\n languageExtensions[language] || languageExtensions.javascript;\n const ext = await loader();\n setExtensions([ext]);\n } catch (err) {\n console.error(\"Failed to load language extension:\", err);\n setExtensions([]);\n } finally {\n setLoading(false);\n }\n };\n loadExtensions();\n }, [language, isMounted]);\n\n const handleChange = useCallback(\n (val: string) => onChange?.(val),\n [onChange],\n );\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [value]);\n\n const toggleFullScreen = useCallback(() => {\n setIsFullScreen((prev) => !prev);\n document.body.style.overflow = !isFullScreen ? \"hidden\" : \"\";\n }, [isFullScreen]);\n\n const codeMirrorTheme = isDark ? aura : githubLight;\n const langLabel =\n LANGUAGES.find((l) => l.value === language)?.label || language;\n\n const hexToRgba = (hex: string, alpha: number = 1) => {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n };\n\n if (!isMounted) {\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"h-5 w-24 rounded bg-[var(--kyro-surface-accent)] animate-pulse\" />\n <div className=\"h-5 w-16 rounded bg-[var(--kyro-surface-accent)] animate-pulse\" />\n </div>\n <div className=\"h-[280px] rounded-xl bg-[var(--kyro-surface-accent)] animate-pulse\" />\n </div>\n );\n }\n\n return (\n <div\n className=\"group\"\n style={\n {\n \"--accent\": accent,\n \"--accent-light\": hexToRgba(accent, 0.1),\n \"--accent-light-2\": hexToRgba(accent, 0.05),\n } as React.CSSProperties\n }\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-[var(--kyro-text-primary)]\">\n {field.label || field.name}\n </span>\n <span\n className=\"text-[10px] px-1.5 py-0.5 rounded font-semibold transition-colors\"\n style={{\n backgroundColor: loading ? \"var(--kyro-surface-accent)\" : accent,\n color: loading ? \"var(--kyro-text-muted)\" : \"white\",\n }}\n >\n {loading ? \"...\" : langLabel}\n </span>\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"text-[10px] px-2 py-0.5 rounded font-medium transition-all\"\n style={{\n backgroundColor: copied\n ? \"var(--kyro-success)\"\n : \"var(--kyro-surface-accent)\",\n color: copied ? \"white\" : \"var(--kyro-text-secondary)\",\n }}\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n <button\n type=\"button\"\n onClick={toggleFullScreen}\n className=\"text-[10px] px-2 py-0.5 rounded font-medium bg-[var(--kyro-surface-accent)] hover:bg-[var(--kyro-border)] transition-all\"\n style={{ color: \"var(--kyro-text-secondary)\" }}\n >\n {isFullScreen ? \"Exit\" : \"Expand\"}\n </button>\n </div>\n </div>\n\n {/* Editor container */}\n <div\n className={`relative rounded-md overflow-hidden transition-all duration-200 ${\n isFullScreen ? \"fixed inset-4 z-50\" : \"\"\n }`}\n style={{\n backgroundColor: \"var(--kyro-surface)\",\n borderColor: error ? \"var(--kyro-error)\" : \"var(--kyro-border)\",\n borderWidth: \"1px\",\n }}\n >\n {/* Top accent bar */}\n <div\n className=\"absolute top-0 left-0 right-0 h-0.5 transition-all duration-200\"\n style={{ backgroundColor: accent }}\n />\n\n <Suspense\n fallback={\n <div\n className=\"h-[280px] flex items-center justify-center\"\n style={{ backgroundColor: \"var(--kyro-surface)\" }}\n >\n <div\n className=\"w-6 h-6 rounded-full animate-spin\"\n style={{\n borderColor: \"var(--kyro-border)\",\n borderTopColor: accent,\n borderWidth: \"2px\",\n }}\n />\n </div>\n }\n >\n <CodeMirrorEditor\n value={value == null ? \"\" : value}\n height={isFullScreen ? \"calc(100vh - 100px)\" : \"280px\"}\n width=\"100%\"\n extensions={extensions}\n theme={codeMirrorTheme}\n onChange={handleChange}\n editable={!disabled}\n basicSetup={{\n lineNumbers: true,\n highlightActiveLine: true,\n bracketMatching: true,\n closeBrackets: true,\n autocompletion: true,\n foldGutter: true,\n }}\n style={{\n fontSize: \"13px\",\n fontFamily: \"'JetBrains Mono', 'Fira Code', monospace\",\n }}\n />\n </Suspense>\n\n {/* Error message */}\n {error && (\n <div\n className=\"absolute bottom-0 left-0 right-0 px-3 py-2 text-xs font-medium\"\n style={{\n backgroundColor: \"var(--kyro-danger-bg)\",\n color: \"var(--kyro-error)\",\n }}\n >\n {error}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div\n className=\"flex items-center justify-between mt-2 text-[10px]\"\n style={{ color: \"var(--kyro-text-muted)\" }}\n >\n <span>{value.split(\"\\n\").length} lines</span>\n <span style={{ color: accent }}>CodeMirror</span>\n </div>\n </div>\n );\n};\n\nexport default CodeField;\n","import React, { useState, useCallback, useMemo, useEffect } from \"react\";\nimport type { MarkdownField as MarkdownFieldType } from \"@kyro-cms/core/client\";\n\ninterface MarkdownFieldProps {\n field: MarkdownFieldType;\n value?: string;\n onChange?: (value: string) => void;\n error?: string;\n disabled?: boolean;\n}\n\n// Simple markdown parser for basic formatting\nfunction parseMarkdown(text: string): string {\n if (!text) return \"\";\n\n let html = text\n // Escape HTML\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n\n // Code blocks\n .replace(\n /```(\\w+)?\\n([\\s\\S]*?)```/g,\n '<pre class=\"bg-gray-100 dark:bg-gray-800 p-3 rounded overflow-x-auto my-2\"><code>$2</code></pre>',\n )\n\n // Inline code\n .replace(\n /`([^`]+)`/g,\n '<code class=\"bg-gray-100 dark:bg-gray-800 px-1 rounded text-sm font-mono\">$1</code>',\n )\n\n // Headers\n .replace(\n /^### (.+)$/gm,\n '<h3 class=\"text-lg font-semibold mt-4 mb-2\">$1</h3>',\n )\n .replace(\n /^## (.+)$/gm,\n '<h2 class=\"text-xl font-semibold mt-4 mb-2\">$1</h2>',\n )\n .replace(/^# (.+)$/gm, '<h1 class=\"text-2xl font-bold mt-4 mb-2\">$1</h1>')\n\n // Bold and Italic\n .replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, \"<strong><em>$1</em></strong>\")\n .replace(/\\*\\*(.+?)\\*\\*/g, \"<strong>$1</strong>\")\n .replace(/\\*(.+?)\\*/g, \"<em>$1</em>\")\n .replace(/___(.+?)___/g, \"<strong><em>$1</em></strong>\")\n .replace(/__(.+?)__/g, \"<strong>$1</strong>\")\n .replace(/_(.+?)_/g, \"<em>$1</em>\")\n\n // Strikethrough\n .replace(/~~(.+?)~~/g, \"<del>$1</del>\")\n\n // Blockquotes\n .replace(\n /^> (.+)$/gm,\n '<blockquote class=\"border-l-4 border-gray-300 dark:border-gray-600 pl-4 italic my-2 text-gray-600 dark:text-gray-400\">$1</blockquote>',\n )\n\n // Links\n .replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n '<a href=\"$2\" class=\"text-blue-600 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\n )\n\n // Images\n .replace(\n /!\\[([^\\]]*)\\]\\(([^)]+)\\)/g,\n '<img src=\"$2\" alt=\"$1\" class=\"max-w-full h-auto rounded my-2\" />',\n )\n\n // Horizontal rules\n .replace(\n /^---$/gm,\n '<hr class=\"border-gray-300 dark:border-gray-600 my-4\" />',\n )\n .replace(\n /^\\*\\*\\*$/gm,\n '<hr class=\"border-gray-300 dark:border-gray-600 my-4\" />',\n )\n\n // Unordered lists\n .replace(/^[\\*\\-] (.+)$/gm, '<li class=\"ml-4\">$1</li>')\n\n // Ordered lists\n .replace(/^\\d+\\. (.+)$/gm, '<li class=\"ml-4 list-decimal\">$1</li>')\n\n // Paragraphs (lines that don't start with special chars)\n .replace(/^(?!<[a-z]|$)(.+)$/gm, '<p class=\"my-2\">$1</p>')\n\n // Clean up empty paragraphs\n .replace(/<p class=\"my-2\"><\\/p>/g, \"\")\n\n // Wrap consecutive list items in ul/ol\n .replace(\n /(<li class=\"ml-4\">.*<\\/li>\\n?)+/g,\n '<ul class=\"list-disc pl-6 my-2\">$&</ul>',\n );\n\n return html;\n}\n\nexport const MarkdownField: React.FC<MarkdownFieldProps> = ({\n field,\n value = \"\",\n onChange,\n error,\n disabled,\n}) => {\n const [showPreview, setShowPreview] = useState(false);\n const [isMounted, setIsMounted] = useState(false);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e.target.value);\n },\n [onChange],\n );\n\n const wordCount = useMemo(() => {\n if (!value) return 0;\n return value.trim().split(/\\s+/).filter(Boolean).length;\n }, [value]);\n\n const characterCount = value?.length || 0;\n\n if (!isMounted) {\n return (\n <div className=\"kyro-form-field\">\n <label className=\"kyro-form-label\">\n {field.label || field.name}\n {field.required && (\n <span className=\"kyro-form-label-required\">*</span>\n )}\n </label>\n <div className=\"h-[200px] bg-[var(--kyro-surface)] animate-pulse rounded-md border border-[var(--kyro-border)]\" />\n </div>\n );\n }\n\n return (\n <div\n className=\"kyro-form-field\"\n style={{ position: \"relative\", zIndex: 10, pointerEvents: \"auto\" }}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <label className=\"kyro-form-label\">\n {field.label || field.name}\n {field.required && (\n <span className=\"kyro-form-label-required\">*</span>\n )}\n </label>\n <div className=\"flex items-center gap-3\">\n {/* Stats */}\n <span className=\"text-xs text-[var(--kyro-text-muted)]\">\n {wordCount} words • {characterCount} chars\n </span>\n\n {/* Preview toggle */}\n <div className=\"flex rounded-md overflow-hidden border border-[var(--kyro-border)]\">\n <button\n type=\"button\"\n onClick={() => setShowPreview(false)}\n className={`px-3 py-1 text-xs font-medium transition-colors ${\n !showPreview\n ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)]\"\n : \"bg-[var(--kyro-surface)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)]\"\n }`}\n >\n Write\n </button>\n <button\n type=\"button\"\n onClick={() => setShowPreview(true)}\n className={`px-3 py-1 text-xs font-medium transition-colors ${\n showPreview\n ? \"bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)]\"\n : \"bg-[var(--kyro-surface)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)]\"\n }`}\n >\n Preview\n </button>\n </div>\n </div>\n </div>\n\n <div\n style={{ pointerEvents: \"auto\", position: \"relative\", zIndex: 50 }}\n className={`border border-[var(--kyro-border)] rounded-md overflow-hidden ${\n disabled ? \"opacity-50 cursor-not-allowed\" : \"\"\n } ${error ? \"border-[var(--kyro-error)]\" : \"\"}`}\n >\n {!showPreview ? (\n <textarea\n value={value == null ? \"\" : value}\n onChange={handleChange}\n disabled={disabled}\n rows={12}\n style={{ pointerEvents: \"auto\", cursor: \"text\", zIndex: 100 }}\n className={`w-full p-4 font-mono text-sm resize-y focus:outline-none bg-[var(--kyro-surface)] text-[var(--kyro-text-primary)]`}\n placeholder=\"Enter markdown content...\n\n# Heading 1\n## Heading 2\n\n**Bold text** and *italic text*\n\n- List item 1\n- List item 2\n\n[Link text](https://example.com)\n\n`inline code`\n\n```\ncode block\n```\"\n />\n ) : (\n <div\n className={`p-6 min-h-[300px] overflow-auto bg-[var(--kyro-surface)] text-[var(--kyro-text-primary)]`}\n >\n {value ? (\n <div\n className=\"prose prose-sm dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: parseMarkdown(value) }}\n />\n ) : (\n <p className=\"text-[var(--kyro-text-muted)] italic\">\n Nothing to preview\n </p>\n )}\n </div>\n )}\n </div>\n\n {/* Toolbar with markdown hints */}\n {!showPreview && (\n <div className=\"flex items-center gap-4 mt-2 text-xs text-[var(--kyro-text-muted)]\">\n <span>**bold**</span>\n <span>*italic*</span>\n <span>`code`</span>\n <span>[link](url)</span>\n <span># heading</span>\n </div>\n )}\n\n {field.admin?.description && !error && (\n <p className=\"kyro-form-help\">{field.admin.description}</p>\n )}\n {error && <p className=\"kyro-form-error\">{error}</p>}\n </div>\n );\n};\n","import { useState } from \"react\";\nimport type { SecretField as SecretFieldType } from \"@kyro-cms/core/client\";\nimport { IconCopy, IconCheck, IconRefreshCw } from \"../ui/icons\";\nimport FieldLayout from \"./FieldLayout\";\n\ninterface SecretFieldComponentProps {\n field: SecretFieldType;\n value?: string | null;\n onChange?: (value: string) => void;\n error?: string;\n disabled?: boolean;\n}\n\nexport default function SecretField({\n field,\n value,\n onChange,\n error,\n disabled,\n}: SecretFieldComponentProps) {\n const [copied, setCopied] = useState(false);\n const [regenerating, setRegenerating] = useState(false);\n\n const fullValue = value ?? \"\";\n const displayValue = fullValue.length > 8\n ? fullValue.slice(0, -8) + \"*\".repeat(8)\n : fullValue;\n\n const handleCopy = async () => {\n if (!fullValue) return;\n try {\n await navigator.clipboard.writeText(fullValue);\n setCopied(true);\n setTimeout(() => setCopied(false), 1800);\n } catch {\n const ta = document.createElement(\"textarea\");\n ta.value = fullValue;\n ta.style.position = \"fixed\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n document.body.removeChild(ta);\n setCopied(true);\n setTimeout(() => setCopied(false), 1800);\n }\n };\n\n const handleRegenerate = () => {\n if (regenerating || disabled) return;\n setRegenerating(true);\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n const hex = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n onChange?.(hex);\n setTimeout(() => setRegenerating(false), 400);\n };\n\n return (\n <FieldLayout field={field} error={error}>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"relative flex-1\">\n <input\n id={field.name}\n type=\"text\"\n value={displayValue}\n readOnly\n disabled={disabled}\n className=\"kyro-form-input font-mono text-xs tracking-wider pr-10 opacity-70 bg-[var(--kyro-bg-secondary)] cursor-not-allowed select-none\"\n spellCheck={false}\n />\n </div>\n <button\n type=\"button\"\n onClick={handleCopy}\n disabled={!fullValue || disabled}\n className=\"p-2 rounded-lg border border-[var(--kyro-border)] bg-[var(--kyro-surface)] text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] hover:border-[var(--kyro-primary)] hover:bg-[var(--kyro-primary-alpha)] transition-all disabled:opacity-40 disabled:cursor-not-allowed active:scale-95\"\n title={copied ? \"Copied!\" : \"Copy full secret\"}\n >\n {copied ? (\n <IconCheck className=\"w-3.5 h-3.5 text-[var(--kyro-success)]\" />\n ) : (\n <IconCopy className=\"w-3.5 h-3.5\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={handleRegenerate}\n disabled={disabled}\n className=\"p-2 rounded-lg border border-[var(--kyro-border)] bg-[var(--kyro-surface)] text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] hover:border-[var(--kyro-warning)] hover:bg-[var(--kyro-warning)]/10 transition-all disabled:opacity-40 disabled:cursor-not-allowed active:scale-95\"\n title=\"Regenerate secret\"\n >\n <IconRefreshCw\n className={`w-3.5 h-3.5 ${regenerating ? \"animate-spin\" : \"\"}`}\n />\n </button>\n </div>\n </FieldLayout>\n );\n}\n","import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport type { StateStorage } from \"zustand/middleware\";\nimport { createStorage } from \"unstorage\";\nimport indexedbDriver from \"unstorage/drivers/indexedb\";\nimport type { Version } from \"@kyro-cms/core/client\";\n\nlet storageInstance: ReturnType<typeof createStorage> | null = null;\nlet storageReady = false;\n\nconst getStorage = async () => {\n if (storageInstance && storageReady) {\n return storageInstance;\n }\n\n storageInstance = createStorage({\n driver: indexedbDriver({\n dbName: \"kyro-autosave\",\n storeName: \"autosave\",\n }),\n });\n\n storageReady = true;\n return storageInstance;\n};\n\nconst createAutoFormStorage = (): StateStorage => {\n if (typeof window === \"undefined\") {\n return {\n getItem: async () => null,\n setItem: async () => {},\n removeItem: async () => {},\n };\n }\n\n return {\n getItem: async (name: string): Promise<string | null> => {\n try {\n const store = await getStorage();\n const value = await store.getItem<string>(name);\n return value ?? null;\n } catch (e) {\n console.error(\"Storage getItem error:\", e);\n return localStorage.getItem(name);\n }\n },\n setItem: async (name: string, value: string): Promise<void> => {\n try {\n const store = await getStorage();\n await store.setItem(name, value);\n } catch (e) {\n console.error(\"Storage setItem error:\", e);\n localStorage.setItem(name, value);\n }\n },\n removeItem: async (name: string): Promise<void> => {\n try {\n const store = await getStorage();\n await store.removeItem(name);\n } catch (e) {\n console.error(\"Storage removeItem error:\", e);\n localStorage.removeItem(name);\n }\n },\n };\n};\n\ntype AutoSaveStatus = \"idle\" | \"saving\" | \"success\" | \"error\" | \"conflict\" | \"retrying\" | \"offline\";\n\ninterface AutoFormStore {\n // In-memory document state\n formData: Record<string, unknown>;\n lastSavedData: Record<string, unknown>;\n sidebarCollapsed: boolean;\n draftCache: Record<string, BrowserDraftCacheEntry>;\n\n // Dirty field tracking (not persisted)\n dirtyFields: Set<string>;\n\n // UI State (not persisted)\n activeTab: number;\n isSlugLocked: boolean;\n view: \"edit\" | \"version\" | \"api\";\n isDropdownOpen: boolean;\n versions: Version[];\n loadingVersions: boolean;\n showPreview: boolean;\n isMenuOpen: boolean;\n hasUnsavedChanges: boolean;\n loadingFields: Record<string, boolean>;\n compareMode: boolean;\n compareSelected: string[];\n compareDiffs: VersionDiff[];\n loadingDiffs: boolean;\n isAutoSaving: boolean;\n autoSaveStatus: AutoSaveStatus;\n backgroundProcessing: boolean;\n\n // Auto-save\n lastAutoSaveTime: number;\n lastSavedAt: number | null;\n retryCount: number;\n autoSaveSkip: boolean;\n autoSaveTimer: NodeJS.Timeout | null;\n // Actions - Field Updates\n setField: (field: string, value: unknown) => void;\n setFormData: (data: Record<string, unknown>) => void;\n setLastSavedData: (data: Record<string, unknown>) => void;\n setNestedField: (path: string, value: unknown) => void;\n\n // Actions - UI State\n setActiveTab: (tab: number) => void;\n setIsSlugLocked: (locked: boolean | ((prev: boolean) => boolean)) => void;\n setView: (view: \"edit\" | \"version\" | \"api\") => void;\n setIsDropdownOpen: (open: boolean | ((prev: boolean) => boolean)) => void;\n setVersions: (versions: Version[]) => void;\n setLoadingVersions: (loading: boolean) => void;\n setShowPreview: (show: boolean | ((prev: boolean) => boolean)) => void;\n setIsMenuOpen: (open: boolean | ((prev: boolean) => boolean)) => void;\n setHasUnsavedChanges: (hasChanges: boolean) => void;\n setLoadingFields: (fields: Record<string, boolean> | ((prev: Record<string, boolean>) => Record<string, boolean>)) => void;\n updateLoadingField: (field: string, loading: boolean) => void;\n setCompareMode: (mode: boolean) => void;\n setCompareSelected: (selected: string[] | ((prev: string[]) => string[])) => void;\n setCompareDiffs: (diffs: VersionDiff[]) => void;\n setLoadingDiffs: (loading: boolean) => void;\n setIsAutoSaving: (saving: boolean) => void;\n setAutoSaveStatus: (status: AutoSaveStatus) => void;\n setBackgroundProcessing: (processing: boolean) => void;\n setSidebarCollapsed: (collapsed: boolean) => void;\n setLastSavedAt: (time: number | null) => void;\n setRetryCount: (count: number) => void;\n\n // Auto-save actions\n setAutoSaveSkip: (skip: boolean) => void;\n setLastAutoSaveTime: (time: number) => void;\n startAutoSaveTimer: (callback: () => void, delay: number) => void;\n clearAutoSaveTimer: () => void;\n\n\n // Actions - Data Management\n markSaved: () => void;\n resetForm: () => void;\nloadDocument: (\n data: Record<string, unknown>,\n lastSaved?: Record<string, unknown>,\n ) => void;\n\n getField: (field: string) => unknown;\n getNestedField: (path: string) => unknown;\n getHasChanges: () => boolean;\n hasDirtyFields: () => boolean;\n getDirtyData: () => Record<string, unknown>;\n clearDirtyFields: () => void;\n pruneExpiredDrafts: () => void;\n setDraftCache: (documentKey: string, draft: BrowserDraftCacheEntry) => void;\n getDraftCache: (documentKey: string) => BrowserDraftCacheEntry | null;\n clearDraftCache: (documentKey: string) => void;\n}\n\nexport interface BrowserDraftCacheEntry {\n data: Record<string, unknown>;\n baseUpdatedAt?: string | null;\n draftUpdatedAt: string;\n lastSyncedAt?: string | null;\n}\n\nexport const useAutoFormStore = create<AutoFormStore>()(\n persist(\n (set, get) => ({\n // Initial persisted state\n formData: {},\n lastSavedData: {},\n sidebarCollapsed: false,\n draftCache: {},\n\n // Dirty field tracking\n dirtyFields: new Set<string>(),\n\n // Initial UI state\n activeTab: 0,\n isSlugLocked: true,\n view: \"edit\",\n isDropdownOpen: false,\n versions: [],\n loadingVersions: false,\n showPreview: false,\n isMenuOpen: false,\n hasUnsavedChanges: false,\n loadingFields: {},\n compareMode: false,\n compareSelected: [],\n compareDiffs: [],\n loadingDiffs: false,\n isAutoSaving: false,\n autoSaveStatus: \"idle\" as AutoSaveStatus,\n backgroundProcessing: false,\n\n // Auto-save state\n lastAutoSaveTime: 0,\n lastSavedAt: null,\n retryCount: 0,\n autoSaveSkip: false,\n autoSaveTimer: null,\n\n\n // Field update actions\nsetField: (field: string, value: unknown) => {\n const state = get();\n const newDirty = new Set(state.dirtyFields);\n // Mark dirty if value differs from last saved baseline\n if (JSON.stringify(value) !== JSON.stringify(state.lastSavedData[field])) {\n newDirty.add(field);\n } else {\n newDirty.delete(field);\n }\n set({\n formData: {\n ...state.formData,\n [field]: value,\n },\n dirtyFields: newDirty,\n hasUnsavedChanges: newDirty.size > 0,\n });\n },\n\n setFormData: (data: Record<string, unknown>) => {\n set({ formData: data });\n },\n\n setNestedField: (path: string, value: unknown) => {\n set((state) => {\n const keys = path.split(\".\");\n const newFormData = { ...state.formData };\n let current: Record<string, unknown> = newFormData;\n\n for (let i = 0; i < keys.length - 1; i++) {\n if (current[keys[i]] === undefined) {\n current[keys[i]] = {};\n }\n current[keys[i]] = { ...current[keys[i]] };\n current = current[keys[i]];\n }\n\n current[keys[keys.length - 1]] = value;\n\n return { formData: newFormData };\n });\n },\n\n // UI state actions\n setActiveTab: (tab: number) => set({ activeTab: tab }),\n setIsSlugLocked: (locked) =>\n set((state) => ({\n isSlugLocked:\n typeof locked === \"function\" ? locked(state.isSlugLocked) : locked,\n })),\n setView: (view) => set({ view }),\n setIsDropdownOpen: (open) =>\n set((state) => ({\n isDropdownOpen:\n typeof open === \"function\" ? open(state.isDropdownOpen) : open,\n })),\n setVersions: (versions: Version[]) => set({ versions }),\n setLoadingVersions: (loading: boolean) =>\n set({ loadingVersions: loading }),\n setShowPreview: (show) =>\n set((state) => ({\n showPreview:\n typeof show === \"function\" ? show(state.showPreview) : show,\n })),\n setIsMenuOpen: (open) =>\n set((state) => ({\n isMenuOpen: typeof open === \"function\" ? open(state.isMenuOpen) : open,\n })),\n setHasUnsavedChanges: (hasChanges: boolean) =>\n set({ hasUnsavedChanges: hasChanges }),\n setLoadingFields: (fields) =>\n set((state) => ({\n loadingFields:\n typeof fields === \"function\" ? fields(state.loadingFields) : fields,\n })),\n updateLoadingField: (field, loading) =>\n set((state) => ({\n loadingFields: { ...state.loadingFields, [field]: loading },\n })),\n setCompareMode: (mode: boolean) => set({ compareMode: mode }),\n setCompareSelected: (selected) =>\n set((state) => ({\n compareSelected:\n typeof selected === \"function\"\n ? selected(state.compareSelected)\n : selected,\n })),\n setCompareDiffs: (diffs: VersionDiff[]) => set({ compareDiffs: diffs }),\n setLoadingDiffs: (loading: boolean) => set({ loadingDiffs: loading }),\n setIsAutoSaving: (saving: boolean) => set({ isAutoSaving: saving }),\n setAutoSaveStatus: (status: AutoSaveStatus) => set({ autoSaveStatus: status }),\n setBackgroundProcessing: (processing: boolean) => set({ backgroundProcessing: processing }),\n setSidebarCollapsed: (collapsed: boolean) =>\n set({ sidebarCollapsed: collapsed }),\n setLastSavedAt: (time: number | null) => set({ lastSavedAt: time }),\n setRetryCount: (count: number) => set({ retryCount: count }),\n\n // Auto-save actions\n setAutoSaveSkip: (skip: boolean) => set({ autoSaveSkip: skip }),\n setLastAutoSaveTime: (time: number) => set({ lastAutoSaveTime: time }),\n\n startAutoSaveTimer: (callback: () => void, delay: number) => {\n const { autoSaveTimer } = get();\n if (autoSaveTimer) {\n clearTimeout(autoSaveTimer);\n }\n const timer = setTimeout(callback, delay);\n set({ autoSaveTimer: timer as any });\n },\n\n clearAutoSaveTimer: () => {\n const { autoSaveTimer } = get();\n if (autoSaveTimer) {\n clearTimeout(autoSaveTimer);\n set({ autoSaveTimer: null });\n }\n },\n\n // Data management\n markSaved: () => {\n const { formData } = get();\n set({\n lastSavedData: formData,\n hasUnsavedChanges: false,\n dirtyFields: new Set<string>(),\n lastSavedAt: Date.now(),\n });\n },\n\n setLastSavedData: (data: Record<string, unknown>) => {\n set({ lastSavedData: data });\n },\n\n resetForm: () => {\n set({\n formData: {},\n lastSavedData: {},\n hasUnsavedChanges: false,\n dirtyFields: new Set<string>(),\n activeTab: 0,\n });\n },\n\n loadDocument: (\n data: Record<string, unknown>,\n lastSaved?: Record<string, unknown>,\n ) => {\n set({\n formData: data,\n lastSavedData: lastSaved || data,\n hasUnsavedChanges: false,\n dirtyFields: new Set<string>(),\n });\n },\n\n // Computed values\n getField: (field: string) => {\n return get().formData[field];\n },\n\n getNestedField: (path: string) => {\n const keys = path.split(\".\");\n let current: unknown = get().formData;\n\n for (const key of keys) {\n if (current === undefined || current === null) return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n\n return current;\n },\n\n getHasChanges: () => {\n return get().dirtyFields.size > 0;\n },\n\n hasDirtyFields: () => {\n return get().dirtyFields.size > 0;\n },\n\n getDirtyData: () => {\n const { formData, dirtyFields } = get();\n const delta: Record<string, unknown> = {};\n for (const field of dirtyFields) {\n delta[field] = formData[field];\n }\n return delta;\n },\n\n clearDirtyFields: () => {\n set({ dirtyFields: new Set<string>(), hasUnsavedChanges: false });\n },\n\n pruneExpiredDrafts: () => {\n const DRAFT_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n const now = Date.now();\n const { draftCache } = get();\n const pruned: Record<string, BrowserDraftCacheEntry> = {};\n for (const [key, entry] of Object.entries(draftCache)) {\n if (now - new Date(entry.draftUpdatedAt).getTime() < DRAFT_TTL_MS) {\n pruned[key] = entry;\n }\n }\n set({ draftCache: pruned });\n },\n\n setDraftCache: (documentKey, draft) =>\n set((state) => ({\n draftCache: {\n ...state.draftCache,\n [documentKey]: draft,\n },\n })),\n\n getDraftCache: (documentKey) => get().draftCache[documentKey] || null,\n\n clearDraftCache: (documentKey) =>\n set((state) => {\n const next = { ...state.draftCache };\n delete next[documentKey];\n return { draftCache: next };\n }),\n }),\n {\n name: \"kyro-autoform-storage\",\n storage: createJSONStorage(() => createAutoFormStorage()),\n partialize: (state) => ({\n sidebarCollapsed: state.sidebarCollapsed,\n draftCache: state.draftCache,\n }),\n onRehydrateStorage: () => (state) => {\n // Prune expired drafts on hydration\n if (state) {\n state.pruneExpiredDrafts();\n }\n },\n },\n ),\n);\n\n// Helper hook to get field value with tab support\nexport function useAutoFormField(\n fieldName: string,\n tabData?: Record<string, unknown>,\n) {\n const formData = useAutoFormStore((s) => s.formData);\n const setField = useAutoFormStore((s) => s.setField);\n const setNestedField = useAutoFormStore((s) => s.setNestedField);\n\n // If tabData is provided, look inside it first (for fields inside tabs)\n if (tabData !== undefined) {\n return {\n value: tabData[fieldName],\n onChange: (value: unknown) => {\n return value;\n },\n };\n }\n\n return {\n value: formData[fieldName],\n onChange: (value: unknown) => setField(fieldName, value),\n };\n}\n\n","/**\n * Convert text to a URL-friendly slug.\n */\nexport function slugifyText(text: string): string {\n if (!text) return \"\";\n return text\n .toString()\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, \"-\")\n .replace(/[^\\w-]+/g, \"\")\n .replace(/--+/g, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n}\n","import type { TextField as TextFieldType } from \"@kyro-cms/core/client\";\nimport FieldLayout from \"./FieldLayout\";\nimport { useAutoFormStore } from \"../../lib/autoform-store\";\nimport { slugifyText } from \"../../lib/slugify\";\n\ninterface TextFieldComponentProps {\n field: TextFieldType;\n value?: string | null;\n onChange?: (value: string) => void;\n error?: string;\n disabled?: boolean;\n}\n\nexport default function TextField({\n field,\n value,\n onChange,\n error,\n disabled,\n}: TextFieldComponentProps) {\n const isReadOnly =\n typeof field.admin?.readOnly === \"function\"\n ? false\n : Boolean(field.admin?.readOnly);\n const isTextarea = (field as TextFieldType).variant === \"textarea\";\n const isSlug = field.name === \"slug\";\n\n const { isSlugLocked, setIsSlugLocked, formData } = useAutoFormStore();\n\n const inputType =\n field.variant === \"email\"\n ? \"email\"\n : field.variant === \"password\"\n ? \"password\"\n : field.variant === \"url\"\n ? \"url\"\n : \"text\";\n\n const normalizedValue = value == null ? \"\" : String(value);\n\n const commonProps = {\n id: field.name,\n value: normalizedValue,\n onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onChange?.(e.target.value),\n placeholder: field.admin?.placeholder,\n disabled: disabled || isReadOnly || (isSlug && isSlugLocked),\n minLength: field.minLength,\n maxLength: field.maxLength,\n required: field.required,\n className: `kyro-form-input ${isSlug ? \"pr-24\" : \"\"\n } ${disabled || isReadOnly || (isSlug && isSlugLocked) ? \"opacity-70 bg-[var(--kyro-bg-secondary)] cursor-not-allowed\" : \"\"}`,\n };\n\n return (\n <FieldLayout field={field} error={error}>\n <div className=\"relative\">\n {isTextarea ? (\n <textarea {...commonProps} rows={(field as TextFieldType).rows || 4} />\n ) : (\n <input type={inputType} {...commonProps} pattern={field.pattern} />\n )}\n\n {isSlug && (\n <div className=\"absolute right-2 top-1/2 -translate-y-1/2 flex items-center gap-1\">\n {!isSlugLocked && (\n <button\n type=\"button\"\n onClick={() =>\n onChange?.(\n slugifyText(\n formData[field.admin?.autoGenerate || \"title\"] || \"\",\n ),\n )\n }\n className=\"p-1 text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-primary)]\"\n title=\"Regenerate slug\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => setIsSlugLocked(!isSlugLocked)}\n className={`p-1.5 rounded transition-colors ${isSlugLocked ? \"text-[var(--kyro-primary)] bg-[var(--kyro-primary-alpha)]\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)]\"}`}\n title={isSlugLocked ? \"Unlock slug\" : \"Lock slug\"}\n >\n {isSlugLocked ? (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n ) : (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 9.9-1\" />\n </svg>\n )}\n </button>\n </div>\n )}\n\n {field.name?.toLowerCase().includes(\"metatitle\") && (\n <div className=\"flex items-center justify-between mt-1 text-[10px] font-bold tracking-wider\">\n <span className={(normalizedValue.length) > 60 ? \"text-red-500\" : normalizedValue.length >= 40 ? \"text-green-500\" : \"text-amber-600\"}>\n {normalizedValue.length} / 60 — {normalizedValue.length > 60 ? \"Too Long\" : normalizedValue.length >= 40 ? \"Ideal\" : \"Short\"}\n </span>\n </div>\n )}\n </div>\n </FieldLayout>\n );\n}\n","import type { NumberField as NumberFieldType } from \"@kyro-cms/core/client\";\nimport FieldLayout from \"./FieldLayout\";\n\ninterface NumberFieldComponentProps {\n field: NumberFieldType;\n value?: number;\n onChange?: (value: number) => void;\n error?: string;\n disabled?: boolean;\n}\n\nexport default function NumberField({\n field,\n value,\n onChange,\n error,\n disabled,\n}: NumberFieldComponentProps) {\n const isReadOnly =\n typeof field.admin?.readOnly === \"function\"\n ? false\n : Boolean(field.admin?.readOnly);\n\n return (\n <FieldLayout\n field={field}\n error={error}\n >\n <input\n type=\"number\"\n id={field.name}\n value={value ?? \"\"}\n onChange={(e) => onChange?.(parseFloat(e.target.value) || 0)}\n placeholder={field.admin?.placeholder}\n disabled={disabled || isReadOnly}\n min={field.min}\n max={field.max}\n step={field.step || (field.integer ? 1 : \"any\")}\n required={field.required}\n className={`kyro-form-input ${\n disabled || isReadOnly ? \"opacity-50 cursor-not-allowed\" : \"\"\n }`}\n />\n </FieldLayout>\n );\n}\n","import type { CheckboxField as CheckboxFieldType } from \"@kyro-cms/core/client\";\nimport FieldLayout from \"./FieldLayout\";\n\ninterface CheckboxFieldComponentProps {\n field: CheckboxFieldType;\n value?: boolean;\n onChange?: (value: boolean) => void;\n error?: string;\n disabled?: boolean;\n}\n\nexport default function CheckboxField({\n field,\n value,\n onChange,\n error,\n disabled,\n}: CheckboxFieldComponentProps) {\n const isReadOnly =\n typeof field.admin?.readOnly === \"function\"\n ? false\n : Boolean(field.admin?.readOnly);\n const checked = value ?? false;\n\n return (\n <FieldLayout\n field={field}\n error={error}\n hideLabel={true}\n >\n <label className=\"flex items-center gap-2.5 cursor-pointer group py-0.5\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => onChange?.(e.target.checked)}\n disabled={disabled || isReadOnly}\n className={`w-4 h-4 rounded border-[var(--kyro-border)] text-[var(--kyro-primary)] focus:ring-[var(--kyro-primary)] transition-all ${\n disabled || isReadOnly ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\"\n }`}\n />\n <span className=\"text-sm font-semibold text-[var(--kyro-text-primary)] tracking-tight group-hover:text-[var(--kyro-primary)] transition-colors\">\n {field.label || field.name}\n {field.required && (\n <span className=\"text-[var(--kyro-error)] ml-1\">*</span>\n )}\n </span>\n </label>\n </FieldLayout>\n );\n}\n","import type { DateField as DateFieldType } from \"@kyro-cms/core/client\";\nimport FieldLayout from \"./FieldLayout\";\n\ninterface DateFieldComponentProps {\n field: DateFieldType;\n value?: string;\n onChange?: (value: string) => void;\n error?: string;\n disabled?: boolean;\n}\n\nexport default function DateField({\n field,\n value = \"\",\n onChange,\n error,\n disabled,\n}: DateFieldComponentProps) {\n const isReadOnly =\n typeof field.admin?.readOnly === \"function\"\n ? false\n : Boolean(field.admin?.readOnly);\n\n return (\n <FieldLayout\n field={field}\n error={error}\n >\n <input\n type={field.time ? \"datetime-local\" : \"date\"}\n id={field.name}\n value={value == null ? \"\" : value}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled || isReadOnly}\n min={field.minDate}\n max={field.maxDate}\n required={field.required}\n className={`kyro-form-input ${\n disabled || isReadOnly ? \"opacity-50 cursor-not-allowed\" : \"\"\n }`}\n />\n </FieldLayout>\n );\n}\n","import type { AdminConfig, CollectionConfig, GlobalConfig } from \"@kyro-cms/core/client\";\nimport {\n blogCollections,\n ecommerceCollections,\n minimalCollections,\n starterCollections,\n kitchenSinkCollections,\n mediaCollections,\n authCollections,\n allSettingsGlobals,\n coreSettingsGlobals,\n} from \"@kyro-cms/core/templates\";\nimport fs from \"fs\";\n\n// Injected by Vite's define config — exact path to the serialized config JSON.\ndeclare const __KYRO_ADMIN_CONFIG_FILE__: string;\n\ntype ConfigCollectionInput =\n | CollectionConfig[]\n | Record<string, CollectionConfig>\n | undefined;\ntype ConfigGlobalInput =\n | GlobalConfig[]\n | Record<string, GlobalConfig>\n | undefined;\n\nexport type AdminTemplate = \"minimal\" | \"starter\" | \"blog\" | \"ecommerce\" | \"kitchen-sink\";\n\nexport function toArray<T>(input: T[] | Record<string, T> | undefined): T[] {\n if (!input) return [];\n return Array.isArray(input) ? input : Object.values(input);\n}\n\nexport function toCollectionMap(\n collections: CollectionConfig[],\n): Record<string, CollectionConfig> {\n return collections.reduce(\n (acc, c) => {\n if (c.slug) acc[c.slug] = c;\n return acc;\n },\n {} as Record<string, CollectionConfig>,\n );\n}\n\nexport function toGlobalMap(globals: GlobalConfig[]): Record<string, GlobalConfig> {\n return globals.reduce(\n (acc, g) => {\n if (g.slug) acc[g.slug] = g;\n return acc;\n },\n {} as Record<string, GlobalConfig>,\n );\n}\n\nfunction addMissingCollections(\n target: CollectionConfig[],\n collections: CollectionConfig[],\n) {\n const existing = new Set(target.map((collection) => collection.slug));\n for (const collection of collections) {\n if (!existing.has(collection.slug)) {\n target.push(collection);\n existing.add(collection.slug);\n }\n }\n}\n\nconst defaultCollectionIcons: Record<string, string> = {\n pages: \"FileText\",\n posts: \"Newspaper\",\n categories: \"Tags\",\n menu: \"Menu\",\n products: \"ShoppingBag\",\n customers: \"Users\",\n orders: \"ShoppingCart\",\n coupons: \"Ticket\",\n forms: \"FileInput\",\n \"form-entries\": \"Inbox\",\n};\n\n/**\n * Recursively find and update a field by its dot-notation path.\n * Example: \"menu.menu_item.internal_target\" navigates through nested field structures.\n */\nfunction updateFieldByPath(\n fields: any[],\n path: string,\n updates: Record<string, any>,\n): boolean {\n const parts = path.split(\".\");\n if (parts.length === 0) return false;\n\n const currentPart = parts[0];\n const remainingPath = parts.slice(1).join(\".\");\n\n for (const field of fields) {\n if (field.name === currentPart) {\n if (remainingPath) {\n // Continue traversing nested fields\n if (field.fields && Array.isArray(field.fields)) {\n return updateFieldByPath(field.fields, remainingPath, updates);\n }\n // For array fields, look in the nested fields\n if (field.type === \"array\" && field.fields && Array.isArray(field.fields)) {\n return updateFieldByPath(field.fields, remainingPath, updates);\n }\n return false;\n } else {\n // Found the target field, apply updates\n Object.assign(field, updates);\n return true;\n }\n }\n }\n return false;\n}\n\nfunction applyCollectionAdminOverrides(\n collections: Record<string, CollectionConfig>,\n overrides?: Record<\n string,\n Partial<AdminConfig> & { fields?: Record<string, any> }\n >,\n): void {\n for (const [slug, col] of Object.entries(collections)) {\n const defaultIcon = defaultCollectionIcons[slug];\n const override = overrides?.[slug];\n if (defaultIcon && !col.admin?.icon) {\n col.admin = { ...col.admin, icon: defaultIcon };\n }\n if (override) {\n const { fields: fieldOverrides, ...adminOverrides } = override;\n col.admin = { ...col.admin, ...adminOverrides };\n\n // Apply field-level overrides\n if (fieldOverrides && col.fields && Array.isArray(col.fields)) {\n for (const [fieldPath, fieldUpdates] of Object.entries(fieldOverrides)) {\n updateFieldByPath(col.fields, fieldPath, fieldUpdates);\n }\n }\n }\n }\n}\n\nexport function getAdminConfig(template: AdminTemplate = \"blog\") {\n const collections: CollectionConfig[] = [];\n const globals: GlobalConfig[] = [];\n\n switch (template) {\n case \"minimal\":\n collections.push(...Object.values(minimalCollections));\n globals.push(...coreSettingsGlobals);\n break;\n case \"starter\":\n collections.push(...Object.values(starterCollections));\n globals.push(...coreSettingsGlobals);\n break;\n case \"blog\":\n collections.push(...Object.values(blogCollections));\n globals.push(...coreSettingsGlobals);\n break;\n case \"ecommerce\":\n collections.push(...Object.values(ecommerceCollections));\n globals.push(...allSettingsGlobals);\n break;\n case \"kitchen-sink\":\n collections.push(\n ...Object.values(minimalCollections),\n ...Object.values(starterCollections),\n ...Object.values(blogCollections),\n ...Object.values(ecommerceCollections),\n ...Object.values(kitchenSinkCollections),\n );\n globals.push(...allSettingsGlobals);\n break;\n }\n\n addMissingCollections(collections, Object.values(mediaCollections));\n addMissingCollections(collections, Object.values(authCollections));\n\n return {\n collections: toCollectionMap(collections),\n globals: toGlobalMap(globals),\n };\n}\n\nfunction createProjectAdminConfig(config: {\n collections?: ConfigCollectionInput;\n globals?: ConfigGlobalInput;\n}) {\n const projectCollections = toArray(config.collections);\n const projectGlobals = toArray(config.globals);\n\n if (projectCollections.length === 0 && projectGlobals.length === 0) {\n return getAdminConfig(\"kitchen-sink\");\n }\n\n const collections: CollectionConfig[] = [];\n addMissingCollections(collections, Object.values(mediaCollections));\n addMissingCollections(collections, Object.values(authCollections));\n addMissingCollections(collections, projectCollections);\n\n return {\n collections: toCollectionMap(collections),\n globals: toGlobalMap(projectGlobals),\n };\n}\n\n// Read config from the JSON file whose path is injected by Vite's define.\nlet cachedConfig: { collections: any[]; globals: any[]; collectionOverrides?: Record<string, any> } | null = null;\n\nfunction loadProjectConfig() {\n if (cachedConfig) return cachedConfig;\n try {\n if (typeof __KYRO_ADMIN_CONFIG_FILE__ === \"string\" && fs.existsSync(__KYRO_ADMIN_CONFIG_FILE__)) {\n cachedConfig = JSON.parse(fs.readFileSync(__KYRO_ADMIN_CONFIG_FILE__, \"utf8\"));\n return cachedConfig;\n }\n } catch {\n // fall through to kitchen-sink default\n }\n return null;\n}\n\nconst projectCfg = loadProjectConfig() || { collections: [], globals: [] };\n\nconst rawConfig = createProjectAdminConfig(projectCfg);\napplyCollectionAdminOverrides(rawConfig.collections, projectCfg.collectionOverrides);\n\nexport const adminConfig = rawConfig;\nexport const collections = adminConfig.collections;\nexport const globals = adminConfig.globals;\n\nexport const authCollectionSlugs = [\"users\", \"audit_logs\"];\nexport const nonAuthCollections = Object.values(collections).filter(\n (c) => !authCollectionSlugs.includes(c.slug) && c.admin?.hidden !== true,\n);\n","import type { SelectField as SelectFieldType } from \"@kyro-cms/core/client\";\nimport FieldLayout from \"./FieldLayout\";\nimport { collections } from \"../../lib/config\";\n\ninterface SelectFieldComponentProps {\n field: SelectFieldType;\n value?: string | string[];\n onChange?: (value: string | string[] | undefined) => void;\n error?: string;\n disabled?: boolean;\n}\n\nexport default function SelectField({\n field,\n value,\n onChange,\n error,\n disabled,\n}: SelectFieldComponentProps) {\n const isReadOnly =\n typeof field.admin?.readOnly === \"function\"\n ? false\n : Boolean(field.admin?.readOnly);\n\n // Resolve dynamic options at runtime if configured\n let options = field.options || [];\n if (field.dynamicOptions === \"collections\") {\n options = Object.keys(collections)\n .filter((slug) => slug !== \"media\")\n .map((slug) => ({\n label: collections[slug]?.label || slug,\n value: slug,\n }));\n }\n\n return (\n <FieldLayout\n field={field}\n error={error}\n >\n <select\n id={field.name}\n value={\n field.hasMany\n ? (Array.isArray(value) ? value : [])\n : value || \"\"\n }\n onChange={(e) => {\n if (field.hasMany) {\n const selected = Array.from(e.target.selectedOptions, (opt) => opt.value);\n onChange?.(selected);\n } else {\n onChange?.(e.target.value || undefined);\n }\n }}\n multiple={field.hasMany}\n disabled={disabled || isReadOnly}\n required={field.required}\n className={`kyro-form-input ${\n disabled || isReadOnly ? \"opacity-50 cursor-not-allowed\" : \"\"\n }`}\n >\n {!field.required && !field.hasMany && <option value=\"\">Select...</option>}\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </FieldLayout>\n );\n}\n","import type { ReactNode } from \"react\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({ icon, title, description, action }: EmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center gap-3 justify-center py-16 px-8\">\n {icon && (\n <div className=\"w-16 h-16 rounded-2xl bg-[var(--kyro-surface-accent)] flex items-center justify-center mb-4\">\n {icon}\n </div>\n )}\n <p className=\"font-medium text-[var(--kyro-text-primary)] text-base\">{title}</p>\n {description && (\n <p className=\"text-sm text-[var(--kyro-text-secondary)] mt-1\">{description}</p>\n )}\n {action}\n </div>\n );\n}\n","import { useEffect, useState, useRef, useCallback } from \"react\";\nimport { Search, X, ChevronDown, Loader2 } from \"../ui/icons\";\nimport { apiGet, buildSearchQuery } from \"../../lib/api\";\nimport { EmptyState } from \"../ui/EmptyState\";\n\ninterface RelationshipFieldProps {\n field: {\n name: string;\n label?: string;\n relationTo: string | string[];\n hasMany?: boolean;\n required?: boolean;\n admin?: {\n description?: string;\n readOnly?: boolean;\n placeholder?: string;\n };\n };\n value?: unknown;\n onChange?: (value: unknown) => void;\n error?: string;\n disabled?: boolean;\n}\n\ninterface ResolvedDoc {\n id: string;\n relationTo?: string;\n [key: string]: unknown;\n}\n\nfunction getLabel(opt: Record<string, unknown>): string {\n const mainTabs = opt?.mainTabs as Record<string, unknown> | undefined;\n\n return (\n (opt?.title as string) ||\n (mainTabs?.title as string) ||\n (opt?.name as string) ||\n (opt?.label as string) ||\n (opt?.email as string) ||\n (opt?.filename as string) ||\n (opt?.slug as string) ||\n \"Untitled\"\n );\n}\n\nexport function RelationshipField({\n field,\n value,\n onChange,\n error,\n disabled,\n}: RelationshipFieldProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [options, setOptions] = useState<ResolvedDoc[]>([]);\n const [loading, setLoading] = useState(false);\n const [selectedDocs, setSelectedDocs] = useState<ResolvedDoc[]>([]);\n const fetchedIdsRef = useRef<Set<string>>(new Set());\n const containerRef = useRef<HTMLDivElement>(null);\n const onChangeRef = useRef<(value: unknown) => void>(() => {});\n onChangeRef.current = onChange || (() => {});\n\n const isMultiple = field.hasMany;\n const relationTo = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo];\n const isPolymorphic = relationTo.length > 1;\n const [activeRelation, setActiveRelation] = useState(relationTo[0]);\n\n const extractIds = useCallback((): string[] => {\n if (!value) return [];\n const items = isMultiple\n ? Array.isArray(value) ? value : []\n : value ? [value] : [];\n return items.map((item) => {\n if (typeof item === \"object\" && item !== null) {\n return (item as { value?: string }).value || (item as { id?: string }).id || \"\";\n }\n return String(item);\n }).filter(Boolean);\n }, [value, isMultiple]);\n\n const fetchSelectedDocs = useCallback((ids: string[]) => {\n if (ids.length === 0) return;\n ids.forEach((id) => {\n if (fetchedIdsRef.current.has(id)) return;\n fetchedIdsRef.current.add(id);\n const rel = isPolymorphic\n ? (() => {\n if (!value) return activeRelation;\n const items = isMultiple\n ? Array.isArray(value) ? value : []\n : [value];\n const match = items.find((item) => {\n if (typeof item === \"object\" && item !== null) {\n return (item as { value?: string }).value === id || (item as { id?: string }).id === id;\n }\n return false;\n });\n return match && typeof match === \"object\" ? (match as { relationTo?: string }).relationTo || activeRelation : activeRelation;\n })()\n : activeRelation;\n apiGet<Record<string, unknown>>(`/api/${rel}/${id}`)\n .then((response) => {\n const doc = (response as any).data || response;\n if (!doc || typeof doc !== \"object\") return;\n\n setSelectedDocs((prev) => {\n if (prev.some((d) => d.id === id)) return prev;\n return [...prev, { ...doc, id: String((doc as any).id), relationTo: rel }];\n });\n })\n .catch(() => {});\n });\n }, [isPolymorphic, value, activeRelation, isMultiple]);\n\n useEffect(() => {\n const ids = extractIds();\n fetchSelectedDocs(ids);\n }, [extractIds, fetchSelectedDocs]);\n\n const fetchOptions = useCallback((query: string = \"\") => {\n setLoading(true);\n const searchFields = [\"title\", \"name\", \"label\", \"email\"];\n const url = `/api/${activeRelation}?${buildSearchQuery(query, searchFields)}`;\n\n apiGet<{ docs?: Record<string, unknown>[] }>(url)\n .then((data) => {\n setOptions((prev) => {\n const existingIds = new Set(prev.map((o) => o.id));\n const newDocs: ResolvedDoc[] = (data.docs || []).filter(\n (d) => !existingIds.has(d.id as string),\n ).map((d) => ({ ...d, id: d.id as string }));\n return [...prev, ...newDocs];\n });\n setLoading(false);\n })\n .catch(() => {\n setLoading(false);\n });\n }, [activeRelation]);\n\n useEffect(() => {\n if (isOpen) {\n setOptions([]);\n fetchOptions(search);\n }\n }, [isOpen, activeRelation]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const getValueId = (val: unknown): string => {\n if (typeof val === \"object\" && val !== null) {\n return (val as { value?: string }).value || (val as { id?: string }).id || \"\";\n }\n return String(val);\n };\n\n const isSelected = (opt: Record<string, unknown>): boolean => {\n const optId = opt.id;\n if (!value) return false;\n if (isMultiple && Array.isArray(value)) {\n return value.some((v) => getValueId(v) === optId);\n }\n return getValueId(value) === optId;\n };\n\n const handleSelect = (opt: Record<string, unknown>) => {\n const optId = opt.id;\n if (isMultiple) {\n const current: unknown[] = Array.isArray(value) ? value : [];\n if (isSelected(opt)) {\n onChangeRef.current?.(current.filter((v) => getValueId(v) !== optId));\n } else {\n const newItem = isPolymorphic\n ? { relationTo: activeRelation, value: optId }\n : optId;\n onChangeRef.current?.([...current, newItem]);\n }\n } else {\n if (isSelected(opt)) {\n onChangeRef.current?.(null);\n } else {\n const newItem = isPolymorphic\n ? { relationTo: activeRelation, value: optId }\n : optId;\n onChangeRef.current?.(newItem);\n setIsOpen(false);\n setSearch(\"\");\n }\n }\n };\n\n const renderSelectedItems = () => {\n if (!value) return null;\n\n const items: unknown[] = isMultiple\n ? Array.isArray(value) ? value : []\n : value ? [value] : [];\n\n return (\n <div className=\"flex flex-wrap gap-1.5 mt-2\">\n {items.map((item) => {\n const rawId = getValueId(item);\n const doc = selectedDocs.find((d) => d.id === rawId);\n const label = doc ? getLabel(doc) : rawId.slice(0, 12);\n const rel = isPolymorphic && doc ? doc.relationTo : null;\n return (\n <span\n key={rawId}\n className=\"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md bg-[var(--kyro-sidebar-active)]/10 text-[var(--kyro-sidebar-active)]\"\n >\n {rel && <span className=\"opacity-60 mr-0.5\">{rel}:</span>}\n {label}\n {!disabled && (\n <button\n type=\"button\"\n onClick={() => {\n const filtered = items.filter((value) => getValueId(value) !== rawId);\n onChangeRef.current?.(isMultiple ? filtered : (filtered[0] ?? null));\n }}\n className=\"hover:opacity-70\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </span>\n );\n })}\n </div>\n );\n };\n\n return (\n <div className=\"space-y-1.5\">\n {field.label && (\n <label className=\"block text-sm font-medium text-[var(--kyro-text-primary)]\">\n {field.label}\n {field.required && (\n <span className=\"text-[var(--kyro-error)] ml-1\">*</span>\n )}\n </label>\n )}\n <div ref={containerRef} className=\"relative\">\n {isPolymorphic && (\n <div className=\"flex gap-1 mb-1.5\">\n {relationTo.map((rel) => (\n <button\n key={rel}\n type=\"button\"\n onClick={() => {\n setActiveRelation(rel);\n setOptions([]);\n setSearch(\"\");\n }}\n className={`px-2 py-0.5 text-[10px] font-bold rounded transition-colors ${\n activeRelation === rel\n ? \"kyro-btn-primary\"\n : \"bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-border)]\"\n }`}\n >\n {rel}\n </button>\n ))}\n </div>\n )}\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--kyro-text-muted)]\" />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setIsOpen(true);\n fetchOptions(e.target.value);\n }}\n onFocus={() => setIsOpen(true)}\n placeholder={\n field.admin?.placeholder || `Search ${activeRelation}...`\n }\n disabled={\n disabled ||\n (typeof field.admin?.readOnly === \"function\"\n ? false\n : Boolean(field.admin?.readOnly))\n }\n className=\"w-full pl-9 pr-10 py-2 border border-[var(--kyro-border)] rounded-md bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent disabled:opacity-50\"\n />\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n {loading ? (\n <Loader2 className=\"w-4 h-4 text-[var(--kyro-text-muted)] animate-spin\" />\n ) : (\n <ChevronDown\n className={`w-4 h-4 text-[var(--kyro-text-muted)] transition-transform ${isOpen ? \"rotate-180\" : \"\"}`}\n />\n )}\n </div>\n </div>\n\n {isOpen && (\n <div className=\"relative z-20 w-full mt-1 border border-[var(--kyro-border)] rounded-lg shadow-lg bg-[var(--kyro-surface)] max-h-64 overflow-auto\">\n {loading ? (\n <div className=\"p-4 text-center text-sm text-[var(--kyro-text-muted)]\">\n Loading...\n </div>\n ) : options.length === 0 ? (\n <EmptyState title=\"No results found\" />\n ) : (\n <div className=\"py-1\">\n {options.map((opt) => (\n <button\n key={opt.id}\n type=\"button\"\n onClick={() => handleSelect(opt)}\n className={`w-full px-3 py-2 text-left text-sm hover:bg-[var(--kyro-surface-accent)] transition-colors ${\n isSelected(opt)\n ? \"bg-[var(--kyro-sidebar-active)]/10 text-[var(--kyro-sidebar-active)]\"\n : \"text-[var(--kyro-text-primary)]\"\n }`}\n >\n <div className=\"flex items-center justify-between\">\n <span>{getLabel(opt)}</span>\n {isSelected(opt) && (\n <span className=\"text-[var(--kyro-sidebar-active)]\">\n ✓\n </span>\n )}\n </div>\n {\"slug\" in opt && typeof opt.slug === \"string\" && (\n <div className=\"text-xs text-[var(--kyro-text-muted)]\">\n {opt.slug}\n </div>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {renderSelectedItems()}\n </div>\n {field.admin?.description && !error && (\n <p className=\"text-xs text-[var(--kyro-text-muted)]\">\n {field.admin.description}\n </p>\n )}\n {error && <p className=\"text-xs text-[var(--kyro-error)]\">{error}</p>}\n </div>\n );\n}\n\nexport default RelationshipField;\n","import { createStore, type StoreApi } from \"zustand/vanilla\";\nimport { useStore } from \"zustand\";\nimport { createContext, useContext } from \"react\";\nimport type { BlockData } from \"@kyro-cms/core/client\";\n\nexport interface BlocksStore {\n blocks: BlockData[];\n setBlocks: (blocks: BlockData[]) => void;\n addBlock: (type: string, index?: number) => void;\n updateBlock: (id: string, data: Partial<BlockData>) => void;\n removeBlock: (id: string) => void;\n moveBlock: (id: string, direction: \"up\" | \"down\") => void;\n onBlocksChange: (() => void) | null;\n setOnBlocksChange: (cb: () => void) => void;\n allowedBlocks: any[];\n dynamicCategories: { title: string; blocks: any[] }[];\n}\n\nexport type BlocksStoreApi = StoreApi<BlocksStore>;\n\nexport const BlocksContext = createContext<BlocksStoreApi | null>(null);\n\nexport function createBlocksStore(allowedBlocks: any[] = [], dynamicCategories: any[] = []): BlocksStoreApi {\n return createStore<BlocksStore>((set, get) => ({\n blocks: [],\n allowedBlocks,\n dynamicCategories,\n setBlocks: (blocks) => {\n const ensuredBlocks = ensureIds(blocks || []);\n set({ blocks: ensuredBlocks });\n },\n onBlocksChange: null,\n setOnBlocksChange: (cb) => set({ onBlocksChange: cb }),\n addBlock: (type, index) => {\n const newBlock = createNewBlock(type);\n const { blocks } = get();\n const newBlocks = [...blocks];\n if (index !== undefined) {\n newBlocks.splice(index, 0, newBlock);\n } else {\n newBlocks.push(newBlock);\n }\n set({ blocks: newBlocks });\n const { onBlocksChange } = get();\n if (onBlocksChange) onBlocksChange();\n },\n updateBlock: (id, data) => {\n const { blocks } = get();\n\n const newBlocks = traverseBlocks(blocks, (blocksList) => {\n const index = blocksList.findIndex(b => b.id === id);\n if (index !== -1) {\n const newBlocksList = [...blocksList];\n newBlocksList[index] = { ...newBlocksList[index], ...data };\n return { newList: newBlocksList, found: true };\n }\n return { newList: blocksList, found: false };\n });\n\n if (newBlocks !== blocks) {\n set({ blocks: newBlocks });\n const { onBlocksChange } = get();\n if (onBlocksChange) onBlocksChange();\n }\n },\n removeBlock: (id) => {\n if (!id) return;\n const { blocks } = get();\n \n const newBlocks = traverseBlocks(blocks, (blocksList) => {\n const filtered = blocksList.filter(b => b.id !== id);\n if (filtered.length !== blocksList.length) {\n return { newList: filtered, found: true };\n }\n return { newList: blocksList, found: false };\n });\n\n if (newBlocks !== blocks) {\n set({ blocks: newBlocks });\n const { onBlocksChange } = get();\n if (onBlocksChange) onBlocksChange();\n }\n },\n moveBlock: (id, direction) => {\n const { blocks } = get();\n\n const newBlocks = traverseBlocks(blocks, (blocksList) => {\n const index = blocksList.findIndex(b => b.id === id);\n if (index !== -1) {\n const targetIndex = direction === \"up\" ? index - 1 : index + 1;\n if (targetIndex >= 0 && targetIndex < blocksList.length) {\n const newBlocksList = [...blocksList];\n [newBlocksList[index], newBlocksList[targetIndex]] = [\n newBlocksList[targetIndex],\n newBlocksList[index],\n ];\n return { newList: newBlocksList, found: true };\n }\n }\n return { newList: blocksList, found: false };\n });\n\n if (newBlocks !== blocks) {\n set({ blocks: newBlocks });\n const { onBlocksChange } = get();\n if (onBlocksChange) onBlocksChange();\n }\n },\n }));\n}\n\n/**\n * Recursively ensures all blocks and nested children have unique IDs\n */\nexport function ensureIds(blocks: BlockData[]): BlockData[] {\n if (!Array.isArray(blocks)) return [];\n\n return blocks.map((block) => {\n const updatedBlock = {\n ...block,\n id: block.id || Math.random().toString(36).substr(2, 9),\n };\n\n if (updatedBlock.children && Array.isArray(updatedBlock.children)) {\n updatedBlock.children = ensureIds(updatedBlock.children);\n }\n\n if (updatedBlock.data?.columnData && Array.isArray(updatedBlock.data.columnData)) {\n updatedBlock.data = {\n ...updatedBlock.data,\n columnData: updatedBlock.data.columnData.map((col: Record<string, unknown>) => ({\n ...col,\n children: col.children ? ensureIds(col.children) : col.children,\n })),\n };\n }\n\n return updatedBlock;\n });\n}\n\n// Create new block helper (pure function, no store needed)\nexport function createNewBlock(type: string): BlockData {\n const defaultData = getDefaultData(type);\n const { options, children, ...data } = defaultData;\n return {\n id: Math.random().toString(36).substr(2, 9),\n type,\n name: \"\",\n data,\n options,\n children,\n order: Date.now(),\n };\n}\n\nfunction getDefaultData(type: string): Record<string, unknown> {\n const defaults: Record<string, unknown> = {\n heading: { level: 1, text: \"\" },\n \"heading-subheading\": { heading: \"\", subheading: \"\" },\n hero: { isMultiScreen: false },\n card: { title: \"\", description: \"\", icon: \"\", link: \"\", linkText: \"\", isMultiCard: false },\n paragraph: { text: \"\" },\n divider: {},\n callout: { text: \"\", variant: \"info\" },\n image: { src: \"\", alt: \"\", caption: \"\" },\n video: { src: \"\", title: \"\" },\n list: { type: \"unordered\", items: \"\" },\n code: { language: \"plaintext\", code: \"\" },\n link: { url: \"\", text: \"\" },\n table: { rows: 3, columns: 3, content: \"\" },\n quote: { text: \"\", author: \"\" },\n file: { filename: \"\", url: \"\" },\n columns: { columns: 2, direction: \"horizontal\" },\n vstack: { direction: \"vertical\", gap: \"md\" },\n container: {\n options: {\n backgroundColor: \"transparent\",\n padding: \"md\",\n width: \"full\",\n margin: \"none\",\n minHeight: \"none\",\n borderRadius: \"none\",\n },\n children: [],\n },\n button: { text: \"Button\", url: \"\", variant: \"primary\", size: \"md\" },\n accordion: { title: \"Accordion Item\", content: \"\" },\n gallery: { images: [] },\n tabs: { tabs: [{ label: \"Tab 1\", content: \"\" }] },\n };\n return defaults[type] || {};\n}\n\n// React hooks that read from context\nexport function useBlocksStore(): BlocksStore {\n const store = useContext(BlocksContext);\n if (!store) {\n throw new Error(\"useBlocksStore must be used within a BlocksContext.Provider\");\n }\n return useStore(store);\n}\n\nexport function useBlockById(id: string): BlockData | undefined {\n const store = useContext(BlocksContext);\n if (!store) return undefined;\n return useStore(store, (state) => {\n const findRecursive = (blocksList: BlockData[]): BlockData | undefined => {\n for (const b of blocksList) {\n if (b.id === id) return b;\n if (b.children && b.children.length > 0) {\n const found = findRecursive(b.children);\n if (found) return found;\n }\n if (b.data?.columnData) {\n for (const col of b.data.columnData) {\n if (col && col.children && col.children.length > 0) {\n const found = findRecursive(col.children);\n if (found) return found;\n }\n }\n }\n }\n return undefined;\n };\n return findRecursive(state.blocks);\n });\n}\n\nexport function useBlockCount(): number {\n const store = useContext(BlocksContext);\n if (!store) return 0;\n return useStore(store, (state) => state.blocks.length);\n}\n\nexport function useBlockActions() {\n const store = useContext(BlocksContext);\n if (!store) {\n throw new Error(\"useBlockActions must be used within a BlocksContext.Provider\");\n }\n return {\n updateBlock: (id: string, data: Partial<BlockData>) => store.getState().updateBlock(id, data),\n removeBlock: (id: string) => store.getState().removeBlock(id),\n moveBlock: (id: string, direction: \"up\" | \"down\") => store.getState().moveBlock(id, direction),\n };\n}\n\n/**\n * Generic tree traversal helper for blocks\n */\nexport function traverseBlocks(\n blocks: BlockData[],\n action: (blocksList: BlockData[]) => { newList: BlockData[]; found: boolean }\n): BlockData[] {\n const { newList, found } = action(blocks);\n if (found) return newList;\n\n let overallChanged = false;\n const deepUpdatedList = blocks.map((block) => {\n let updatedBlock = { ...block };\n let blockChanged = false;\n\n // Handle children\n if (block.children && block.children.length > 0) {\n const updatedChildren = traverseBlocks(block.children, action);\n if (updatedChildren !== block.children) {\n updatedBlock.children = updatedChildren;\n blockChanged = true;\n }\n }\n\n // Handle columnData\n if (block.data?.columnData && Array.isArray(block.data.columnData)) {\n const updatedColumnData = block.data.columnData.map((col: Record<string, unknown>) => {\n if (col.children && col.children.length > 0) {\n const updatedColChildren = traverseBlocks(col.children, action);\n if (updatedColChildren !== col.children) {\n return { ...col, children: updatedColChildren };\n }\n }\n return col;\n });\n\n if (updatedColumnData.some((col: Record<string, unknown>, i: number) => col !== block.data.columnData[i])) {\n updatedBlock.data = { ...updatedBlock.data, columnData: updatedColumnData };\n blockChanged = true;\n }\n }\n\n if (blockChanged) overallChanged = true;\n return blockChanged ? updatedBlock : block;\n });\n\n return overallChanged ? deepUpdatedList : blocks;\n}\n","import React, { type ReactNode } from \"react\";\nimport { useDraggable } from \"@dnd-kit/core\";\nimport { SlidePanel } from \"./SlidePanel\";\n\ninterface BlockDrawerProps {\n open: boolean;\n onClose: () => void;\n onSelect: (blockType: string) => void;\n children?: ReactNode;\n}\n\nexport function BlockDrawer({\n open,\n onClose,\n onSelect,\n children,\n}: BlockDrawerProps) {\n if (!open) return null;\n\n return (\n <SlidePanel open={open} onClose={onClose} title=\"Insert Block\" width=\"md\">\n <p className=\"text-sm text-[var(--kyro-text-muted)] mb-4\">\n Drag blocks into the editor or click to insert\n </p>\n {children}\n </SlidePanel>\n );\n}\n\n// Draggable wrapper for block types in the drawer\nexport function DraggableBlockType({\n block,\n onSelect,\n children,\n}: {\n block: { type: string; label: string; icon: React.ReactNode; description: string };\n onSelect: (type: string) => void;\n children?: ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id: `drawer-${block.type}`,\n data: { source: \"drawer\", blockType: block.type },\n });\n\n return (\n <div\n ref={setNodeRef}\n {...listeners}\n {...attributes}\n onClick={() => onSelect(block.type)}\n className={`flex flex-col items-center text-center gap-1 p-2 rounded-md border border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/60 hover:bg-[var(--kyro-surface-accent)]/30 transition-all cursor-pointer group ${isDragging ? \"opacity-50 border-[var(--kyro-primary)]\" : \"\"\n }`}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n <div className=\"w-6 h-6 flex items-center justify-center rounded group-hover:bg-[var(--kyro-primary)]/10 group-hover:text-[var(--kyro-primary)] transition-all duration-300\">\n {children || (\n <span className=\"text-[var(--kyro-text-muted)]\">\n {/* Default icon */}\n </span>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs font-medium tracking-tight text-[var(--kyro-text-primary)] leading-tight\">\n {block.label}\n </div>\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] mt-0.5 leading-tight\">\n {block.description}\n </div>\n </div>\n </div>\n );\n}\n\nexport interface BlockType {\n type: string;\n label: string;\n icon: string;\n}\n","import React from \"react\";\n\ninterface HeadingFieldProps {\n text?: string;\n onChange: (field: string, value: string) => void;\n compact?: boolean;\n}\n\nexport const HeadingField: React.FC<HeadingFieldProps> = ({\n text = \"\",\n onChange,\n compact = false,\n}) => {\n const inputClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n return (\n <div className={compact ? \"\" : \"space-y-3\"}>\n <input\n type=\"text\"\n value={text}\n onChange={(e) => onChange(\"text\", e.target.value)}\n className={inputClass}\n placeholder=\"Enter heading text...\"\n />\n </div>\n );\n};\n\nexport default HeadingField;\n","import React from \"react\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { useBlockActions } from \"../fields/extensions/blocksStore\";\n\ninterface BlockWrapperProps {\n id: string;\n type: string;\n label?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const BlockWrapper: React.FC<BlockWrapperProps> = ({\n id,\n type,\n label,\n children,\n className = \"\",\n}) => {\n const { moveBlock, removeBlock } = useBlockActions();\n\n return (\n <div className={`block-${type} border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group bg-[var(--kyro-surface)] transition-all hover:border-[var(--kyro-primary)]/30 ${className}`}>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[10px] font-bold text-[var(--kyro-text-muted)] tracking-wider\">\n {label || type}\n </span>\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded text-[var(--kyro-text-muted)] hover:text-[var(--kyro-primary)]\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded text-[var(--kyro-text-muted)] hover:text-[var(--kyro-primary)]\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(id)}\n className=\"p-1 hover:bg-[var(--kyro-error)]/10 rounded text-[var(--kyro-error)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <div className=\"block-content\">\n {children}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { HeadingField } from \"../fields/HeadingField\";\nimport { BlockWrapper } from \"./BlockWrapper\";\n\nexport const HeadingBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock } = useBlockActions();\n\n const data = blockData?.data || block.data || {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <BlockWrapper id={block.id} type=\"heading\" label=\"Heading\">\n <HeadingField text={data.text || \"\"} onChange={handleChange} compact />\n </BlockWrapper>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { BlockWrapper } from \"./BlockWrapper\";\n\nexport const ParagraphBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock } = useBlockActions();\n\n const data = blockData?.data || block.data || {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <BlockWrapper id={block.id} type=\"paragraph\" label=\"Paragraph\">\n <textarea\n value={data.text || \"\"}\n onChange={(e) => handleChange(\"text\", e.target.value)}\n className=\"w-full px-3 py-3 border border-[var(--kyro-border)] rounded bg-[var(--kyro-surface)] text-[var(--kyro-text-primary)] text-sm min-h-[100px] resize-none\"\n placeholder=\"Enter paragraph text...\"\n />\n </BlockWrapper>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { UploadField } from \"../fields/UploadField\";\n\nexport const ImageBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n const data = blockData?.data || block.data || {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <div className=\"block-image border border-[var(--kyro-border)] rounded-lg p-4 mb-4 relative group\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n Image\n </span>\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n <div className=\"space-y-3\">\n <div>\n <label className=\"text-xs font-medium text-[var(--kyro-text-muted)] mb-1 block\">\n Image Asset\n </label>\n <UploadField\n field={{ label: \"Image Asset\", name: \"src\", maxCount: 1 }}\n value={data.src}\n onChange={(value) => handleChange(\"src\", value)}\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-[var(--kyro-text-muted)] mb-1 block\">\n Alt Text\n </label>\n <input\n type=\"text\"\n value={data.alt || \"\"}\n onChange={(e) => handleChange(\"alt\", e.target.value)}\n className=\"w-full px-3 py-2 border border-[var(--kyro-border)] rounded bg-[var(--kyro-surface)] text-[var(--kyro-text-primary)] text-sm\"\n placeholder=\"Alternative text...\"\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-[var(--kyro-text-muted)] mb-1 block\">\n Caption\n </label>\n <input\n type=\"text\"\n value={data.caption || \"\"}\n onChange={(e) => handleChange(\"caption\", e.target.value)}\n className=\"w-full px-3 py-2 border border-[var(--kyro-border)] rounded bg-[var(--kyro-surface)] text-[var(--kyro-text-primary)] text-sm\"\n placeholder=\"Image caption...\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { UploadField } from \"./UploadField\";\n\ninterface VideoFieldProps {\n src?: string;\n title?: string;\n onChange: (field: string, value: string) => void;\n onUploadChange?: (value: unknown) => void;\n compact?: boolean;\n}\n\nexport const VideoField: React.FC<VideoFieldProps> = ({\n src = \"\",\n title = \"\",\n onChange,\n onUploadChange,\n compact = false,\n}) => {\n const isExternalUrl =\n src.includes(\"youtube.com\") ||\n src.includes(\"vimeo.com\") ||\n src.includes(\"youtu.be\");\n\n if (compact) {\n return (\n <div className=\"space-y-2\">\n <input\n type=\"url\"\n value={src}\n onChange={(e) => onChange(\"src\", e.target.value)}\n className=\"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent font-mono text-xs\"\n placeholder=\"MP4 URL, YouTube, or Vimeo link...\"\n />\n <input\n type=\"text\"\n value={title}\n onChange={(e) => onChange(\"title\", e.target.value)}\n className=\"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n placeholder=\"Video title (optional)...\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n <UploadField\n field={{ label: \"Video Asset\", name: \"src\", maxCount: 1 }}\n value={src}\n onChange={onUploadChange || ((v) => onChange(\"src\", v))}\n />\n <span className=\"text-xs text-[var(--kyro-text-muted)]\">\n or paste a URL\n </span>\n <input\n type=\"url\"\n value={src}\n onChange={(e) => onChange(\"src\", e.target.value)}\n className=\"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent font-mono text-xs\"\n placeholder=\"MP4 URL, YouTube, or Vimeo link...\"\n />\n <input\n type=\"text\"\n value={title}\n onChange={(e) => onChange(\"title\", e.target.value)}\n className=\"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n placeholder=\"Video title (optional)...\"\n />\n </div>\n );\n};\n\nexport default VideoField;\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { VideoField } from \"../fields/VideoField\";\n\nexport const VideoBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = blockData?.data ?? block.data ?? {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <div className=\"block-video border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n Video\n </span>\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <VideoField\n src={data.src || \"\"}\n title={data.title || \"\"}\n onChange={handleChange}\n onUploadChange={(v) => handleChange(\"src\", v)}\n compact\n />\n </div>\n );\n};\n","import React from \"react\";\n\ninterface ListFieldProps {\n items?: string[];\n onChange: (items: string[]) => void;\n compact?: boolean;\n}\n\nexport const ListField: React.FC<ListFieldProps> = ({\n items = [],\n onChange,\n compact = false,\n}) => {\n const [inputValue, setInputValue] = React.useState(\"\");\n\n const handleAdd = () => {\n if (inputValue.trim()) {\n onChange([...items, inputValue.trim()]);\n setInputValue(\"\");\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleAdd();\n }\n };\n\n const handleRemove = (index: number) => {\n onChange(items.filter((_, i) => i !== index));\n };\n\n const inputClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded-md bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n return (\n <div className={compact ? \"space-y-1.5\" : \"space-y-2\"}>\n {items.length === 0 ? (\n <div className=\"text-center py-4 text-[var(--kyro-text-muted)] text-sm border border-dashed border-[var(--kyro-border)] rounded-md\">\n No items. Type below to add.\n </div>\n ) : (\n <div className=\"space-y-1\">\n {items.map((item, index) => (\n <div key={index} className=\"flex items-center gap-2 group/item\">\n <span className=\"text-sm text-[var(--kyro-text-primary)] flex-1\">\n • {item}\n </span>\n <button\n type=\"button\"\n onClick={() => handleRemove(index)}\n className=\"opacity-0 group-hover/item:opacity-100 p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-error)] transition-opacity\"\n >\n ×\n </button>\n </div>\n ))}\n </div>\n )}\n <input\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className={inputClass}\n placeholder=\"Type and press Enter to add...\"\n />\n </div>\n );\n};\n\nexport default ListField;\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { ListField } from \"../fields/ListField\";\n\nexport const ListBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = blockData?.data || block.data || {};\n const listItems = Array.isArray(data.items) ? data.items : [];\n\n const handleChange = (items: string[]) => {\n updateBlock(block.id, { data: { ...data, items } });\n };\n\n return (\n <div className=\"block-list border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n List\n </span>\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <ListField items={listItems} onChange={handleChange} compact />\n </div>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X, Code2 } from \"../ui/icons\";\nimport { CodeField } from \"../fields/CodeField\";\n\nexport const CodeBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n const data = blockData?.data ?? block.data ?? {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <div className=\"group/block relative border border-[var(--kyro-border)] rounded-2xl p-6 mb-6 transition-all duration-300 bg-[var(--kyro-surface)] hover:border-[var(--kyro-primary)]/20\">\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-9 h-9 rounded-xl bg-[var(--kyro-primary)]/10 flex items-center justify-center text-[var(--kyro-primary)] transition-transform group-hover/block:scale-110\">\n <Code2 className=\"w-5 h-5\" />\n </div>\n <div>\n <h4 className=\"text-sm font-bold tracking-tight text-[var(--kyro-text-primary)]\">Code Snippet</h4>\n <p className=\"text-[10px] font-medium text-[var(--kyro-text-muted)] tracking-widest\">\n Block Editor • {data.language || \"javascript\"}\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-1.5 opacity-0 group-hover/block:opacity-100 transition-all translate-x-2 group-hover/block:translate-x-0\">\n <div className=\"flex bg-[var(--kyro-surface-accent)]/50 p-1 rounded-xl border border-[var(--kyro-border)]\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1.5 hover:bg-[var(--kyro-surface)] rounded-lg transition-all text-[var(--kyro-text-muted)] hover:text-[var(--kyro-primary)]\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-4 h-4 rotate-[-90deg]\" />\n </button>\n <div className=\"w-px h-4 bg-[var(--kyro-border)] mx-1 self-center\" />\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1.5 hover:bg-[var(--kyro-danger-bg)] rounded-lg transition-all text-[var(--kyro-text-muted)] hover:text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-6\">\n <CodeField\n field={{\n type: \"code\",\n name: \"code\",\n label: \"Source Code\",\n language: data.language || \"javascript\"\n }}\n value={data.code || \"\"}\n onChange={(val) => handleChange(\"code\", val)}\n />\n\n <div className=\"flex items-center gap-4 bg-[var(--kyro-surface-accent)]/20 p-4 rounded-xl border border-[var(--kyro-border)]/50\">\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-muted)] mb-2 block\">\n Syntax Highlighting\n </label>\n <div className=\"relative\">\n <select\n value={data.language || \"javascript\"}\n onChange={(e) => handleChange(\"language\", e.target.value)}\n className=\"w-full pl-4 pr-10 py-2.5 bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-xl text-xs font-medium text-[var(--kyro-text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--kyro-primary)]/20 focus:border-[var(--kyro-primary)] transition-all appearance-none cursor-pointer\"\n >\n <option value=\"plaintext\">Plain Text</option>\n <option value=\"javascript\">JavaScript</option>\n <option value=\"typescript\">TypeScript</option>\n <option value=\"python\">Python</option>\n <option value=\"json\">JSON</option>\n <option value=\"html\">HTML</option>\n <option value=\"css\">CSS</option>\n <option value=\"sql\">SQL</option>\n <option value=\"rust\">Rust</option>\n <option value=\"markdown\">Markdown</option>\n </select>\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-[var(--kyro-text-muted)]\">\n <ChevronRight className=\"w-4 h-4 rotate-90\" />\n </div>\n </div>\n </div>\n\n <div className=\"hidden sm:block w-px h-10 bg-[var(--kyro-border)]\" />\n\n <div className=\"hidden sm:flex flex-col justify-center\">\n <span className=\"text-[10px] font-bold tracking-widest text-[var(--kyro-text-muted)] mb-2\">\n Status\n </span>\n <div className=\"flex items-center gap-2 px-3 py-2 bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-xl\">\n <div className=\"w-2 h-2 rounded-full bg-blue-500 animate-pulse\" />\n <span className=\"text-[10px] font-medium text-[var(--kyro-text-primary)] tracking-wide\">EDITING</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { UploadField } from \"../fields/UploadField\";\n\nexport const FileBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = blockData?.data ?? block.data ?? {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <div className=\"block-file border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n File\n </span>\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <UploadField\n field={{ label: \"File\", name: \"file\", maxCount: 1 }}\n value={data.file}\n onChange={(v) => handleChange(\"file\", v)}\n />\n </div>\n );\n};\n","import React from \"react\";\nimport { ChevronDown, ChevronUp, Plus, X } from \"../ui/icons\";\n\ninterface AccordionItem {\n title: string;\n content: string;\n}\n\ninterface AccordionFieldProps {\n items?: AccordionItem[];\n onChange: (items: AccordionItem[]) => void;\n compact?: boolean;\n}\n\nexport const AccordionField: React.FC<AccordionFieldProps> = ({\n items = [],\n onChange,\n compact = false,\n}) => {\n const [openIndex, setOpenIndex] = React.useState<number | null>(0);\n\n const handleTitleChange = (index: number, value: string) => {\n const newItems = [...items];\n newItems[index] = { ...newItems[index], title: value };\n onChange(newItems);\n };\n\n const handleContentChange = (index: number, value: string) => {\n const newItems = [...items];\n newItems[index] = { ...newItems[index], content: value };\n onChange(newItems);\n };\n\n const handleRemove = (index: number) => {\n const newItems = items.filter((_, i) => i !== index);\n onChange(newItems);\n if (openIndex === index) setOpenIndex(null);\n else if (openIndex !== null && openIndex > index)\n setOpenIndex(openIndex - 1);\n };\n\n const handleAdd = () => {\n onChange([...items, { title: `Item ${items.length + 1}`, content: \"\" }]);\n setOpenIndex(items.length);\n };\n\n const baseInputClass =\n \"w-full px-3 py-2 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n const smallInputClass =\n \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n if (compact) {\n return (\n <div className=\"space-y-2\">\n {items.length === 0 ? (\n <div className=\"text-center py-4 text-[var(--kyro-text-muted)] text-sm border border-dashed border-[var(--kyro-border)] rounded-md\">\n No items. Click \"Add Item\" to create one.\n </div>\n ) : (\n <div className=\"space-y-1.5\">\n {items.map((item: AccordionItem, index: number) => {\n const isOpen = openIndex === index;\n return (\n <div\n key={index}\n className=\"border border-[var(--kyro-border)] rounded-lg overflow-hidden group\"\n >\n <button\n type=\"button\"\n onClick={() => setOpenIndex(isOpen ? null : index)}\n className=\"w-full flex items-center justify-between p-2.5 bg-[var(--kyro-surface-accent)] hover:bg-[var(--kyro-sidebar-active)]/10 transition-colors\"\n >\n <span className=\"text-sm font-medium text-[var(--kyro-text-primary)] truncate\">\n {item.title || `Item ${index + 1}`}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(index);\n }}\n className=\"opacity-0 group-hover:opacity-100 p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-error)] transition-opacity\"\n title=\"Remove\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n {isOpen ? (\n <ChevronUp className=\"w-4 h-4 text-[var(--kyro-text-muted)]\" />\n ) : (\n <ChevronDown className=\"w-4 h-4 text-[var(--kyro-text-muted)]\" />\n )}\n </div>\n </button>\n {isOpen && (\n <div className=\"p-2.5 bg-[var(--kyro-surface)] space-y-2\">\n <input\n type=\"text\"\n value={item.title || \"\"}\n onChange={(e) =>\n handleTitleChange(index, e.target.value)\n }\n onClick={(e) => e.stopPropagation()}\n className={smallInputClass}\n placeholder=\"Item title...\"\n />\n <textarea\n value={item.content || \"\"}\n onChange={(e) =>\n handleContentChange(index, e.target.value)\n }\n onClick={(e) => e.stopPropagation()}\n className={`${smallInputClass} min-h-[60px] resize-none`}\n placeholder=\"Item content...\"\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n <button\n type=\"button\"\n onClick={handleAdd}\n className=\"flex items-center justify-center gap-1.5 w-full px-3 py-2 text-xs font-medium rounded-lg border border-dashed border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:border-[var(--kyro-sidebar-active)] hover:text-[var(--kyro-text-primary)] transition-colors\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n Add Item\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n {items.length === 0 ? (\n <div className=\"text-center py-4 text-[var(--kyro-text-muted)] text-sm border border-dashed border-[var(--kyro-border)] rounded-md\">\n No items. Click \"Add Item\" to create one.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {items.map((item: AccordionItem, index: number) => {\n const isOpen = openIndex === index;\n return (\n <div\n key={index}\n className=\"border border-[var(--kyro-border)] rounded-lg overflow-hidden group\"\n >\n <button\n type=\"button\"\n onClick={() => setOpenIndex(isOpen ? null : index)}\n className=\"w-full flex items-center justify-between p-3 bg-[var(--kyro-surface-accent)] hover:bg-[var(--kyro-sidebar-active)]/10 transition-colors\"\n >\n <span className=\"text-sm font-medium text-[var(--kyro-text-primary)] truncate\">\n {item.title || `Item ${index + 1}`}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(index);\n }}\n className=\"opacity-0 group-hover:opacity-100 p-1.5 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-error)] transition-opacity\"\n title=\"Remove\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n {isOpen ? (\n <ChevronUp className=\"w-4 h-4 text-[var(--kyro-text-muted)]\" />\n ) : (\n <ChevronDown className=\"w-4 h-4 text-[var(--kyro-text-muted)]\" />\n )}\n </div>\n </button>\n {isOpen && (\n <div className=\"p-3 bg-[var(--kyro-surface)] space-y-2\">\n <input\n type=\"text\"\n value={item.title || \"\"}\n onChange={(e) => handleTitleChange(index, e.target.value)}\n className={baseInputClass}\n placeholder=\"Item title...\"\n />\n <textarea\n value={item.content || \"\"}\n onChange={(e) =>\n handleContentChange(index, e.target.value)\n }\n className={`${baseInputClass} min-h-[60px] resize-none`}\n placeholder=\"Item content...\"\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n <button\n type=\"button\"\n onClick={handleAdd}\n className=\"flex items-center justify-center gap-1.5 w-full px-3 py-2 text-xs font-medium rounded-lg border border-dashed border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:border-[var(--kyro-sidebar-active)] hover:text-[var(--kyro-text-primary)] transition-colors\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n Add Item\n </button>\n </div>\n );\n};\n\nexport default AccordionField;\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { AccordionField } from \"../fields/AccordionField\";\n\nexport const AccordionBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = blockData?.data ?? block.data ?? {};\n const items = Array.isArray(data.items) ? data.items : [];\n\n const handleChange = (items: Record<string, unknown>[]) => {\n updateBlock(block.id, { data: { ...data, items } });\n };\n\n return (\n <div className=\"block-accordion border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n Accordion\n </span>\n <span className=\"text-[10px] text-[var(--kyro-text-muted)]\">\n ({items.length} items)\n </span>\n </div>\n <div className=\"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <AccordionField items={items} onChange={handleChange} compact />\n </div>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X, AlignLeft } from \"../ui/icons\";\nimport { RichTextField } from \"../fields\";\n\nexport const RichTextBlock: React.FC<{ block: any; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = (blockData?.data || block.data || {}) as Record<string, any>;\n\n const handleChange = (newValue: unknown) => {\n updateBlock(block.id, { data: { ...data, content: newValue } });\n };\n\n return (\n <div className=\"block-richtext border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <AlignLeft className=\"w-3.5 h-3.5 text-[var(--kyro-primary)]\" />\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n Rich Text\n </span>\n </div>\n <div className=\"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <RichTextField\n field={{ name: \"content\", label: \"Content\", type: \"richtext\" } as any}\n value={data.content}\n onChange={handleChange}\n />\n </div>\n );\n};\n","import React from \"react\";\n\ninterface HeroFieldProps {\n heading?: string;\n subheading?: string;\n ctaText?: string;\n ctaUrl?: string;\n onChange: (field: string, value: string) => void;\n compact?: boolean;\n}\n\nexport const HeroField: React.FC<HeroFieldProps> = ({\n heading = \"\",\n subheading = \"\",\n ctaText = \"\",\n ctaUrl = \"\",\n onChange,\n compact = false,\n}) => {\n const inputClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n const textareaClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] min-h-[50px] resize-none focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] min-h-[80px] resize-none focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n if (compact) {\n return (\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={heading}\n onChange={(e) => onChange(\"heading\", e.target.value)}\n className={`${inputClass} font-bold text-base`}\n placeholder=\"Hero heading...\"\n />\n <textarea\n value={subheading}\n onChange={(e) => onChange(\"subheading\", e.target.value)}\n className={textareaClass}\n placeholder=\"Hero subheading...\"\n />\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={ctaText}\n onChange={(e) => onChange(\"ctaText\", e.target.value)}\n className=\"flex-1 px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n placeholder=\"CTA text...\"\n />\n <span className=\"text-[var(--kyro-text-muted)] text-xs\">→</span>\n <input\n type=\"url\"\n value={ctaUrl}\n onChange={(e) => onChange(\"ctaUrl\", e.target.value)}\n className=\"flex-1 px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent font-mono text-xs\"\n placeholder=\"https://...\"\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n <input\n type=\"text\"\n value={heading}\n onChange={(e) => onChange(\"heading\", e.target.value)}\n className={`${inputClass} font-bold text-base`}\n placeholder=\"Hero heading...\"\n />\n <textarea\n value={subheading}\n onChange={(e) => onChange(\"subheading\", e.target.value)}\n className={textareaClass}\n placeholder=\"Hero subheading...\"\n />\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={ctaText}\n onChange={(e) => onChange(\"ctaText\", e.target.value)}\n className=\"flex-1 px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n placeholder=\"CTA text...\"\n />\n <span className=\"text-[var(--kyro-text-muted)] text-xs\">→</span>\n <input\n type=\"url\"\n value={ctaUrl}\n onChange={(e) => onChange(\"ctaUrl\", e.target.value)}\n className=\"flex-1 px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent font-mono text-xs\"\n placeholder=\"https://...\"\n />\n </div>\n </div>\n );\n};\n\nexport default HeroField;\n","import React from \"react\";\nimport type { Field } from \"@kyro-cms/core/client\";\n\ninterface GroupLayoutProps {\n field: Field;\n value: Record<string, unknown> | null;\n onChange: (value: Record<string, unknown>) => void;\n renderField: (\n field: Field,\n parentData: Record<string, unknown>,\n onChange: (value: unknown) => void,\n ) => React.ReactNode;\n}\n\nexport function GroupLayout({\n field,\n value,\n onChange,\n renderField,\n}: GroupLayoutProps) {\n const groupData = value || {};\n\n return (\n <div className=\"kyro-form-group border border-[var(--kyro-border)] rounded-[var(--kyro-radius-lg)] p-6 bg-[var(--kyro-surface-accent)]/30\">\n <h3 className=\"text-sm font-bold tracking-widest text-[var(--kyro-text-primary)] mb-6 border-b border-[var(--kyro-border)] pb-2 inline-block\">\n {field.label || field.name}\n </h3>\n <div className={field.admin?.inline ? \"flex items-start gap-4\" : \"space-y-6\"}>\n {(field as Field & { fields?: Field[] }).fields.map((f: Field) =>\n renderField(f, groupData, onChange),\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { Field } from \"@kyro-cms/core/client\";\nimport RelationshipField from \"./RelationshipField\";\nimport { ChevronDown, ChevronUp } from \"../ui/icons\";\n\nconst SIMPLE_TYPES = new Set([\"text\", \"textarea\", \"number\", \"checkbox\", \"select\", \"radio\", \"color\", \"email\", \"password\", \"code\", \"markdown\", \"upload\"]);\n\ninterface ArrayLayoutProps {\n field: Field;\n value: unknown[];\n onChange: (value: unknown[]) => void;\n renderField: (\n field: Field,\n parentData: Record<string, unknown>,\n onChange: (value: unknown) => void,\n ) => React.ReactNode;\n disabled?: boolean;\n}\n\nfunction isCompactArray(field: Field): boolean {\n const subFields = (field as Field & { fields?: Field[] }).fields || [];\n if (subFields.length === 0 || subFields.length > 4) return false;\n return subFields.every((f: Field) => SIMPLE_TYPES.has(f.type));\n}\n\nexport function ArrayLayout({\n field,\n value,\n onChange,\n renderField,\n disabled,\n}: ArrayLayoutProps) {\n const items = Array.isArray(value) ? value : [];\n const fields = (field as Field & { fields?: { name?: string; type?: string; relationTo?: string; label?: string }[] }).fields || [];\n const firstField = fields[0];\n const labelField = firstField?.name || \"user\";\n const isRelationship = firstField?.type === \"relationship\";\n const [openIndex, setOpenIndex] = React.useState<number | null>(0);\n\n function getItemLabel(item: Record<string, unknown>): string {\n for (const key of [\"label\", \"title\", \"name\"]) {\n const val = item[key];\n if (val && typeof val === \"string\") return val;\n }\n for (const f of fields) {\n if (f.type === \"text\" || f.type === \"textarea\") {\n const val = item[f.name!];\n if (val && typeof val === \"string\") return val;\n }\n }\n return \"\";\n }\n const compact = isCompactArray(field);\n\n return (\n <div className=\"kyro-form-field\">\n <label className=\"kyro-form-label\">{field.label || field.name}</label>\n {isRelationship ? (\n <RelationshipField\n field={{\n name: labelField,\n relationTo: (field as Field & { fields?: { relationTo?: string }[] }).fields?.[0]?.relationTo || \"\",\n hasMany: true,\n label: (field as Field & { fields?: { label?: string }[] }).fields?.[0]?.label,\n }}\n value={(items as Record<string, unknown>[]).map((i) => i[labelField]).filter(Boolean)}\n onChange={(newValue) => {\n const newItems = (newValue || []).map((id: string) => ({\n [labelField]: id,\n }));\n onChange(newItems);\n }}\n disabled={disabled}\n />\n ) : compact ? (\n <div className=\"kyro-form-array kyro-form-array--compact border border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)]/30 rounded-md overflow-hidden\">\n {(items as Record<string, unknown>[]).map((item, index) => (\n <div\n key={index}\n className=\"flex items-start gap-2 px-3 py-1.5 border-b border-[var(--kyro-border)] last:border-b-0 hover:bg-[var(--kyro-sidebar-active)]/5 transition-colors\"\n >\n <span className=\"text-[10px] font-bold text-[var(--kyro-text-muted)] pt-2 min-w-[18px] text-center\">\n {index + 1}\n </span>\n <div className=\"flex-1 flex items-start gap-1.5 min-w-0\">\n {(field as Field & { fields?: Field[] }).fields.map((f: Field) => {\n return (\n <div key={f.name} className=\"flex-1 min-w-0\">\n {renderField(f, item, (newItem) => {\n const newItems = [...items];\n newItems[index] = newItem;\n onChange(newItems);\n })}\n </div>\n );\n })}\n </div>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(items.filter((_: unknown, i: number) => i !== index))}\n className=\"text-[var(--kyro-text-muted)] hover:text-[var(--kyro-error)] transition-colors disabled:opacity-30 p-0.5 mt-1.5 flex-shrink-0\"\n title=\"Remove\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" /><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n className=\"w-full py-2 border-2 border-dashed border-[var(--kyro-border)] rounded-none text-xs font-bold text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-primary)] hover:border-[var(--kyro-primary)] transition-all disabled:opacity-50\"\n disabled={disabled}\n onClick={() => onChange([...items, {}])}\n >\n + Add Item\n </button>\n </div>\n ) : (\n <div className=\"kyro-form-array border border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)]/30 rounded-md p-3 space-y-4\">\n {(items as Record<string, unknown>[]).map((item, index) => {\n const isOpen = openIndex === index;\n return (\n <div\n key={index}\n className=\"border border-[var(--kyro-border)] rounded-lg overflow-hidden group\"\n >\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setOpenIndex(isOpen ? null : index)}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setOpenIndex(isOpen ? null : index); } }}\n className=\"w-full flex items-center justify-between p-3 bg-[var(--kyro-surface-accent)] hover:bg-[var(--kyro-sidebar-active)]/10 transition-colors cursor-pointer\"\n >\n <span className=\"text-xs font-bold tracking-widest text-[var(--kyro-text-muted)] truncate\">\n {getItemLabel(item) || `Item ${index + 1}`}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n onChange(items.filter((_: unknown, i: number) => i !== index));\n }}\n className=\"text-[11px] font-bold text-[var(--kyro-error)] opacity-0 group-hover:opacity-100 transition-opacity disabled:opacity-30 hover:bg-[var(--kyro-danger-bg)] rounded px-1.5 py-0.5\"\n >\n Remove\n </button>\n {isOpen ? (\n <ChevronUp className=\"w-4 h-4 text-[var(--kyro-text-muted)]\" />\n ) : (\n <ChevronDown className=\"w-4 h-4 text-[var(--kyro-text-muted)]\" />\n )}\n </div>\n </div>\n {isOpen && (\n <div className=\"p-4 bg-[var(--kyro-surface)] space-y-4\">\n {(field as Field & { fields?: Field[] }).fields.map((f: Field) =>\n renderField(f, item, (newItem) => {\n const newItems = [...items];\n newItems[index] = newItem;\n onChange(newItems);\n }),\n )}\n </div>\n )}\n </div>\n );\n })}\n <button\n type=\"button\"\n className=\"w-full py-3 border-2 border-dashed border-[var(--kyro-border)] rounded-lg text-xs font-bold text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-primary)] hover:border-[var(--kyro-primary)] transition-all disabled:opacity-50\"\n disabled={disabled}\n onClick={() => onChange([...items, {}])}\n >\n + Add Item\n </button>\n </div>\n )}\n </div>\n );\n}\n","let _lastChangeSource: \"keystroke\" | \"other\" = \"other\";\n\nexport function getLastChangeSource(): \"keystroke\" | \"other\" {\n return _lastChangeSource;\n}\n\nexport function setChangeSource(source: \"keystroke\" | \"other\"): void {\n _lastChangeSource = source;\n}\n","import React from \"react\";\nimport type { Field } from \"@kyro-cms/core/client\";\nimport { UploadField } from \"./fields/UploadField\";\nimport { CodeField } from \"./fields\";\nimport NumberField from \"./fields/NumberField\";\nimport CheckboxField from \"./fields/CheckboxField\";\nimport SelectField from \"./fields/SelectField\";\nimport DateField from \"./fields/DateField\";\nimport { MarkdownField } from \"./fields/MarkdownField\";\nimport TextField from \"./fields/TextField\";\nimport { BlocksField } from \"./fields/BlocksField\";\nimport { RichTextField } from \"./fields\";\nimport { ListField } from \"./fields/ListField\";\nimport RelationshipField from \"./fields/RelationshipField\";\nimport SecretField from \"./fields/SecretField\";\nimport FieldLayout from \"./fields/FieldLayout\";\nimport ArrayField from \"./fields/ArrayField\";\nimport { GroupLayout } from \"./fields/GroupLayout\";\nimport { ArrayLayout } from \"./fields/ArrayLayout\";\nimport { setChangeSource } from \"../lib/change-source\";\n\ninterface FieldRendererProps {\n field: Field;\n value: any;\n onChange: (value: any) => void;\n error?: string;\n disabled?: boolean;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({\n field,\n value,\n onChange,\n error,\n disabled,\n}) => {\n if (field.hidden === true || field.admin?.hidden === true) return null;\n\n const onChangeKeystroke = (val: unknown) => {\n setChangeSource(\"keystroke\");\n onChange(val);\n };\n\n switch (field.type) {\n case \"text\":\n case \"email\":\n case \"url\":\n return (\n <TextField\n field={field as any}\n value={value}\n onChange={onChangeKeystroke}\n error={error}\n disabled={disabled}\n />\n );\n case \"textarea\":\n return (\n <TextField\n field={{ ...field, variant: \"textarea\" } as any}\n value={value}\n onChange={onChangeKeystroke}\n error={error}\n disabled={disabled}\n />\n );\n case \"password\":\n return (\n <TextField\n field={{ ...field, variant: \"password\" } as any}\n value={value}\n onChange={onChangeKeystroke}\n error={error}\n disabled={disabled}\n />\n );\n case \"secret\":\n return (\n <SecretField\n field={field as any}\n value={value as string | null | undefined}\n onChange={onChange as (value: string) => void}\n error={error}\n disabled={disabled}\n />\n );\n case \"number\":\n return (\n <NumberField\n field={field as any}\n value={value}\n onChange={onChange}\n disabled={disabled}\n error={error}\n />\n );\n case \"checkbox\":\n return (\n <CheckboxField\n field={field as any}\n value={value}\n onChange={onChange}\n disabled={disabled}\n error={error}\n />\n );\n case \"select\":\n return (\n <SelectField\n field={field as any}\n value={value}\n onChange={onChange}\n disabled={disabled}\n error={error}\n />\n );\n case \"date\":\n return (\n <DateField\n field={field as any}\n value={value}\n onChange={onChange}\n disabled={disabled}\n error={error}\n />\n );\n case \"richtext\":\n return (\n <RichTextField\n field={field}\n value={value}\n onChange={onChangeKeystroke}\n disabled={disabled}\n error={error}\n />\n );\n case \"markdown\":\n return (\n <MarkdownField\n field={field as any}\n value={value}\n onChange={onChangeKeystroke}\n disabled={disabled}\n error={error}\n />\n );\n case \"code\":\n return (\n <CodeField\n field={field as any}\n value={value}\n onChange={onChangeKeystroke}\n disabled={disabled}\n error={error}\n />\n );\n case \"image\":\n case \"upload\":\n return (\n <FieldLayout field={field} error={error}>\n <UploadField\n field={field as any}\n value={value}\n onChange={onChange}\n disabled={disabled}\n />\n </FieldLayout>\n );\n case \"relationship\":\n return (\n <RelationshipField\n field={field as any}\n value={value}\n onChange={onChange}\n disabled={disabled}\n error={error}\n />\n );\n case \"list\":\n return (\n <FieldLayout field={field} error={error}>\n <ListField\n items={Array.isArray(value) ? value : []}\n onChange={onChange}\n compact\n />\n </FieldLayout>\n );\n case \"array\":\n return (\n <ArrayLayout\n field={field}\n value={Array.isArray(value) ? value : []}\n onChange={onChange}\n disabled={disabled}\n renderField={(nestedField, parentData, onNestedChange) => {\n const nestedValue = parentData[nestedField.name];\n return (\n <FieldRenderer\n key={nestedField.name}\n field={nestedField}\n value={nestedValue}\n onChange={(val) => {\n onNestedChange({\n ...parentData,\n [nestedField.name]: val,\n });\n }}\n disabled={disabled}\n error={error}\n />\n );\n }}\n />\n );\n case \"blocks\":\n return (\n <BlocksField\n field={field as any}\n value={value}\n onChange={onChangeKeystroke}\n disabled={disabled}\n error={error}\n />\n );\n case \"group\":\n return (\n <GroupLayout\n field={field}\n value={value as Record<string, unknown> | null}\n onChange={onChange}\n renderField={(nestedField, parentData, onNestedChange) => {\n const nestedValue = parentData[nestedField.name];\n return (\n <FieldRenderer\n key={nestedField.name}\n field={nestedField}\n value={nestedValue}\n onChange={(val) => {\n onNestedChange({\n ...parentData,\n [nestedField.name]: val,\n });\n }}\n disabled={disabled}\n error={error}\n />\n );\n }}\n />\n );\n case \"color\":\n return (\n <FieldLayout field={field} error={error}>\n <div className=\"flex items-center gap-3\">\n <input\n type=\"color\"\n value={value || \"#000000\"}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n className=\"h-10 w-14 p-1 cursor-pointer bg-[var(--kyro-input-bg)] border border-[var(--kyro-input-border)] rounded-lg\"\n />\n <input\n type=\"text\"\n className=\"kyro-form-input font-mono \"\n value={value || \"\"}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n placeholder=\"#000000\"\n />\n </div>\n </FieldLayout>\n );\n default:\n return (\n <div className=\"p-4 bg-amber-50 border border-amber-200 rounded-lg text-amber-800 text-xs italic\">\n Field type \"{field.type}\" is not yet supported in this renderer.\n </div>\n );\n }\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { blockTheme } from \"../fields/extensions/blockComponents\";\nimport { SlidePanel } from \"../ui/SlidePanel\";\nimport { ChildBlocksTree } from \"./ChildBlocksTree\";\nimport { FieldRenderer } from \"../FieldRenderer\";\n\ninterface BlockEditModalProps {\n block: Record<string, unknown>;\n blockSchema?: Record<string, any>;\n onClose: () => void;\n}\n\nexport const BlockEditModal: React.FC<BlockEditModalProps> = ({\n block,\n blockSchema,\n onClose,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock } = useBlockActions();\n const data = blockData?.data || block.data || {};\n const children = blockData?.children || block.children || [];\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n const handleUpdateChildren = (newChildren: Record<string, unknown>[]) => {\n updateBlock(block.id, { children: newChildren });\n };\n\n const renderFields = () => {\n // If a schema is present, render all fields dynamically using FieldRenderer\n if (blockSchema && Array.isArray(blockSchema.fields)) {\n return (\n <div className=\"space-y-4 pt-2\">\n {blockSchema.fields.map((field: any) => {\n // Evaluate condition if present\n if (field.admin?.condition) {\n if (typeof field.admin.condition === \"function\") {\n try {\n // Compatibility wrapper: pass { values: data, ...data } to support both old and new signatures\n const evalData = { values: data, ...data };\n const shouldShow = field.admin.condition(evalData, evalData);\n if (!shouldShow) return null;\n } catch (e) {\n console.warn(`Condition error for field ${field.name}:`, e);\n }\n } else if (typeof field.admin.condition === \"object\") {\n try {\n const cond = field.admin.condition as any;\n const targetField = cond.field;\n const val = data[targetField];\n let shouldShow = true;\n if (\"equals\" in cond) {\n shouldShow = val === cond.equals;\n } else if (\"notEquals\" in cond) {\n shouldShow = val !== cond.notEquals;\n } else if (\"in\" in cond && Array.isArray(cond.in)) {\n shouldShow = cond.in.includes(val);\n }\n if (!shouldShow) return null;\n } catch (e) {\n console.warn(`Declarative condition error for field ${field.name}:`, e);\n }\n }\n }\n\n const value = data[field.name];\n return (\n <div\n key={field.name}\n className=\"kyro-block-field-row border-b border-[var(--kyro-border)]/30 pb-3 last:border-b-0 last:pb-0\"\n >\n <FieldRenderer\n field={field}\n value={value}\n onChange={(val) => handleChange(field.name, val)}\n />\n </div>\n );\n })}\n </div>\n );\n }\n\n // Fallback if no schema is provided (for safety with legacy records)\n return (\n <div className=\"text-center py-8 text-[var(--kyro-text-muted)] text-sm italic\">\n No schema defined for block type \"{block.type}\"\n </div>\n );\n };\n\n const theme = blockTheme[block.type as string] || blockTheme.default;\n\n return (\n <SlidePanel\n open={true}\n onClose={onClose}\n title={`Edit ${blockSchema?.label || block.type}`}\n width=\"xl\"\n showOverlay={false}\n accentClass={theme.border}\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"text-[10px] font-medium text-[var(--kyro-text-muted)] mb-1 block\">\n Block Name\n </label>\n <input\n value={(blockData?.name as string) || \"\"}\n onChange={(e) => updateBlock(block.id, { name: e.target.value })}\n placeholder={blockSchema?.label || (block.type as string)}\n className=\"w-full bg-[var(--kyro-bg-primary)] border border-[var(--kyro-border)] rounded-lg px-3 py-2 text-sm text-[var(--kyro-text-primary)] outline-none focus:border-[var(--kyro-primary)] transition-colors\"\n />\n </div>\n\n {renderFields()}\n\n {children.length > 0 && (\n <div className=\"pt-4 border-t border-[var(--kyro-border)]\">\n <label className=\"text-[10px] font-medium text-[var(--kyro-text-muted)] mb-1.5 block\">\n Children ({children.length})\n </label>\n <ChildBlocksTree\n blockId={block.id}\n children={children}\n onUpdateChildren={handleUpdateChildren}\n />\n </div>\n )}\n </div>\n <div className=\"mt-6 pt-4 border-t border-[var(--kyro-border)]\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"w-full py-2.5 bg-[var(--kyro-sidebar-active)] text-[var(--kyro-sidebar-text-active)] rounded-lg font-medium hover:opacity-90 transition-opacity\"\n >\n Done\n </button>\n </div>\n </SlidePanel>\n );\n};\n","import React, { useState } from \"react\";\nimport { Plus, X, ChevronRight, ChevronDown } from \"../ui/icons\";\nimport {\n blockIcons,\n getBlockComponent,\n getBlockLabel,\n getBlockDisplayLabel,\n} from \"../fields/extensions/blockComponents\";\nimport { createNewBlock } from \"../fields/extensions/blocksStore\";\nimport { BlockDrawer } from \"../ui/BlockDrawer\";\nimport { BlockEditModal } from \"./BlockEditModal\";\nimport { useStore } from \"zustand\";\nimport { BlocksContext } from \"../fields/extensions/blocksStore\";\nimport { useContext } from \"react\";\n\ninterface ChildBlocksTreeProps {\n blockId: string;\n children: Record<string, unknown>[];\n onUpdateChildren: (children: Record<string, unknown>[]) => void;\n depth?: number;\n maxDepth?: number;\n}\n\nconst MAX_DEPTH = 6;\n\nexport const ChildBlocksTree: React.FC<ChildBlocksTreeProps> = ({\n blockId,\n children,\n onUpdateChildren,\n depth = 0,\n maxDepth = MAX_DEPTH,\n}) => {\n const [showAddModal, setShowAddModal] = useState(false);\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n const [editingBlockId, setEditingBlockId] = useState<string | null>(null);\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null);\n\n const store = useContext(BlocksContext);\n if (!store) throw new Error(\"ChildBlocksTree must be used within a BlocksContext\");\n const dynamicCategories = useStore(store, (s) => s.dynamicCategories);\n const allowedBlocks = useStore(store, (s) => s.allowedBlocks);\n\n const canAddChildren = depth < maxDepth;\n const indentWidth = 16;\n\n const handleAddChild = (type: string) => {\n const newChild = createNewBlock(type);\n onUpdateChildren([...children, newChild]);\n setEditingBlockId(newChild.id);\n };\n\n const handleRemoveChild = (childId: string) => {\n const filtered = children.filter((c) => c.id !== childId);\n onUpdateChildren(filtered);\n };\n\n const handleUpdateChildData = (childId: string, newData: Record<string, unknown>) => {\n const updated = children.map((child) => {\n if (child.id === childId) {\n return { ...child, data: newData };\n }\n return child;\n });\n onUpdateChildren(updated);\n };\n\n const handleUpdateChildChildren = (\n childId: string,\n newGrandchildren: Record<string, unknown>[],\n ) => {\n const updated = children.map((child) => {\n if (child.id === childId) {\n return { ...child, children: newGrandchildren };\n }\n return child;\n });\n onUpdateChildren(updated);\n };\n\n const toggleExpand = (id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n const renderBlock = (child: Record<string, unknown>) => {\n const hasChildren = child.children && child.children.length > 0;\n const isExpanded = expandedIds.has(child.id);\n const BlockComponent = getBlockComponent(child.type);\n const childHasOwnChildren = hasChildren;\n const isEditing = editingBlockId === child.id;\n const blockSchema = allowedBlocks.find((b: any) => b.slug === child.type);\n\n return (\n <div key={child.id} className=\"relative group\">\n <div\n className={`flex items-center group/column gap-2 p-2 bg-[var(--kyro-bg-secondary)] rounded border transition-colors ${isEditing\n ? \"bg-[var(--kyro-primary)]/10 border-[var(--kyro-primary)]\"\n : \"border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/50 hover:bg-[var(--kyro-primary)]/5\"\n } ${canAddChildren ? \"cursor-pointer\" : \"\"}`}\n style={{ marginLeft: depth * indentWidth }}\n onClick={() => {\n if (canAddChildren) {\n setEditingBlockId(isEditing ? null : child.id);\n }\n }}\n >\n {childHasOwnChildren ? (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(child.id);\n }}\n className=\"p-0.5 hover:bg-[var(--kyro-surface-accent)] rounded\"\n >\n {isExpanded ? (\n <ChevronDown className=\"w-3 h-3 text-[var(--kyro-text-muted)]\" />\n ) : (\n <ChevronRight className=\"w-3 h-3 text-[var(--kyro-text-muted)]\" />\n )}\n </button>\n ) : (\n <span className=\"w-4\" />\n )}\n\n {blockIcons[child.type] && (\n <div className=\"w-8 h-8 rounded bg-[var(--kyro-surface-accent)] flex items-center justify-center text-[var(--kyro-text-secondary)]\">\n {blockIcons[child.type]}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs font-medium text-[var(--kyro-text-secondary)] truncate\">\n {getBlockDisplayLabel(child)}\n {child.data?.text ? ` - ${child.data.text.slice(0, 30)}` : \"\"}\n {child.data?.heading ? ` - ${child.data.heading.slice(0, 30)}` : \"\"}\n </div>\n {blockSchema?.admin?.description && (\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] mt-0.5 truncate opacity-80\">\n {blockSchema.admin.description}\n </div>\n )}\n </div>\n\n {hasChildren && (\n <span className=\"text-[10px] bg-[var(--kyro-surface-accent)] px-2 py-0.5 rounded text-[var(--kyro-text-muted)] font-medium\">\n {child.children.length} nested\n </span>\n )}\n\n {confirmDeleteId === child.id ? (\n <div\n className=\"flex items-center gap-1\"\n onClick={(e) => e.stopPropagation()}\n >\n <button\n type=\"button\"\n onClick={() => {\n handleRemoveChild(child.id);\n setConfirmDeleteId(null);\n }}\n className=\"px-2 py-1 text-xs bg-[var(--kyro-danger)] text-white rounded\"\n >\n Remove\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmDeleteId(null)}\n className=\"px-2 py-1 text-xs bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] rounded hover:bg-[var(--kyro-border)]\"\n >\n Cancel\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setConfirmDeleteId(child.id);\n }}\n className=\"p-1.5 rounded-md transition-opacity cursor-pointer hover:bg-[var(--kyro-danger-bg)]\"\n >\n <X className=\"w-3.5 h-3.5 text-[var(--kyro-danger)] invisible group-hover/column:visible\" />\n </button>\n )}\n </div>\n\n {isEditing && (\n <BlockEditModal\n block={child}\n onClose={() => setEditingBlockId(null)}\n />\n )}\n\n {hasChildren && isExpanded && (\n <div className=\"mt-1\">\n <NestedChildBlocks\n parentId={child.id}\n children={child.children}\n onUpdateChildren={(newGrandchildren) =>\n handleUpdateChildChildren(child.id, newGrandchildren)\n }\n depth={depth + 1}\n maxDepth={maxDepth}\n />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className=\"space-y-2\">\n {children.length > 0 && (\n <div className=\"space-y-1\">{children.map(renderBlock)}</div>\n )}\n\n {canAddChildren && (\n <div style={{ marginLeft: depth * indentWidth }}>\n <button\n type=\"button\"\n onClick={() => setShowAddModal(true)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs font-medium text-[var(--kyro-primary)] hover:bg-[var(--kyro-surface-accent)] rounded transition-colors\"\n >\n <Plus className=\"w-3 h-3\" />\n Add Block\n </button>\n\n <BlockDrawer\n open={showAddModal}\n onClose={() => setShowAddModal(false)}\n onSelect={handleAddChild}\n >\n {dynamicCategories.map((category) => (\n <div key={category.title} className=\"mb-4\">\n <h3 className=\"text-xs font-semibold text-[var(--kyro-text-muted)] tracking-wide mb-2\">\n {category.title}\n </h3>\n <div className=\"grid grid-cols-3 gap-2\">\n {category.blocks.map((block) => (\n <button\n key={block.slug}\n type=\"button\"\n onClick={() => {\n handleAddChild(block.slug);\n setShowAddModal(false);\n }}\n className=\"flex flex-col items-center text-center gap-1 p-2 rounded-md border border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/60 hover:bg-[var(--kyro-surface-accent)]/30 transition-all cursor-pointer group\"\n >\n <div className=\"w-6 h-6 flex items-center justify-center rounded group-hover:bg-[var(--kyro-primary)]/10 group-hover:text-[var(--kyro-primary)] transition-all\">\n {blockIcons[block.slug as keyof typeof blockIcons]}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs font-medium tracking-tight text-[var(--kyro-text-primary)]\">\n {block.label}\n </div>\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] mt-0.5\">\n {block.admin?.description || \"\"}\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n ))}\n </BlockDrawer>\n </div>\n )}\n\n {children.length === 0 && canAddChildren && (\n <div\n className=\"text-xs text-[var(--kyro-text-muted)] italic py-2\"\n style={{ marginLeft: depth * indentWidth }}\n >\n No blocks added. Click \"Add Block\" to add elements.\n </div>\n )}\n\n {depth >= maxDepth && children.length > 0 && (\n <div\n className=\"text-xs text-[var(--kyro-text-muted)] italic\"\n style={{ marginLeft: depth * indentWidth }}\n >\n Maximum nesting level ({maxDepth}) reached\n </div>\n )}\n </div>\n );\n};\n\ninterface NestedChildBlocksProps {\n parentId: string;\n children: Record<string, unknown>[];\n onUpdateChildren: (children: Record<string, unknown>[]) => void;\n depth: number;\n maxDepth: number;\n}\n\nconst NestedChildBlocks: React.FC<NestedChildBlocksProps> = ({\n parentId,\n children,\n onUpdateChildren,\n depth,\n maxDepth,\n}) => {\n const [showAddModal, setShowAddModal] = useState(false);\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n const [editingBlockId, setEditingBlockId] = useState<string | null>(null);\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null);\n\n const store = useContext(BlocksContext);\n if (!store) throw new Error(\"NestedChildBlocks must be used within a BlocksContext\");\n const dynamicCategories = useStore(store, (s) => s.dynamicCategories);\n const allowedBlocks = useStore(store, (s) => s.allowedBlocks);\n\n const canAddChildren = depth < maxDepth;\n const indentWidth = 16;\n\n const handleAddChild = (type: string) => {\n const newChild = createNewBlock(type);\n onUpdateChildren([...children, newChild]);\n setEditingBlockId(newChild.id);\n };\n\n const handleRemoveChild = (childId: string) => {\n const filtered = children.filter((c) => c.id !== childId);\n onUpdateChildren(filtered);\n };\n\n const handleUpdateChildData = (childId: string, newData: Record<string, unknown>) => {\n const updated = children.map((child) => {\n if (child.id === childId) {\n return { ...child, data: newData };\n }\n return child;\n });\n onUpdateChildren(updated);\n };\n\n const handleUpdateChildChildren = (\n childId: string,\n newGrandchildren: Record<string, unknown>[],\n ) => {\n const updated = children.map((child) => {\n if (child.id === childId) {\n return { ...child, children: newGrandchildren };\n }\n return child;\n });\n onUpdateChildren(updated);\n };\n\n const toggleExpand = (id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n const renderBlock = (child: Record<string, unknown>) => {\n const hasChildren = child.children && child.children.length > 0;\n const isExpanded = expandedIds.has(child.id);\n const BlockComponent = getBlockComponent(child.type);\n const childHasOwnChildren = hasChildren;\n const isEditing = editingBlockId === child.id;\n const blockSchema = allowedBlocks.find((b: any) => b.slug === child.type);\n\n return (\n <div key={child.id} className=\"relative group\">\n <div\n className={`flex items-center gap-2 p-2 bg-[var(--kyro-bg-secondary)] rounded border transition-colors ${isEditing\n ? \"bg-[var(--kyro-primary)]/10 border-[var(--kyro-primary)]\"\n : \"border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/50 hover:bg-[var(--kyro-primary)]/5\"\n } ${canAddChildren ? \"cursor-pointer\" : \"\"}`}\n style={{ marginLeft: depth * indentWidth }}\n onClick={() => {\n if (canAddChildren) {\n setEditingBlockId(isEditing ? null : child.id);\n }\n }}\n >\n {childHasOwnChildren ? (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(child.id);\n }}\n className=\"p-0.5 hover:bg-[var(--kyro-surface-accent)] rounded\"\n >\n {isExpanded ? (\n <ChevronDown className=\"w-3 h-3 text-[var(--kyro-text-muted)]\" />\n ) : (\n <ChevronRight className=\"w-3 h-3 text-[var(--kyro-text-muted)]\" />\n )}\n </button>\n ) : (\n <span className=\"w-4\" />\n )}\n\n {blockIcons[child.type] && (\n <div className=\"w-8 h-8 rounded bg-[var(--kyro-surface-accent)] flex items-center justify-center text-[var(--kyro-text-secondary)]\">\n {blockIcons[child.type]}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs font-medium text-[var(--kyro-text-secondary)] truncate\">\n {getBlockDisplayLabel(child)}\n {child.data?.text ? ` - ${child.data.text.slice(0, 30)}` : \"\"}\n {child.data?.heading ? ` - ${child.data.heading.slice(0, 30)}` : \"\"}\n </div>\n {blockSchema?.admin?.description && (\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] mt-0.5 truncate opacity-80\">\n {blockSchema.admin.description}\n </div>\n )}\n </div>\n\n {hasChildren && (\n <span className=\"text-[10px] bg-[var(--kyro-surface-accent)] px-2 py-0.5 rounded text-[var(--kyro-text-muted)] font-medium\">\n {child.children.length} nested\n </span>\n )}\n\n {confirmDeleteId === child.id ? (\n <div\n className=\"flex items-center gap-1\"\n onClick={(e) => e.stopPropagation()}\n >\n <button\n type=\"button\"\n onClick={() => {\n handleRemoveChild(child.id);\n setConfirmDeleteId(null);\n }}\n className=\"px-2 py-1 text-xs bg-[var(--kyro-danger)] text-white rounded\"\n >\n Remove\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmDeleteId(null)}\n className=\"px-2 py-1 text-xs bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] rounded hover:bg-[var(--kyro-border)]\"\n >\n Cancel\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setConfirmDeleteId(child.id);\n }}\n className=\"p-1.5 rounded-md invisible group-hover:visible transition-opacity cursor-pointer hover:bg-[var(--kyro-danger-bg)]\"\n >\n <X className=\"w-3.5 h-3.5 text-[var(--kyro-danger)]\" />\n </button>\n )}\n </div>\n\n {isEditing && (\n <BlockEditModal\n block={child}\n onClose={() => setEditingBlockId(null)}\n />\n )}\n\n {hasChildren && isExpanded && (\n <div className=\"mt-1\">\n <NestedChildBlocks\n parentId={child.id}\n children={child.children}\n onUpdateChildren={(newGrandchildren) =>\n handleUpdateChildChildren(child.id, newGrandchildren)\n }\n depth={depth + 1}\n maxDepth={maxDepth}\n />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className=\"space-y-2\">\n {children.length > 0 && (\n <div className=\"space-y-1\">{children.map(renderBlock)}</div>\n )}\n\n {canAddChildren && (\n <div style={{ marginLeft: depth * indentWidth }}>\n <button\n type=\"button\"\n onClick={() => setShowAddModal(true)}\n className=\"flex items-center gap-1 px-2 py-1 text-xs font-medium text-[var(--kyro-primary)] hover:bg-[var(--kyro-surface-accent)] rounded transition-colors\"\n >\n <Plus className=\"w-3 h-3\" />\n Add Block\n </button>\n\n <BlockDrawer\n open={showAddModal}\n onClose={() => setShowAddModal(false)}\n onSelect={handleAddChild}\n >\n {dynamicCategories.map((category) => (\n <div key={category.title} className=\"mb-4\">\n <h3 className=\"text-xs font-semibold text-[var(--kyro-text-muted)] tracking-wide mb-2\">\n {category.title}\n </h3>\n <div className=\"grid grid-cols-3 gap-2\">\n {category.blocks.map((block) => (\n <button\n key={block.slug}\n type=\"button\"\n onClick={() => {\n handleAddChild(block.slug);\n setShowAddModal(false);\n }}\n className=\"flex flex-col items-center text-center gap-1 p-2 rounded-md border border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/60 hover:bg-[var(--kyro-surface-accent)]/30 transition-all cursor-pointer group\"\n >\n <div className=\"w-6 h-6 flex items-center justify-center rounded group-hover:bg-[var(--kyro-primary)]/10 group-hover:text-[var(--kyro-primary)] transition-all\">\n {blockIcons[block.slug as keyof typeof blockIcons]}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs font-medium tracking-tight text-[var(--kyro-text-primary)]\">\n {block.label}\n </div>\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] mt-0.5\">\n {block.admin?.description || \"\"}\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n ))}\n </BlockDrawer>\n </div>\n )}\n\n {children.length === 0 && canAddChildren && (\n <div\n className=\"text-xs text-[var(--kyro-text-muted)] italic py-2\"\n style={{ marginLeft: depth * indentWidth }}\n >\n No blocks added. Click \"Add Block\" to add elements.\n </div>\n )}\n\n {depth >= maxDepth && children.length > 0 && (\n <div\n className=\"text-xs text-[var(--kyro-text-muted)] italic\"\n style={{ marginLeft: depth * indentWidth }}\n >\n Maximum nesting level ({maxDepth}) reached\n </div>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { HeroField } from \"../fields/HeroField\";\nimport { UploadField } from \"../fields/UploadField\";\nimport { ChildBlocksTree } from \"./ChildBlocksTree\";\n\nexport const HeroBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = blockData?.data ?? block.data ?? {};\n const children = blockData?.children ?? block.children ?? [];\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <div className=\"block-hero border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n Hero Section\n </span>\n </div>\n <div className=\"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <HeroField\n heading={data.heading || \"\"}\n subheading={data.subheading || \"\"}\n ctaText={data.ctaText || \"\"}\n ctaUrl={data.ctaUrl || \"\"}\n onChange={handleChange}\n compact\n />\n\n <UploadField\n field={{ label: \"Background\", name: \"bgImage\", maxCount: 1 }}\n value={data.bgImage}\n onChange={(v) => handleChange(\"bgImage\", v)}\n />\n\n <div className=\"pt-3 border-t border-[var(--kyro-border)]\">\n <label className=\"text-[10px] font-medium text-[var(--kyro-text-muted)] mb-1.5 block\">\n Children ({children.length})\n </label>\n <ChildBlocksTree\n blockId={block.id}\n children={children}\n onUpdateChildren={(c) => updateBlock(block.id, { children: c })}\n />\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\n\ninterface HeadingSubheadingFieldProps {\n heading?: string;\n subheading?: string;\n onChange: (field: string, value: string) => void;\n compact?: boolean;\n}\n\nexport const HeadingSubheadingField: React.FC<HeadingSubheadingFieldProps> = ({\n heading = \"\",\n subheading = \"\",\n onChange,\n compact = false,\n}) => {\n const inputClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n const textareaClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] min-h-[50px] resize-none focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] min-h-[80px] resize-none focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n return (\n <div className={compact ? \"space-y-2\" : \"space-y-3\"}>\n <input\n type=\"text\"\n value={heading}\n onChange={(e) => onChange(\"heading\", e.target.value)}\n className={`${inputClass} font-bold text-base`}\n placeholder=\"Heading...\"\n />\n <textarea\n value={subheading}\n onChange={(e) => onChange(\"subheading\", e.target.value)}\n className={textareaClass}\n placeholder=\"Subheading...\"\n />\n </div>\n );\n};\n\nexport default HeadingSubheadingField;\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { HeadingSubheadingField } from \"../fields/HeadingSubheadingField\";\nimport { BlockWrapper } from \"./BlockWrapper\";\n\nexport const HeadingSubheadingBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock } = useBlockActions();\n\n const data = blockData?.data || block.data || {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <BlockWrapper id={block.id} type=\"heading-subheading\" label=\"Heading + Subheading\">\n <HeadingSubheadingField\n heading={data.heading || \"\"}\n subheading={data.subheading || \"\"}\n onChange={handleChange}\n compact\n />\n </BlockWrapper>\n );\n};\n","import React from \"react\";\n\ninterface CardFieldProps {\n title?: string;\n description?: string;\n icon?: string;\n link?: string;\n linkText?: string;\n onChange: (field: string, value: string) => void;\n compact?: boolean;\n}\n\nexport const CardField: React.FC<CardFieldProps> = ({\n title = \"\",\n description = \"\",\n icon = \"\",\n link = \"\",\n linkText = \"\",\n onChange,\n compact = false,\n}) => {\n const inputClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n const textareaClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] min-h-[50px] resize-none focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] min-h-[80px] resize-none focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n return (\n <div className={compact ? \"space-y-2\" : \"space-y-3\"}>\n <input\n type=\"text\"\n value={title}\n onChange={(e) => onChange(\"title\", e.target.value)}\n className={`${inputClass} font-bold text-base`}\n placeholder=\"Card title...\"\n />\n <textarea\n value={description}\n onChange={(e) => onChange(\"description\", e.target.value)}\n className={textareaClass}\n placeholder=\"Card description...\"\n />\n <input\n type=\"text\"\n value={icon}\n onChange={(e) => onChange(\"icon\", e.target.value)}\n className={inputClass}\n placeholder=\"Icon (emoji or name)...\"\n />\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={linkText}\n onChange={(e) => onChange(\"linkText\", e.target.value)}\n className=\"flex-1 px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n placeholder=\"Link text...\"\n />\n <span className=\"text-[var(--kyro-text-muted)] text-xs\">→</span>\n <input\n type=\"url\"\n value={link}\n onChange={(e) => onChange(\"link\", e.target.value)}\n className=\"flex-1 px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent font-mono text-xs\"\n placeholder=\"https://...\"\n />\n </div>\n </div>\n );\n};\n\nexport default CardField;\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { CardField } from \"../fields/CardField\";\nimport { BlockWrapper } from \"./BlockWrapper\";\n\nexport const CardBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock } = useBlockActions();\n\n const data = blockData?.data || block.data || {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <BlockWrapper id={block.id} type=\"card\" label=\"Card\">\n <CardField\n title={data.title || \"\"}\n description={data.description || \"\"}\n icon={data.icon || \"\"}\n link={data.link || \"\"}\n linkText={data.linkText || \"\"}\n onChange={handleChange}\n compact\n />\n </BlockWrapper>\n );\n};\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { ChildBlocksTree } from \"./ChildBlocksTree\";\n\nexport const ArrayBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = blockData?.data ?? block.data ?? {};\n const children = blockData?.children ?? block.children ?? [];\n\n return (\n <div className=\"block-array border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n Repeater\n </span>\n <span className=\"text-[10px] text-[var(--kyro-text-muted)]\">\n ({children.length} items)\n </span>\n </div>\n <div className=\"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <ChildBlocksTree\n blockId={block.id}\n children={children}\n onUpdateChildren={(c) => updateBlock(block.id, { children: c })}\n />\n </div>\n </div>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { Search, Loader2, X } from \"../ui/icons\";\nimport { apiGet, buildSearchQuery } from \"../../lib/api\";\nimport { EmptyState } from \"../ui/EmptyState\";\n\ninterface RelationshipBlockFieldProps {\n relationTo?: string;\n hasMany?: boolean;\n selectedIds?: string[];\n selectedId?: string;\n labelField?: string;\n onChange: (field: string, value: unknown) => void;\n compact?: boolean;\n}\n\nexport const RelationshipBlockField: React.FC<RelationshipBlockFieldProps> = ({\n relationTo = \"pages\",\n hasMany = false,\n selectedIds = [],\n selectedId,\n labelField = \"title\",\n onChange,\n compact = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [options, setOptions] = useState<Record<string, unknown>[]>([]);\n const [loading, setLoading] = useState(false);\n const [collections, setCollections] = useState<string[]>([]);\n const [loadingCollections, setLoadingCollections] = useState(true);\n\n useEffect(() => {\n apiGet(\"/api/collections\")\n .then((data) => {\n setCollections(\n (data.collections || []).map((c: Record<string, unknown>) => c.slug || c.name || c),\n );\n setLoadingCollections(false);\n })\n .catch(() => setLoadingCollections(false));\n }, []);\n\n const fetchOptions = (query: string = \"\") => {\n setLoading(true);\n const url = `/api/${relationTo}?${buildSearchQuery(query, [labelField], 20)}`;\n\n apiGet(url)\n .then((data) => {\n setOptions(data.docs || []);\n setLoading(false);\n })\n .catch(() => setLoading(false));\n };\n\n useEffect(() => {\n if (isOpen) fetchOptions(search);\n }, [isOpen, search, relationTo, labelField]);\n\n const getLabel = (opt: Record<string, unknown>) => {\n return (\n opt?.[labelField] ||\n opt?.title ||\n opt?.name ||\n opt?.label ||\n opt?.filename ||\n opt?.slug ||\n opt?.id ||\n \"Untitled\"\n );\n };\n\n const activeIds = hasMany ? selectedIds : selectedId ? [selectedId] : [];\n\n const handleSelect = (opt: Record<string, unknown>) => {\n if (hasMany) {\n if (activeIds.includes(opt.id)) {\n onChange(\n \"selectedIds\",\n activeIds.filter((id: string) => id !== opt.id),\n );\n } else {\n onChange(\"selectedIds\", [...activeIds, opt.id]);\n }\n } else {\n onChange(\"selectedId\", opt.id);\n onChange(\"selectedIds\", [opt.id]);\n setIsOpen(false);\n }\n };\n\n const isSelected = (optId: string) => activeIds.includes(optId);\n\n const inputClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n const selectClass = compact\n ? \"w-full px-2.5 py-1.5 border border-[var(--kyro-border)] rounded bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\"\n : \"w-full px-3 py-2.5 border border-[var(--kyro-border)] rounded-lg bg-[var(--kyro-bg-secondary)] text-sm text-[var(--kyro-text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--kyro-sidebar-active)] focus:border-transparent\";\n\n // Check if relationTo is a known single collection (not an array)\n const isKnownCollection = relationTo && typeof relationTo === \"string\" && relationTo.length > 0;\n\n return (\n <div className={compact ? \"space-y-2\" : \"space-y-4\"}>\n <div className={compact ? \"flex items-center gap-2\" : \"space-y-3\"}>\n {/* Hide collection selector if relationTo is known (single collection) */}\n {!isKnownCollection && (\n <>\n {loadingCollections ? (\n <div className={selectClass + \" text-[var(--kyro-text-muted)]\"}>\n Loading...\n </div>\n ) : (\n <select\n value={relationTo}\n onChange={(e) => onChange(\"relationTo\", e.target.value)}\n className={selectClass}\n >\n <option value=\"\">Select collection...</option>\n {collections.map((col) => (\n <option key={col} value={col}>\n {col}\n </option>\n ))}\n </select>\n )}\n </>\n )}\n\n {!compact && (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={hasMany}\n onChange={(e) => onChange(\"hasMany\", e.target.checked)}\n className=\"w-4 h-4 rounded border-[var(--kyro-border)] focus:ring-[var(--kyro-sidebar-active)] focus:ring-offset-0\"\n />\n <span className=\"text-sm text-[var(--kyro-text-primary)]\">\n Allow multiple\n </span>\n </label>\n )}\n </div>\n\n <div className=\"relative\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--kyro-text-muted)]\" />\n <input\n type=\"text\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setIsOpen(true);\n }}\n onFocus={() => setIsOpen(true)}\n onBlur={() => setTimeout(() => setIsOpen(false), 200)}\n placeholder={`Search ${relationTo}...`}\n className={`${inputClass} pl-9`}\n />\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n {loading && (\n <Loader2 className=\"w-4 h-4 text-[var(--kyro-text-muted)] animate-spin\" />\n )}\n </div>\n </div>\n\n {isOpen && (\n <div className=\"absolute z-20 w-full mt-1 border border-[var(--kyro-border)] rounded-lg shadow-lg bg-[var(--kyro-surface)] max-h-48 overflow-auto\">\n {loading ? (\n <div className=\"p-3 text-center text-sm text-[var(--kyro-text-muted)]\">\n Loading...\n </div>\n ) : options.length === 0 ? (\n <EmptyState title=\"No results found\" />\n ) : (\n <div className=\"py-1\">\n {options.map((opt) => (\n <button\n key={opt.id}\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => handleSelect(opt)}\n className={`w-full px-3 py-2 text-left text-sm hover:bg-[var(--kyro-surface-accent)] transition-colors flex items-center justify-between ${\n isSelected(opt.id)\n ? \"bg-[var(--kyro-sidebar-active)]/10 text-[var(--kyro-sidebar-active)]\"\n : \"text-[var(--kyro-text-primary)]\"\n }`}\n >\n <span>{getLabel(opt)}</span>\n {isSelected(opt.id) && <span>✓</span>}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {activeIds.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {activeIds.map((id: string) => {\n const opt = options.find((o) => o.id === id) || { id };\n return (\n <span\n key={id}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-[var(--kyro-sidebar-active)]/10 text-[var(--kyro-sidebar-active)]\"\n >\n {getLabel(opt)}\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n if (hasMany) {\n onChange(\n \"selectedIds\",\n activeIds.filter((sid: string) => sid !== id),\n );\n } else {\n onChange(\"selectedId\", null);\n onChange(\"selectedIds\", []);\n }\n }}\n className=\"hover:opacity-70\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport default RelationshipBlockField;\n","import React from \"react\";\nimport {\n useBlockById,\n useBlockActions,\n} from \"../fields/extensions/blocksStore\";\nimport { ChevronRight, X } from \"../ui/icons\";\nimport { RelationshipBlockField } from \"../fields/RelationshipBlockField\";\n\nexport const RelationshipBlock: React.FC<{ block: Record<string, unknown>; index: number }> = ({\n block,\n index,\n}) => {\n const blockData = useBlockById(block.id);\n const { updateBlock, removeBlock, moveBlock } = useBlockActions();\n\n const data = blockData?.data ?? block.data ?? {};\n\n const handleChange = (field: string, value: unknown) => {\n updateBlock(block.id, { data: { ...data, [field]: value } });\n };\n\n return (\n <div className=\"block-relationship border border-[var(--kyro-border)] rounded-md p-3 mb-2 relative group\">\n <div className=\"flex items-center justify-between mb-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold text-[var(--kyro-text-muted)] \">\n Relationship\n </span>\n <span className=\"text-[10px] text-[var(--kyro-text-muted)]\">\n → {data.relationTo || \"pages\"}\n </span>\n </div>\n <div className=\"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"up\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move up\"\n >\n <ChevronRight className=\"w-3 h-3 rotate-90\" />\n </button>\n <button\n type=\"button\"\n onClick={() => moveBlock(block.id, \"down\")}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded\"\n title=\"Move down\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeBlock(block.id)}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] rounded text-[var(--kyro-danger)]\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n <RelationshipBlockField\n relationTo={data.relationTo || \"pages\"}\n hasMany={data.hasMany || false}\n selectedIds={Array.isArray(data.selectedIds) ? data.selectedIds : []}\n selectedId={data.selectedId}\n labelField={data.labelField || \"title\"}\n onChange={handleChange}\n compact\n />\n </div>\n );\n};\n","import React from \"react\";\nimport { HeadingBlock } from \"../../blocks/HeadingBlock\";\nimport { ParagraphBlock } from \"../../blocks/ParagraphBlock\";\nimport { ImageBlock } from \"../../blocks/ImageBlock\";\nimport { VideoBlock } from \"../../blocks/VideoBlock\";\nimport { ListBlock } from \"../../blocks/ListBlock\";\nimport { CodeBlock } from \"../../blocks/CodeBlock\";\nimport { FileBlock } from \"../../blocks/FileBlock\";\nimport { AccordionBlock } from \"../../blocks/AccordionBlock\";\nimport { RichTextBlock } from \"../../blocks/RichTextBlock\";\n\nimport { HeroBlock } from \"../../blocks/HeroBlock\";\nimport { HeadingSubheadingBlock } from \"../../blocks/HeadingSubheadingBlock\";\nimport { CardBlock } from \"../../blocks/CardBlock\";\nimport { ArrayBlock } from \"../../blocks/ArrayBlock\";\nimport { RelationshipBlock } from \"../../blocks/RelationshipBlock\";\n\nimport {\n Box,\n Heading1,\n AlignLeft,\n Image,\n Video,\n List,\n Code,\n File,\n ChevronDown,\n Star,\n ListOrdered,\n Link2,\n Columns3,\n Sparkles,\n Users,\n HelpCircle,\n Activity,\n Tag,\n Database,\n Mail,\n Blocks,\n Clock,\n} from \"../../ui/icons\";\n\n// Block component registry\nexport const BLOCK_COMPONENTS: Record<string, React.ComponentType<{ block: Record<string, unknown>; index: number }>> = {\n heading: HeadingBlock,\n paragraph: ParagraphBlock,\n image: ImageBlock,\n video: VideoBlock,\n list: ListBlock,\n code: CodeBlock,\n file: FileBlock,\n accordion: AccordionBlock,\n richtext: RichTextBlock,\n\n hero: HeroBlock,\n \"heading-subheading\": HeadingSubheadingBlock,\n card: CardBlock,\n array: ArrayBlock,\n relationship: RelationshipBlock,\n};\n\n// Block Theme mapping for consistent coloring across UI\nexport const blockTheme: Record<string, { text: string; border: string; borderLeft: string }> = {\n \"feature-split\": { text: \"text-indigo-500\", border: \"border-indigo-500\", borderLeft: \"border-l-indigo-500\" },\n \"feature-grid\": { text: \"text-blue-500\", border: \"border-blue-500\", borderLeft: \"border-l-blue-500\" },\n \"cta-banner\": { text: \"text-amber-500\", border: \"border-amber-500\", borderLeft: \"border-l-amber-500\" },\n testimonials: { text: \"text-emerald-500\", border: \"border-emerald-500\", borderLeft: \"border-l-emerald-500\" },\n faq: { text: \"text-orange-500\", border: \"border-orange-500\", borderLeft: \"border-l-orange-500\" },\n stats: { text: \"text-rose-500\", border: \"border-rose-500\", borderLeft: \"border-l-rose-500\" },\n \"logo-cloud\": { text: \"text-cyan-500\", border: \"border-cyan-500\", borderLeft: \"border-l-cyan-500\" },\n pricing: { text: \"text-green-500\", border: \"border-green-500\", borderLeft: \"border-l-green-500\" },\n team: { text: \"text-violet-500\", border: \"border-violet-500\", borderLeft: \"border-l-violet-500\" },\n \"recent-feed\": { text: \"text-sky-500\", border: \"border-sky-500\", borderLeft: \"border-l-sky-500\" },\n \"process-steps\": { text: \"text-fuchsia-500\", border: \"border-fuchsia-500\", borderLeft: \"border-l-fuchsia-500\" },\n \"form-embed\": { text: \"text-pink-500\", border: \"border-pink-500\", borderLeft: \"border-l-pink-500\" },\n \"video-showcase\": { text: \"text-red-500\", border: \"border-red-500\", borderLeft: \"border-l-red-500\" },\n hero: { text: \"text-yellow-500\", border: \"border-yellow-500\", borderLeft: \"border-l-yellow-500\" },\n card: { text: \"text-teal-500\", border: \"border-teal-500\", borderLeft: \"border-l-teal-500\" },\n default: { text: \"text-zinc-400\", border: \"border-zinc-400\", borderLeft: \"border-l-zinc-400\" },\n};\n\n// Icon mapping for drawer (actual Lucide components)\nexport const blockIcons: Record<string, React.ReactNode> = {\n heading: <Heading1 className={`w-4 h-4 ${blockTheme.default.text}`} />,\n paragraph: <AlignLeft className={`w-4 h-4 ${blockTheme.default.text}`} />,\n image: <Image className={`w-4 h-4 ${blockTheme.default.text}`} />,\n video: <Video className={`w-4 h-4 ${blockTheme.default.text}`} />,\n list: <List className={`w-4 h-4 ${blockTheme.default.text}`} />,\n code: <Code className={`w-4 h-4 ${blockTheme.default.text}`} />,\n file: <File className={`w-4 h-4 ${blockTheme.default.text}`} />,\n accordion: <ChevronDown className={`w-4 h-4 ${blockTheme.default.text}`} />,\n richtext: <AlignLeft className={`w-4 h-4 ${blockTheme.default.text}`} />,\n\n hero: <Star className={`w-4 h-4 ${blockTheme.hero.text}`} />,\n \"heading-subheading\": <Heading1 className={`w-4 h-4 ${blockTheme.default.text}`} />,\n card: <Box className={`w-4 h-4 ${blockTheme.card.text}`} />,\n array: <ListOrdered className={`w-4 h-4 ${blockTheme.default.text}`} />,\n relationship: <Link2 className={`w-4 h-4 ${blockTheme.default.text}`} />,\n\n // New Block Icons\n \"feature-split\": <Columns3 className={`w-4 h-4 ${blockTheme[\"feature-split\"].text}`} />,\n \"feature-grid\": <Blocks className={`w-4 h-4 ${blockTheme[\"feature-grid\"].text}`} />,\n \"cta-banner\": <Sparkles className={`w-4 h-4 ${blockTheme[\"cta-banner\"].text}`} />,\n testimonials: <Users className={`w-4 h-4 ${blockTheme.testimonials.text}`} />,\n faq: <HelpCircle className={`w-4 h-4 ${blockTheme.faq.text}`} />,\n stats: <Activity className={`w-4 h-4 ${blockTheme.stats.text}`} />,\n \"logo-cloud\": <Image className={`w-4 h-4 ${blockTheme[\"logo-cloud\"].text}`} />,\n pricing: <Tag className={`w-4 h-4 ${blockTheme.pricing.text}`} />,\n team: <Users className={`w-4 h-4 ${blockTheme.team.text}`} />,\n \"recent-feed\": <Database className={`w-4 h-4 ${blockTheme[\"recent-feed\"].text}`} />,\n \"process-steps\": <Clock className={`w-4 h-4 ${blockTheme[\"process-steps\"].text}`} />,\n \"form-embed\": <Mail className={`w-4 h-4 ${blockTheme[\"form-embed\"].text}`} />,\n \"video-showcase\": <Video className={`w-4 h-4 ${blockTheme[\"video-showcase\"].text}`} />,\n};\n\n// Internal utility to check if block has a specific custom react component\nexport function getBlockComponent(type: string) {\n return BLOCK_COMPONENTS[type] || null;\n}\n\n// Determines if block is a native layout requiring generic rendering\nexport function isGenericSemanticBlock(type: string) {\n return [\n \"feature-split\", \"feature-grid\", \"cta-banner\",\n \"testimonials\", \"faq\", \"stats\", \"logo-cloud\",\n \"pricing\", \"team\", \"recent-feed\", \"process-steps\", \"form-embed\", \"video-showcase\"\n ].includes(type);\n}\n\n// Get human-readable label for block type\nexport function getBlockLabel(type: string): string {\n const labelMap: Record<string, string> = {\n // Primitives\n paragraph: \"Paragraph\",\n heading: \"Heading\",\n image: \"Image\",\n video: \"Video\",\n list: \"List\",\n code: \"Code\",\n file: \"File\",\n accordion: \"Accordion\",\n array: \"Repeater\",\n relationship: \"Relationship\",\n richtext: \"Rich Text\",\n\n // Core Semantic Blocks\n hero: \"Hero Section\",\n \"heading-subheading\": \"Heading + Subheading\",\n card: \"Card Block\",\n \"feature-split\": \"Feature Split\",\n \"feature-grid\": \"Feature Grid\",\n \"cta-banner\": \"CTA Banner\",\n testimonials: \"Testimonials Stack\",\n faq: \"FAQ Section\",\n stats: \"Stats & Metrics\",\n \"logo-cloud\": \"Logo Cloud\",\n\n // Brand New Blocks\n pricing: \"Pricing Grid / Plan\",\n team: \"Team Profiles Showcase\",\n \"recent-feed\": \"Dynamic Content Feed\",\n \"process-steps\": \"Process Timeline / Steps\",\n \"form-embed\": \"Lead Intake Form\",\n \"video-showcase\": \"Cinematic Video Showcase\",\n\n // Inline Content Elements\n \"heading-element\": \"Heading\",\n \"text-element\": \"Text\",\n \"image-element\": \"Image\",\n \"richtext-element\": \"Rich Text\",\n \"button-element\": \"Button\",\n \"video-element\": \"Video\",\n \"list-element\": \"List\",\n };\n return labelMap[type] || type;\n}\n\nexport function getBlockDisplayLabel(block: Record<string, unknown>): string {\n const name = block.name as string | undefined;\n if (name && name.trim()) return name.trim();\n return getBlockLabel(block.type as string);\n}\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useStore } from \"zustand\";\nimport { BlocksContext, createBlocksStore, createNewBlock, type BlocksStoreApi, useBlockActions } from \"./extensions/blocksStore\";\nimport { BlockDrawer, DraggableBlockType } from \"../ui/BlockDrawer\";\nimport { Plus, Box, X, Copy, ChevronDown } from \"../ui/icons\";\nimport {\n BLOCK_COMPONENTS,\n getBlockComponent,\n blockIcons,\n getBlockDisplayLabel,\n getBlockLabel,\n blockTheme,\n} from \"./extensions/blockComponents\";\nimport { GenericBlock } from \"../blocks/GenericBlock\";\nimport { BlockEditModal } from \"../blocks/BlockEditModal\";\nimport {\n\n DndContext,\n closestCenter,\n PointerSensor,\n useSensor,\n useSensors,\n KeyboardSensor,\n useDraggable,\n DragOverlay,\n} from \"@dnd-kit/core\";\nimport type { DragEndEvent, DragStartEvent, Active } from \"@dnd-kit/core\";\nimport {\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\n\ninterface BlocksFieldProps {\n field: Record<string, unknown>;\n value: unknown[];\n onChange?: (value: unknown[]) => void;\n onBlocksChange?: () => void;\n error?: string;\n disabled?: boolean;\n documentStatus?: \"draft\" | \"published\" | \"scheduled\" | \"archived\";\n justSaved?: boolean;\n}\n\nimport { GripVertical } from \"../ui/icons\";\n\nfunction getBlockPreviewSnippet(\n data: Record<string, any>,\n blockSchema?: Record<string, any>,\n): string {\n if (blockSchema?.fields) {\n for (const field of blockSchema.fields) {\n if (field.type === \"text\" || field.type === \"textarea\") {\n const val = data[field.name];\n if (val && typeof val === \"string\") return val;\n }\n }\n }\n return data.heading || data.title || data.text || data.name || data.label || data.sectionTitle || \"\";\n}\n\n// Sortable block wrapper for drag-and-drop\nconst SortableBlockComponent = ({\n block,\n index,\n blockSchema,\n editingBlockId,\n setEditingBlockId,\n onDuplicate,\n compact,\n}: {\n block: Record<string, unknown>;\n index: number;\n blockSchema?: Record<string, any>;\n editingBlockId: string | null;\n setEditingBlockId: (id: string | null) => void;\n onDuplicate: (id: string) => void;\n compact?: boolean;\n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: block.id });\n\n const { removeBlock, updateBlock } = useBlockActions();\n const isEditing = editingBlockId === block.id;\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [editingName, setEditingName] = useState(false);\n const [nameDraft, setNameDraft] = useState((block.name as string) || \"\");\n const nameInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (editingName && nameInputRef.current) {\n nameInputRef.current.focus();\n nameInputRef.current.select();\n }\n }, [editingName]);\n\n const commitName = useCallback(() => {\n setEditingName(false);\n const trimmed = nameDraft.trim();\n if (trimmed !== ((block.name as string) || \"\").trim()) {\n updateBlock(block.id as string, { name: trimmed || \"\" });\n }\n }, [nameDraft, block.name, block.id, updateBlock]);\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isDragging ? 10 : 1,\n opacity: isDragging ? 0.8 : 1,\n };\n\n const itemLabel = getBlockDisplayLabel(block);\n const data = (block.data || {}) as Record<string, any>;\n const previewSnippet = getBlockPreviewSnippet(data, blockSchema);\n\n if (compact) {\n return (\n <div ref={setNodeRef} style={style} className=\"relative group\">\n <div\n onClick={() => setEditingBlockId(block.id as string)}\n className={`flex items-center gap-1 pl-5 pr-1.5 py-1 bg-[var(--kyro-bg-secondary)] rounded-md border transition-colors cursor-pointer text-xs whitespace-nowrap ${isEditing\n ? `${(blockTheme[block.type as string] || blockTheme.default).border} bg-[var(--kyro-primary)]/5`\n : \"border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/50 hover:bg-[var(--kyro-primary)]/5\"\n }`}\n >\n <div\n className=\"absolute left-0.5 top-1/2 -translate-y-1/2 p-0.5 cursor-grab active:cursor-grabbing text-[var(--kyro-text-muted)] opacity-0 group-hover:opacity-100 transition-opacity hover:bg-[var(--kyro-surface-accent)] rounded\"\n {...attributes}\n {...listeners}\n onClick={(e) => e.stopPropagation()}\n >\n <GripVertical className=\"w-2.5 h-2.5\" />\n </div>\n\n {blockIcons[block.type as string] && (\n <span className=\"text-[var(--kyro-text-secondary)] flex-shrink-0\">\n {blockIcons[block.type as string]}\n </span>\n )}\n\n {editingName ? (\n <input\n ref={nameInputRef}\n value={nameDraft}\n onChange={(e) => setNameDraft(e.target.value)}\n onBlur={commitName}\n onKeyDown={(e) => { if (e.key === \"Enter\") commitName(); if (e.key === \"Escape\") { setNameDraft((block.name as string) || \"\"); setEditingName(false); } }}\n onClick={(e) => e.stopPropagation()}\n className=\"flex-1 min-w-0 bg-[var(--kyro-surface-accent)] border border-[var(--kyro-primary)] rounded px-1.5 py-0.5 text-[10px] font-medium text-[var(--kyro-text-primary)] outline-none\"\n />\n ) : (\n <span\n onClick={(e) => { e.stopPropagation(); setNameDraft((block.name as string) || \"\"); setEditingName(true); }}\n className=\"font-medium text-[var(--kyro-text-secondary)] truncate max-w-[120px] cursor-text hover:text-[var(--kyro-text-primary)] transition-colors\"\n title=\"Click to rename\"\n >\n {itemLabel}\n </span>\n )}\n\n {showDeleteConfirm ? (\n <div className=\"flex items-center gap-0.5\" onClick={(e) => e.stopPropagation()}>\n <button\n type=\"button\"\n onClick={() => {\n removeBlock(block.id as string);\n setShowDeleteConfirm(false);\n }}\n className=\"px-1.5 py-0.5 text-[9px] bg-[var(--kyro-danger)] text-white rounded font-semibold transition-colors hover:brightness-90\"\n >\n Remove\n </button>\n <button\n type=\"button\"\n onClick={() => setShowDeleteConfirm(false)}\n className=\"px-1.5 py-0.5 text-[9px] bg-[var(--kyro-surface-accent)] hover:bg-[var(--kyro-border)] text-[var(--kyro-text-secondary)] rounded font-semibold transition-colors\"\n >\n Cancel\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDuplicate(block.id as string);\n }}\n className=\"p-0.5 hover:bg-[var(--kyro-surface-accent)] rounded text-[var(--kyro-text-secondary)] transition-colors\"\n title=\"Duplicate\"\n >\n <Copy className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowDeleteConfirm(true);\n }}\n className=\"p-0.5 hover:bg-[var(--kyro-danger-bg)] hover:text-[var(--kyro-danger)] rounded text-[var(--kyro-text-muted)] transition-colors\"\n title=\"Remove\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </div>\n )}\n </div>\n\n {isEditing && (\n <BlockEditModal\n block={block}\n blockSchema={blockSchema}\n onClose={() => setEditingBlockId(null)}\n />\n )}\n </div>\n );\n }\n\n return (\n <div ref={setNodeRef} style={style} className=\"relative group md:pl-8 mb-2\">\n <div\n className=\"hidden md:absolute left-0 top-1/2 -translate-y-1/2 p-1.5 cursor-grab active:cursor-grabbing text-[var(--kyro-text-muted)] opacity-0 group-hover:opacity-100 transition-opacity hover:bg-[var(--kyro-surface-accent)] rounded\"\n {...attributes}\n {...listeners}\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n\n <div\n onClick={() => setEditingBlockId(block.id as string)}\n className={`flex items-center gap-3 p-3 bg-[var(--kyro-bg-secondary)] rounded-lg border transition-colors cursor-pointer ${isEditing\n ? `${(blockTheme[block.type as string] || blockTheme.default).border} bg-[var(--kyro-primary)]/5`\n : \"border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/50 hover:bg-[var(--kyro-primary)]/5\"\n }`}\n >\n {blockIcons[block.type as string] && (\n <span className=\"text-[var(--kyro-text-secondary)]\">\n {blockIcons[block.type as string]}\n </span>\n )}\n\n <div className=\"flex-1 min-w-0\">\n {editingName ? (\n <input\n ref={nameInputRef}\n value={nameDraft}\n onChange={(e) => setNameDraft(e.target.value)}\n onBlur={commitName}\n onKeyDown={(e) => { if (e.key === \"Enter\") commitName(); if (e.key === \"Escape\") { setNameDraft((block.name as string) || \"\"); setEditingName(false); } }}\n onClick={(e) => e.stopPropagation()}\n placeholder={getBlockLabel(block.type as string)}\n className=\"w-full bg-[var(--kyro-surface-accent)] border border-[var(--kyro-primary)] rounded px-2 py-0.5 text-xs font-semibold text-[var(--kyro-text-primary)] outline-none\"\n />\n ) : (\n <div\n onClick={(e) => { e.stopPropagation(); setNameDraft((block.name as string) || \"\"); setEditingName(true); }}\n className=\"text-xs font-semibold text-[var(--kyro-text-secondary)] truncate cursor-text hover:text-[var(--kyro-text-primary)] transition-colors\"\n title=\"Click to rename\"\n >\n {itemLabel}\n {previewSnippet && typeof previewSnippet === \"string\" && (\n <span className=\"text-[var(--kyro-text-muted)] font-normal ml-1.5\">\n - {previewSnippet.length > 40 ? `${previewSnippet.slice(0, 40)}...` : previewSnippet}\n </span>\n )}\n </div>\n )}\n {blockSchema?.admin?.description && (\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] mt-0.5 truncate opacity-80\">\n {blockSchema.admin.description}\n </div>\n )}\n </div>\n\n {block.children && Array.isArray(block.children) && block.children.length > 0 && (\n <span className=\"text-[10px] bg-[var(--kyro-surface-accent)] px-2 py-0.5 rounded text-[var(--kyro-text-muted)] font-medium\">\n {block.children.length} nested\n </span>\n )}\n\n {showDeleteConfirm ? (\n <div\n className=\"flex items-center gap-1.5\"\n onClick={(e) => e.stopPropagation()}\n >\n <button\n type=\"button\"\n onClick={() => {\n removeBlock(block.id as string);\n setShowDeleteConfirm(false);\n }}\n className=\"px-2.5 py-1 text-[10px] bg-[var(--kyro-danger)] text-white rounded font-semibold transition-colors hover:brightness-90\"\n >\n Remove\n </button>\n <button\n type=\"button\"\n onClick={() => setShowDeleteConfirm(false)}\n className=\"px-2.5 py-1 text-[10px] bg-[var(--kyro-surface-accent)] hover:bg-[var(--kyro-border)] text-[var(--kyro-text-secondary)] rounded font-semibold transition-colors\"\n >\n Cancel\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDuplicate(block.id as string);\n }}\n className=\"p-1 hover:bg-[var(--kyro-surface-accent)] rounded text-[var(--kyro-text-secondary)] transition-colors\"\n title=\"Duplicate Block\"\n >\n <Copy className=\"w-3.5 h-3.5\" />\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowDeleteConfirm(true);\n }}\n className=\"p-1 hover:bg-[var(--kyro-danger-bg)] hover:text-[var(--kyro-danger)] rounded text-[var(--kyro-text-muted)] transition-colors\"\n title=\"Remove Block\"\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n\n {isEditing && (\n <BlockEditModal\n block={block}\n blockSchema={blockSchema}\n onClose={() => setEditingBlockId(null)}\n />\n )}\n </div>\n );\n};\n// Memoize per-block to minimize re-renders when unrelated blocks change\nconst SortableBlock = React.memo(SortableBlockComponent);\n\nexport const BlocksField: React.FC<BlocksFieldProps> = ({\n field,\n value,\n onChange,\n onBlocksChange,\n error,\n disabled,\n documentStatus,\n justSaved,\n}) => {\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const pickerMode = (field as any).admin?.pickerMode || \"drawer\";\n const allowedBlocks = (field.blocks as any[]) || [];\n\n const groupedBlocks = allowedBlocks.reduce((acc, block) => {\n const groupName = block.admin?.group || \"Custom Blocks\";\n if (!acc[groupName]) {\n acc[groupName] = [];\n }\n acc[groupName].push(block);\n return acc;\n }, {} as Record<string, any[]>);\n\n // Define a preferred ordering of core categories if possible\n const categoryOrder = [\n \"Structural Sections\",\n \"Marketing Grids\",\n \"Lead Capture & Interactive\",\n \"Dynamic Content\",\n \"Basic Content Elements\",\n \"Custom Blocks\",\n ];\n\n const dynamicCategories = Object.entries(groupedBlocks)\n .sort(([titleA], [titleB]) => {\n const idxA = categoryOrder.indexOf(titleA);\n const idxB = categoryOrder.indexOf(titleB);\n if (idxA !== -1 && idxB !== -1) return idxA - idxB;\n if (idxA !== -1) return -1;\n if (idxB !== -1) return 1;\n return titleA.localeCompare(titleB);\n })\n .map(([title, blocks]) => ({\n title,\n blocks,\n }));\n\n const storeRef = useRef<BlocksStoreApi | null>(null);\n if (!storeRef.current) {\n storeRef.current = createBlocksStore(allowedBlocks, dynamicCategories);\n }\n const store = storeRef.current;\n\n const blocks = useStore(store, (s) => s.blocks);\n const [activeDrag, setActiveDrag] = useState<Active | null>(null);\n const [editingBlockId, setEditingBlockId] = useState<string | null>(null);\n\n // Track previous blocks count and IDs to auto-open newly added blocks\n const prevBlocksLengthRef = useRef(blocks.length);\n const prevBlockIdsRef = useRef(new Set(blocks.map((b) => b.id)));\n const isInitializedRef = useRef(false);\n\n useEffect(() => {\n if (isInitializedRef.current) {\n if (blocks.length > prevBlocksLengthRef.current) {\n // Find the new block ID that wasn't present before\n const newBlock = blocks.find((b) => b.id && !prevBlockIdsRef.current.has(b.id));\n if (newBlock) {\n setEditingBlockId(newBlock.id);\n }\n }\n }\n prevBlocksLengthRef.current = blocks.length;\n prevBlockIdsRef.current = new Set(blocks.map((b) => b.id));\n }, [blocks]);\n\n // Register blocks change callback\n useEffect(() => {\n if (onBlocksChange) {\n store.getState().setOnBlocksChange(onBlocksChange);\n }\n return () => {\n store.getState().setOnBlocksChange(() => { });\n };\n }, [onBlocksChange, store]);\n\n // Sync external value changes (e.g., auto-save restore) to store\n // Track last-synced value so we don't revert our own internal mutations\n const lastValueRef = useRef<unknown[] | null>(null);\n useEffect(() => {\n const valueArray = Array.isArray(value) ? value : [];\n const lastValueArray = lastValueRef.current || [];\n\n // Deep compare to catch external data changes (e.g. discard draft / auto-save restore)\n if (JSON.stringify(valueArray) !== JSON.stringify(lastValueArray)) {\n const valueArrayCopy = [...valueArray];\n prevBlocksLengthRef.current = valueArrayCopy.length;\n prevBlockIdsRef.current = new Set(valueArrayCopy.map((b: Record<string, unknown>) => b.id));\n store.getState().setBlocks(valueArrayCopy);\n lastValueRef.current = valueArrayCopy;\n isInitializedRef.current = true;\n } else if (valueArray.length === 0 && !isInitializedRef.current) {\n isInitializedRef.current = true;\n lastValueRef.current = []; // Fix for new pages starting with empty arrays\n }\n }, [value, field.name, store]);\n\n // Propagate blocks to parent only when they differ from the last loaded value\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n useEffect(() => {\n if (!onChangeRef.current) return;\n const lastValue = lastValueRef.current;\n if (!lastValue) return; // Wait until initialized\n\n // Deep compare blocks vs lastValue to detect content edits, not just ID changes\n if (JSON.stringify(blocks) !== JSON.stringify(lastValue)) {\n lastValueRef.current = [...blocks]; // Update ref BEFORE firing onChange to prevent loops\n onChangeRef.current(blocks);\n }\n }, [blocks]);\n\n // Determine left border style based on document status\n const getBorderClass = () => {\n if (justSaved) {\n return \"border-l-[3px] border-[var(--kyro-success)]\";\n }\n if (\n documentStatus === \"draft\" ||\n documentStatus === \"scheduled\" ||\n documentStatus === \"archived\"\n ) {\n return \"border-l-[3px] border-amber-500\";\n }\n return \"\";\n };\n\n const handleAddBlock = useCallback(\n (blockType: string) => {\n store.getState().addBlock(blockType);\n },\n [store],\n );\n\n const duplicateBlock = useCallback(\n (blockId: string) => {\n const blockIndex = blocks.findIndex((b) => b.id === blockId);\n if (blockIndex === -1) return;\n\n const blockToClone = blocks[blockIndex];\n\n const cloneBlock = (b: any): any => {\n const newId = Math.random().toString(36).substr(2, 9);\n return {\n ...b,\n id: newId,\n children: b.children ? b.children.map((c: any) => cloneBlock(c)) : b.children,\n data: b.data ? JSON.parse(JSON.stringify(b.data)) : b.data,\n };\n };\n\n const cloned = cloneBlock(blockToClone);\n const newBlocks = [...blocks];\n newBlocks.splice(blockIndex + 1, 0, cloned);\n store.getState().setBlocks(newBlocks);\n },\n [blocks, store],\n );\n\n // Set up dnd-kit sensors\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8,\n },\n }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveDrag(event.active);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n setActiveDrag(null);\n\n if (!over) return;\n\n // Case 1: Dragged from drawer\n if (active.id.toString().startsWith(\"drawer-\")) {\n const blockType = active.id.toString().replace(\"drawer-\", \"\");\n\n // Check if dropped on a container\n if (over.id.toString().startsWith(\"container-\")) {\n const containerId = over.id.toString().replace(\"container-\", \"\");\n const container = blocks.find((b) => b.id === containerId);\n if (container) {\n const newBlock = createNewBlock(blockType);\n store.getState().updateBlock(containerId, {\n children: [...(container.children || []), newBlock],\n });\n }\n } else {\n // Dropped on root level - add as top-level block\n handleAddBlock(blockType);\n }\n return;\n }\n\n // Case 2: Reordering existing blocks\n if (active.id !== over.id) {\n const oldIndex = blocks.findIndex((b) => b.id === active.id);\n const newIndex = blocks.findIndex((b) => b.id === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newBlocks = [...blocks];\n const [movedBlock] = newBlocks.splice(oldIndex, 1);\n newBlocks.splice(newIndex, 0, movedBlock);\n store.getState().setBlocks(newBlocks);\n }\n }\n };\n\n // Render active drag overlay\n const activeBlock = activeDrag\n ? dynamicCategories\n .flatMap((cat) => cat.blocks)\n .find((b) => `drawer-${b.type}` === activeDrag.id) ||\n blocks.find((b) => b.id === activeDrag.id)\n : null;\n\n const activeBlockLabel = activeBlock\n ? \"label\" in activeBlock\n ? (activeBlock as Record<string, unknown>).label\n : activeBlock.type\n : \"Block\";\n\n const borderClass = getBorderClass();\n\n useEffect(() => {\n if (!isDropdownOpen) return;\n const handleClick = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setIsDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [isDropdownOpen]);\n\n return (\n <BlocksContext.Provider value={storeRef.current}>\n <div className=\"kyro-blocks-field\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <label className=\"kyro-form-label\">{field.label || field.name}</label>\n {pickerMode === \"dropdown\" ? (\n <div ref={dropdownRef} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n disabled={disabled}\n className=\"flex items-center gap-1.5 px-3 py-2 text-sm text-[var(--kyro-primary)] hover:bg-[var(--kyro-surface-accent)]/30 rounded-md transition-colors disabled:opacity-50 font-semibold\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" /><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n Add Element\n <ChevronDown className={`w-3.5 h-3.5 transition-transform ${isDropdownOpen ? \"rotate-180\" : \"\"}`} />\n </button>\n\n {isDropdownOpen && (\n <div className=\"absolute right-0 top-full mt-1 w-56 bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 py-2 max-h-80 overflow-y-auto\">\n {dynamicCategories.map((category) => (\n <div key={category.title}>\n {dynamicCategories.length > 1 && (\n <div className=\"px-3 py-1.5 text-[10px] font-bold tracking-wider text-[var(--kyro-text-muted)] uppercase\">\n {category.title}\n </div>\n )}\n {category.blocks.map((block) => (\n <button\n key={block.slug}\n type=\"button\"\n onClick={() => {\n handleAddBlock(block.slug);\n setIsDropdownOpen(false);\n }}\n className=\"w-full flex items-center gap-3 px-3 py-2 text-sm text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)]/50 transition-colors text-left\"\n >\n <span className=\"flex-shrink-0 w-5 h-5 flex items-center justify-center text-[var(--kyro-text-muted)]\">\n {blockIcons[block.slug as keyof typeof blockIcons] || <Box className=\"w-4 h-4\" />}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-semibold truncate\">{block.label}</div>\n {block.admin?.description && (\n <div className=\"text-[10px] text-[var(--kyro-text-muted)] truncate\">{block.admin.description}</div>\n )}\n </div>\n </button>\n ))}\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => setIsDrawerOpen(true)}\n disabled={disabled}\n className=\"flex items-center gap-2 px-3 py-2 text-sm text-[var(--kyro-primary)] hover:bg-[var(--kyro-surface-accent)]/30 rounded-md transition-colors disabled:opacity-50 font-semibold\"\n >\n <Plus className=\"w-4 h-4\" />\n Add Block\n </button>\n )}\n </div>\n\n <div className=\"mb-4\">\n <BlockDrawer\n open={isDrawerOpen}\n onClose={() => setIsDrawerOpen(false)}\n onSelect={handleAddBlock}\n >\n <div className=\"space-y-4\">\n {dynamicCategories.map((category) => (\n <div key={category.title}>\n <h3 className=\"text-xs font-semibold text-[var(--kyro-text-muted)] mb-2 tracking-wider\">\n {category.title}\n </h3>\n <div className=\"grid grid-cols-3 gap-2\">\n {category.blocks.map((block) => (\n <DraggableBlockType\n key={block.slug}\n block={{\n type: block.slug,\n label: block.label,\n description: block.admin?.description || \"\",\n icon: null,\n }}\n onSelect={handleAddBlock}\n >\n <div className=\"w-6 h-6 flex items-center justify-center rounded group-hover:bg-[var(--kyro-primary)]/10 group-hover:text-[var(--kyro-primary)] transition-all duration-300\">\n <span className=\"text-[var(--kyro-text-muted)]\">\n {blockIcons[\n block.slug as keyof typeof blockIcons\n ] || <Box className=\"w-4 h-4\" />}\n </span>\n </div>\n </DraggableBlockType>\n ))}\n </div>\n </div>\n ))}\n </div>\n </BlockDrawer>\n </div>\n\n {/* Block List with Drag-and-Drop */}\n <SortableContext\n items={blocks.map((b) => b.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className={pickerMode === \"dropdown\" ? \"flex flex-wrap gap-1.5\" : \"space-y-4\"}>\n {blocks.map((block, index) => {\n const blockSchema = (field.blocks as any[])?.find(\n (b) => b.slug === block.type\n );\n return (\n <SortableBlock\n key={block.id || index}\n block={block}\n index={index}\n blockSchema={blockSchema}\n editingBlockId={editingBlockId}\n setEditingBlockId={setEditingBlockId}\n onDuplicate={duplicateBlock}\n compact={pickerMode === \"dropdown\"}\n />\n );\n })}\n {blocks.length === 0 && (\n <div className={pickerMode === \"dropdown\" ? \"text-xs text-[var(--kyro-text-muted)] italic py-1\" : \"text-center py-12 text-[var(--kyro-text-muted)] border-2 border-dashed border-[var(--kyro-border)] rounded-lg\"}>\n {pickerMode === \"dropdown\" ? \"No elements added\" : \"Click the button above to add your first block\"}\n </div>\n )}\n </div>\n </SortableContext>\n <DragOverlay>\n {activeDrag && activeBlock && (\n <div className=\"bg-[var(--kyro-surface)] border border-[var(--kyro-primary)] rounded-md p-3 shadow-lg\">\n {(activeBlock as Record<string, unknown>).label || activeBlock.type || \"Block\"}\n </div>\n )}\n </DragOverlay>\n </DndContext>\n {error && <p className=\"kyro-form-error\">{error}</p>}\n </div>\n </BlocksContext.Provider>\n );\n};\n","/**\n * Recursively walks the given value and converts full media upload objects\n * back to their ID strings before sending to the server.\n *\n * The UploadField stores full media objects { id, url, filename, mimeType }\n * in formData for display purposes, but the server expects just the ID string.\n * Without normalization, the server stores the full object as a JSON string,\n * which causes 404s on the next load when trying to fetch the media.\n */\nexport function normalizeUploadFields(value: unknown): unknown {\n if (value === null || value === undefined || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(normalizeUploadFields);\n }\n\n if (typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n\n // Heuristic: detect a full media object by checking for id + url/filename/mimeType\n // and a small number of keys (media objects typically have ~6-8 keys).\n // Also handle bare {id} objects that result from JSONB column conversion.\n const keys = Object.keys(obj);\n const hasId = \"id\" in obj && (typeof obj.id === \"string\" || obj.id === null);\n const hasMediaField = \"url\" in obj || \"filename\" in obj || \"mimeType\" in obj;\n if (hasId && (hasMediaField || keys.length <= 2) && keys.length <= 8) {\n return obj.id;\n }\n\n // Recursively normalize nested objects (tabs, groups, blocks, arrays)\n const result: Record<string, unknown> = {};\n for (const key of keys) {\n result[key] = normalizeUploadFields(obj[key]);\n }\n return result;\n }\n\n return value;\n}\n","import { useCallback, useRef } from \"react\";\n\ntype QueuedFunction = () => Promise<void>;\n\ntype QueueTaskOptions = {\n afterProcess?: () => void;\n beforeProcess?: () => boolean;\n};\n\ntype QueueTask = (fn: QueuedFunction, options?: QueueTaskOptions) => void;\n\n/**\n * A hook that queues async tasks for sequential execution.\n * Only the last task in the queue is ever processed; all prior pending tasks are discarded.\n * This prevents race conditions where multiple autosave fetches could run in parallel.\n *\n * Inspired by Payload's useQueues hook.\n *\n * @returns {queueTask} A function used to queue a task for execution.\n */\nexport function useQueue(): { queueTask: QueueTask } {\n const queue = useRef<QueuedFunction[]>([]);\n const isProcessing = useRef(false);\n\n const queueTask = useCallback<QueueTask>((fn, options) => {\n queue.current.push(fn);\n\n async function processQueue() {\n if (isProcessing.current) return;\n\n if (typeof options?.beforeProcess === \"function\") {\n const shouldContinue = options.beforeProcess();\n if (shouldContinue === false) return;\n }\n\n while (queue.current.length > 0) {\n const latestTask = queue.current.pop();\n queue.current = [];\n\n isProcessing.current = true;\n\n try {\n await latestTask();\n } catch (err) {\n console.error(\"Error in queued function:\", err);\n } finally {\n isProcessing.current = false;\n\n if (typeof options?.afterProcess === \"function\") {\n options.afterProcess();\n }\n }\n }\n }\n\n processQueue();\n }, []);\n\n return { queueTask };\n}\n","import { useEffect, useRef, useCallback } from \"react\";\nimport { useAutoFormStore } from \"../lib/autoform-store\";\nimport { getLastChangeSource, setChangeSource } from \"../lib/change-source\";\nimport { slugifyText } from \"../lib/slugify\";\nimport { resolveUrl, fetchWithAuth } from \"../lib/api\";\nimport { normalizeUploadFields } from \"../lib/normalize-upload-fields\";\nimport { useUIStore } from \"../lib/stores\";\nimport { resolveFieldValue } from \"../lib/resolve-field-value\";\nimport { useQueue } from \"./useQueue\";\n\ninterface UseAutoFormStateProps {\n config: Record<string, unknown>;\n initialData: Record<string, unknown>;\n collectionSlug?: string;\n globalSlug?: string;\n onChange?: (data: Record<string, unknown>) => void;\n onActionSuccess?: (msg: string) => void;\n onActionError?: (msg: string) => void;\n}\n\nexport function useAutoFormState({\n config,\n initialData,\n collectionSlug,\n globalSlug,\n onChange,\n onActionSuccess,\n onActionError,\n}: UseAutoFormStateProps) {\n const store = useAutoFormStore();\n const { confirm } = useUIStore();\n const {\n formData,\n setFormData,\n setField,\n lastSavedData,\n setLastSavedData,\n setHasUnsavedChanges,\n isSlugLocked,\n loadDocument,\n setIsAutoSaving,\n setAutoSaveStatus,\n setVersions,\n setLoadingVersions,\n sidebarCollapsed,\n setSidebarCollapsed,\n getDraftCache,\n setDraftCache,\n clearDraftCache,\n resetForm,\n } = store;\n\n const versionsEnabled = !!config.versions;\n\n // Guard: clear stale formData from a previous page context.\n // For collections, if the loaded document's id doesn't match the expected\n // context key, the singleton zustand store is holding stale data.\n // Globals have no id field and are singleton per slug, so skip this check.\n // Must run in useEffect — calling resetForm() during render triggers\n // \"Cannot update a component while rendering\" React error.\n const currentContextKey = globalSlug || (initialData?.id as string | undefined) || collectionSlug;\n const needsResetRef = useRef(false);\n if (\n !globalSlug &&\n currentContextKey &&\n formData &&\n Object.keys(formData).length > 0 &&\n formData.id !== currentContextKey\n ) {\n needsResetRef.current = true;\n }\n\n useEffect(() => {\n if (needsResetRef.current) {\n needsResetRef.current = false;\n resetForm();\n }\n }, [resetForm]);\n\n const localSaveTimerRef = useRef<NodeJS.Timeout | null>(null);\n const serverSaveTimerRef = useRef<NodeJS.Timeout | null>(null);\n const retryTimerRef = useRef<NodeJS.Timeout | null>(null);\n const isOnlineRef = useRef(typeof navigator !== 'undefined' ? navigator.onLine : true);\n const lastAutoSaveTimeRef = useRef<number>(0);\n const autoSaveSkipRef = useRef<boolean>(false);\n const restorePromptedRef = useRef<string | null>(null);\n const previousFormDataRef = useRef<string>(\"\");\n const astroSyncDataRef = useRef<string>(\"\");\n const { queueTask } = useQueue();\n\n const getDocumentKey = useCallback(\n (id?: string) => {\n if (globalSlug) return `global:${globalSlug}`;\n if (collectionSlug && id) return `${collectionSlug}:${id}`;\n return null;\n },\n [collectionSlug, globalSlug],\n );\n\nconst persistBrowserDraft = useCallback(\n (\n documentKey: string,\n data: Record<string, unknown>,\n options?: { lastSyncedAt?: string | null },\n ) => {\n setDraftCache(documentKey, {\n data,\n baseUpdatedAt: lastSavedData.updatedAt ?? null,\n draftUpdatedAt: new Date().toISOString(),\n lastSyncedAt: options?.lastSyncedAt ?? null,\n });\n },\n [lastSavedData.updatedAt, setDraftCache],\n );\n\n const fetchVersions = useCallback(async () => {\n const url = globalSlug \n ? resolveUrl(`/api/globals/${globalSlug}/versions`)\n : collectionSlug && formData.id \n ? resolveUrl(`/api/${collectionSlug}/${formData.id}/versions`)\n : null;\n\n if (!url) return;\n setLoadingVersions(true);\n try {\n const resp = await fetchWithAuth(url);\n const data = await resp.json();\n setVersions(data.docs || []);\n } catch (e) {\n console.error(\"Failed to fetch versions:\", e);\n } finally {\n setLoadingVersions(false);\n }\n }, [formData.id, collectionSlug, globalSlug, setLoadingVersions, setVersions]);\n\n const performLocalAutoSave = useCallback(() => {\n const state = useAutoFormStore.getState();\n const latestFormData = state.formData;\n if (autoSaveSkipRef.current || !collectionSlug || !latestFormData.id) return;\n if (!state.hasDirtyFields()) return;\n const documentKey = getDocumentKey(latestFormData.id);\n if (documentKey) {\n persistBrowserDraft(documentKey, latestFormData);\n }\n }, [collectionSlug, getDocumentKey, persistBrowserDraft]);\n\n const doAutosaveFetch = useCallback(async (options?: { keepalive?: boolean }) => {\n const state = useAutoFormStore.getState();\n const latestFormData = state.formData;\n const currentLastSaved = state.lastSavedData;\n\n if (autoSaveSkipRef.current || (!versionsEnabled && !!globalSlug)) return;\n if (!globalSlug && (!collectionSlug || !latestFormData.id)) return;\n if (!state.hasDirtyFields()) return;\n\n const documentKey = getDocumentKey(latestFormData.id);\n if (documentKey) {\n persistBrowserDraft(documentKey, latestFormData);\n }\n\n if (!isOnlineRef.current) {\n setAutoSaveStatus(\"offline\");\n return;\n }\n\n setIsAutoSaving(true);\n setAutoSaveStatus(\"saving\");\n state.setBackgroundProcessing(true);\n\n try {\n const url = globalSlug\n ? resolveUrl(`/api/globals/${globalSlug}?autosave=true`)\n : resolveUrl(`/api/${collectionSlug}/${latestFormData.id}?autosave=true`);\n\n const response = await fetchWithAuth(url, {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Draft\": \"true\",\n },\n keepalive: options?.keepalive,\n body: JSON.stringify({\n ...normalizeUploadFields(latestFormData),\n baseUpdatedAt: currentLastSaved.updatedAt ?? null,\n }),\n });\n\n if (response.ok) {\n lastAutoSaveTimeRef.current = Date.now();\n state.setRetryCount(0);\n state.setLastSavedAt(Date.now());\n if (retryTimerRef.current) clearTimeout(retryTimerRef.current);\n\n if (documentKey) {\n setDraftCache(documentKey, {\n data: latestFormData,\n baseUpdatedAt: currentLastSaved.updatedAt ?? null,\n draftUpdatedAt: new Date().toISOString(),\n lastSyncedAt: (await response.clone().json()).data?.updatedAt || new Date().toISOString(),\n });\n }\n setAutoSaveStatus(\"success\");\n setTimeout(() => {\n if (useAutoFormStore.getState().autoSaveStatus === \"success\") {\n setAutoSaveStatus(\"idle\");\n }\n }, 2000);\n } else if (response.status === 409) {\n setAutoSaveStatus(\"conflict\");\n } else {\n throw new Error(`Draft auto-save failed with status ${response.status}`);\n }\n } catch (err) {\n console.error(\"Auto-save failed:\", err);\n const currentState = useAutoFormStore.getState();\n const currentRetryCount = currentState.retryCount;\n if (currentRetryCount < 5) {\n currentState.setRetryCount(currentRetryCount + 1);\n setAutoSaveStatus(\"retrying\");\n const delay = Math.min(1000 * Math.pow(2, currentRetryCount), 60000);\n if (retryTimerRef.current) clearTimeout(retryTimerRef.current);\n retryTimerRef.current = setTimeout(() => performAutosave(options), delay);\n } else {\n setAutoSaveStatus(\"offline\");\n }\n } finally {\n setIsAutoSaving(false);\n useAutoFormStore.getState().setBackgroundProcessing(false);\n }\n }, [\n collectionSlug,\n getDocumentKey,\n globalSlug,\n persistBrowserDraft,\n setAutoSaveStatus,\n setDraftCache,\n setIsAutoSaving,\n versionsEnabled,\n ]);\n\n const performAutosave = useCallback((options?: { keepalive?: boolean }) => {\n queueTask(\n () => doAutosaveFetch(options),\n {\n beforeProcess: () => {\n return true;\n },\n afterProcess: () => {\n // Background processing complete\n },\n },\n );\n }, [doAutosaveFetch, queueTask]);\n\n const saveDocument = useCallback(\n async (dataOverride?: Record<string, unknown>, isDraft = true) => {\n const state = useAutoFormStore.getState();\n const payload = dataOverride || state.formData;\n \n const url = globalSlug \n ? resolveUrl(`/api/globals/${globalSlug}`)\n : resolveUrl(`/api/${collectionSlug}/${payload.id}`);\n\n const response = await fetchWithAuth(\n url,\n {\n method: \"PATCH\",\n headers: { \n \"Content-Type\": \"application/json\",\n \"X-Draft\": String(isDraft),\n },\n body: JSON.stringify({\n ...normalizeUploadFields(payload) as Record<string, unknown>,\n baseUpdatedAt: state.lastSavedData.updatedAt ?? null,\n }),\n },\n );\n\n if (response.status === 409) {\n setAutoSaveStatus(\"conflict\");\n }\n\n return response;\n },\n [collectionSlug, globalSlug, setAutoSaveStatus],\n );\n\n // Track sidebar toggle\n useEffect(() => {\n const handleToggle = () => {\n setSidebarCollapsed(!sidebarCollapsed);\n };\n window.addEventListener(\"toggle-sidebar\", handleToggle);\n return () => window.removeEventListener(\"toggle-sidebar\", handleToggle);\n }, [sidebarCollapsed, setSidebarCollapsed]);\n\n // Track unsaved changes (handled by setField / dirtyFields now)\n\n // Initial data load\n const lastLoadedSlugRef = useRef<string | null>(null);\n const lastInitialDataRef = useRef<string>(\"\");\n const initialDataLoadedRef = useRef(false);\n useEffect(() => {\n const currentSlug = globalSlug || initialData?.id;\n const serialized = JSON.stringify(initialData);\n if (initialDataLoadedRef.current && lastLoadedSlugRef.current === currentSlug && lastInitialDataRef.current === serialized) return;\n\n loadDocument(initialData || {}, initialData || {});\n initialDataLoadedRef.current = true;\n lastLoadedSlugRef.current = currentSlug;\n lastInitialDataRef.current = serialized;\n }, [collectionSlug, formData.id, globalSlug, initialData, loadDocument]);\n\n useEffect(() => {\n if (!collectionSlug || !initialData?.id) return;\n\n const documentKey = getDocumentKey(initialData.id);\n if (!documentKey) return;\n if (restorePromptedRef.current === documentKey) return;\n\n let cancelled = false;\n\n const maybeRestoreDraft = async () => {\n if (!versionsEnabled) return;\n const browserDraft = getDraftCache(documentKey);\n\n if (!browserDraft) return;\n if (JSON.stringify(browserDraft.data) === JSON.stringify(initialData)) {\n clearDraftCache(documentKey);\n return;\n }\n\n restorePromptedRef.current = documentKey;\n\n confirm({\n title: \"Restore draft?\",\n message:\n \"A newer autosaved draft was found for this document. Restore it or discard it and continue with the saved version.\",\n confirmLabel: \"Restore draft\",\n cancelLabel: \"Discard draft\",\n onConfirm: async () => {\n if (cancelled) return;\n const currentFormData = useAutoFormStore.getState().formData;\n const mergedData = { ...currentFormData, ...browserDraft.data };\n setFormData(mergedData);\n onActionSuccess?.(\"Recovered autosaved draft\");\n },\n onCancel: async () => {\n clearDraftCache(documentKey);\n },\n });\n };\n\n maybeRestoreDraft();\n\n return () => {\n cancelled = true;\n };\n }, [\n clearDraftCache,\n collectionSlug,\n confirm,\n getDocumentKey,\n getDraftCache,\n initialData,\n onActionSuccess,\n setFormData,\n versionsEnabled,\n ]);\n\n // Recursively find a field by name inside tabs/group/collapsible\n function findFieldDeep(fields: Record<string, any>[], name: string): Record<string, any> | undefined {\n for (const f of fields) {\n if (f.name === name && f.admin?.autoGenerate === \"title\") return f;\n if (f.type === \"tabs\" && \"tabs\" in f) {\n for (const tab of f.tabs) {\n const found = findFieldDeep(tab.fields, name);\n if (found) return found;\n }\n }\n if ((f.type === \"group\" || f.type === \"collapsible\") && \"fields\" in f) {\n const found = findFieldDeep(f.fields, name);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n // Auto-generate metaTitle\n useEffect(() => {\n const fields = config.fields as Record<string, unknown>[];\n const metaTitleField = findFieldDeep(fields, \"metaTitle\");\n if (!metaTitleField) return;\n\n const titleValue = resolveFieldValue(fields, formData, \"title\");\n const titleStr = titleValue ? String(titleValue) : \"\";\n\n if (titleStr && (!formData.metaTitle || formData.metaTitle === formData._lastMetaTitle)) {\n setField(\"metaTitle\", titleStr);\n }\n }, [formData, config.fields, setField]);\n\n // Auto-generate slug\n useEffect(() => {\n const fields = config.fields as Record<string, unknown>[];\n const slugField = fields.find(\n (f: Record<string, unknown>) => f.name === \"slug\" && f.admin?.autoGenerate,\n );\n if (!slugField?.admin?.autoGenerate) return;\n const sourceField: string = slugField.admin.autoGenerate;\n\n const sourceValue = resolveFieldValue(fields, formData, sourceField);\n\n if (isSlugLocked && sourceValue) {\n const newSlug = slugifyText(sourceValue);\n if (newSlug !== formData.slug) {\n setField(\"slug\", newSlug);\n }\n }\n }, [formData, isSlugLocked, config.fields, setField]);\n\n // Auto-save effect — only starts timers on keystroke-originated changes.\n // Local save fires after 1.5s of inactivity, server save after 8s.\n // Non-keystroke changes (block add/drag, select, checkbox, etc.) do NOT restart auto-save.\n useEffect(() => {\n if (sidebarCollapsed) return;\n if (!globalSlug && (!collectionSlug || !formData.id)) return;\n\n const state = useAutoFormStore.getState();\n if (!state.hasDirtyFields()) return;\n\n // Only schedule/reschedule on keystroke-originated changes\n if (getLastChangeSource() !== \"keystroke\") return;\n setChangeSource(\"other\");\n\n // Compare serialized form data to avoid scheduling for unchanged metadata\n const serialized = JSON.stringify(formData);\n if (serialized === previousFormDataRef.current) return;\n\n if (localSaveTimerRef.current) clearTimeout(localSaveTimerRef.current);\n localSaveTimerRef.current = setTimeout(performLocalAutoSave, 1500);\n\n // Queue autosave via the queue (debounced at 8s)\n if (serverSaveTimerRef.current) clearTimeout(serverSaveTimerRef.current);\n serverSaveTimerRef.current = setTimeout(() => {\n previousFormDataRef.current = serialized;\n performAutosave();\n }, 8000);\n }, [formData, sidebarCollapsed, collectionSlug, globalSlug, performLocalAutoSave, performAutosave]);\n\n useEffect(() => {\n if (!globalSlug && (!collectionSlug || !formData.id)) return;\n\n const flushDraft = () => {\n if (autoSaveSkipRef.current) return;\n const state = useAutoFormStore.getState();\n if (!state.hasDirtyFields()) return;\n void performAutosave({ keepalive: true });\n };\n\n const handleVisibilityChange = () => {\n if (document.hidden) {\n flushDraft();\n }\n };\n\n const handleOnline = () => {\n isOnlineRef.current = true;\n flushDraft();\n };\n\n const handleOffline = () => {\n isOnlineRef.current = false;\n const state = useAutoFormStore.getState();\n if (state.hasDirtyFields()) {\n state.setAutoSaveStatus(\"offline\");\n }\n };\n\n window.addEventListener(\"blur\", flushDraft);\n window.addEventListener(\"pagehide\", flushDraft);\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n\n return () => {\n window.removeEventListener(\"blur\", flushDraft);\n window.removeEventListener(\"pagehide\", flushDraft);\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n };\n }, [collectionSlug, globalSlug, formData.id, performAutosave]);\n\n // Astro sync — avoid ping-pong loop with DetailView's setData\n useEffect(() => {\n const serialized = JSON.stringify(formData);\n if (serialized === astroSyncDataRef.current) return;\n astroSyncDataRef.current = serialized;\n\n const hiddenInput = document.getElementById(\"form-data\") as HTMLInputElement;\n if (hiddenInput) {\n hiddenInput.value = serialized;\n }\n onChange?.(formData);\n }, [formData, onChange]);\n\n // Fetch versions on load\n useEffect(() => {\n if (globalSlug || formData.id) fetchVersions();\n }, [formData.id, globalSlug, fetchVersions]);\n\n // Derived status values the UI can use for badges and button state\n const documentStatus: 'draft' | 'published' | 'archived' | undefined = (() => {\n if (!formData.id && !globalSlug) return 'draft';\n if (!versionsEnabled) return 'published';\n return (formData.status as 'draft' | 'published' | undefined) || 'published';\n })();\n\n const hasUnpublishedChanges =\n (!!formData.id || !!globalSlug) && documentStatus === 'draft';\n\n return {\n ...store,\n fetchVersions,\n performAutoSave: performAutosave,\n saveDocument,\n autoSaveSkipRef,\n lastAutoSaveTimeRef,\n documentStatus,\n hasUnpublishedChanges,\n versionsEnabled,\n };\n}\n","import React, { useState, useRef, useEffect, type ReactNode } from \"react\";\n\ninterface DropdownProps {\n trigger: ReactNode;\n children: ReactNode;\n align?: \"left\" | \"right\";\n direction?: \"up\" | \"down\";\n}\n\nexport function Dropdown({\n trigger,\n children,\n align = \"right\",\n direction = \"up\",\n}: DropdownProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [open]);\n\n return (\n <div className=\"relative\" ref={ref}>\n <div onClick={() => setOpen(!open)} className=\"cursor-pointer\">\n {trigger}\n </div>\n {open && (\n <div\n className={`absolute z-[100] min-w-[200px] py-2 bg-[var(--kyro-surface)] rounded-2xl shadow-2xl border border-[var(--kyro-border)] animate-in fade-in zoom-in-95 duration-100 ${\n align === \"right\" ? \"right-0\" : \"left-0\"\n } ${\n direction === \"down\" ? \"top-full mt-2\" : \"bottom-full mb-2\"\n }`}\n onClick={() => setOpen(false)}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\ninterface DropdownItemProps {\n children: ReactNode;\n onClick?: () => void;\n icon?: ReactNode;\n danger?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\nexport function DropdownItem({\n children,\n onClick,\n icon,\n danger,\n disabled,\n className = \"\",\n}: DropdownItemProps) {\n return (\n <div className=\"px-1.5\">\n <button type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={`w-full flex items-center gap-3 px-3 py-2.5 text-[11px] font-medium tracking-wide text-left transition-all rounded-xl ${danger\n ? \"text-red-500 hover:bg-red-500/10\"\n : \"text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)]\"\n } ${disabled ? \"opacity-50 cursor-not-allowed\" : \"\"} ${className}`}\n >\n {icon && <span className=\"w-4 h-4 opacity-70\">{icon}</span>}\n <span className=\"flex-1\">{children}</span>\n </button>\n </div>\n );\n}\n\nexport function DropdownSeparator() {\n return <div className=\"my-1 border-t border-[var(--kyro-border)] opacity-50\" />;\n}\n","import React from \"react\";\nimport type { ReactNode } from \"react\";\nimport { Dropdown } from \"./Dropdown\";\nimport { Spinner } from \"./Spinner\";\n\nexport type SplitButtonStatus = \"draft\" | \"published\" | \"scheduled\" | \"archived\";\nexport type SplitButtonSaveStatus = \"idle\" | \"saving\" | \"saved\" | \"error\";\n\nexport interface SplitButtonProps {\n /** Current publish status of the document */\n status: SplitButtonStatus;\n /** Live save operation status driven by the parent */\n saveStatus: SplitButtonSaveStatus;\n /** True when the form has unsaved changes vs last persisted version */\n hasChanges: boolean;\n /** Called when the main publish button is clicked */\n onPublish: () => void;\n /** Publish-variant items for the chevron dropdown (Save as Draft, Schedule) */\n children?: ReactNode;\n disabled?: boolean;\n direction?: \"up\" | \"down\";\n}\n\nexport function SplitButton({\n status,\n saveStatus,\n hasChanges,\n onPublish,\n children,\n disabled,\n direction = \"down\",\n}: SplitButtonProps) {\n const isPublishedIdle =\n status === \"published\" && !hasChanges && saveStatus !== \"saving\" && saveStatus !== \"error\";\n\n const isDisabled = disabled || saveStatus === \"saving\" || isPublishedIdle;\n\n // ── button colour ──────────────────────────────────────────────────────────\n const btnBase =\n \"kyro-btn kyro-btn-sm text-[11px] font-regular tracking-widest transition-all duration-300 rounded-lg\";\n\n const getBtnClass = () => {\n if (saveStatus === \"saving\") return `${btnBase} bg-[var(--kyro-primary)]/70 border-[var(--kyro-primary)]/70 text-[var(--kyro-sidebar-text-active)] cursor-wait`;\n if (saveStatus === \"saved\") return `${btnBase} bg-[var(--kyro-success)] border-[var(--kyro-success)] text-[var(--kyro-sidebar-text-active)]`;\n if (saveStatus === \"error\") return `${btnBase} bg-[var(--kyro-error)] border-[var(--kyro-error)] text-[var(--kyro-sidebar-text-active)]`;\n if (isPublishedIdle) return `${btnBase} bg-[var(--kyro-gray-200)] border-[var(--kyro-gray-200)] text-[var(--kyro-text-muted)] cursor-not-allowed`;\n // has changes → accent\n return `${btnBase} bg-[var(--kyro-primary)] border-[var(--kyro-primary)] text-[var(--kyro-sidebar-text-active)] hover:bg-[var(--kyro-primary-hover)]`;\n };\n\n const chevronBase =\n \"kyro-btn kyro-btn-md px-2 rounded-l-none border-l-[1px] border-white/20 transition-all duration-300\";\n\n const getChevronClass = () => {\n if (saveStatus === \"saving\") return `${chevronBase} bg-[var(--kyro-primary)]/70 text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-primary)]/70`;\n if (saveStatus === \"saved\") return `${chevronBase} bg-[var(--kyro-success)] text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-success)]`;\n if (saveStatus === \"error\") return `${chevronBase} bg-[var(--kyro-error)] text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-error)]`;\n if (isPublishedIdle) return `${chevronBase} bg-[var(--kyro-gray-200)] text-[var(--kyro-text-muted)] border-[var(--kyro-gray-200)]`;\n return `${chevronBase} bg-[var(--kyro-primary)] text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-primary)] hover:bg-[var(--kyro-primary-hover)]`;\n };\n\n // ── label ──────────────────────────────────────────────────────────────────\n const getLabel = () => {\n if (saveStatus === \"saving\") return \"Publishing...\";\n if (saveStatus === \"saved\") return \"Published ✓\";\n if (saveStatus === \"error\") return \"Retry\";\n if (isPublishedIdle) return \"Published\";\n return \"Publish Changes\";\n };\n\n return (\n <div className=\"inline-flex items-center\">\n {/* Main publish button */}\n <button\n type=\"button\"\n onClick={onPublish}\n disabled={isDisabled}\n className={`${getBtnClass()} ${!children ? \"rounded-r-lg border-r border-[var(--kyro-border)]\" : \"\"}`}\n >\n {saveStatus === \"saving\" && <Spinner size=\"sm\" className=\"inline mr-1.5\" />}\n {isPublishedIdle && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" className=\"inline mr-1\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n {getLabel()}\n </button>\n\n {/* Chevron → publish-variant actions only */}\n {children && (\n <Dropdown\n trigger={\n <button type=\"button\" className={getChevronClass()} disabled={saveStatus === \"saving\"}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n }\n direction={direction}\n >\n {children}\n </Dropdown>\n )}\n </div>\n );\n}\n\n","import React from \"react\";\n\ninterface SeoPreviewProps {\n title: string;\n description: string;\n slug: string;\n}\n\nexport const SeoPreview = ({ title, description, slug }: SeoPreviewProps) => (\n <div className=\"bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-lg p-6 max-w-2xl shadow-sm transition-colors duration-300\">\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"w-7 h-7 bg-[var(--kyro-bg-secondary)] rounded-full flex items-center justify-center text-[10px] text-[var(--kyro-text-primary)] font-medium border border-[var(--kyro-border)]\">\n K\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-[var(--kyro-text-primary)] leading-tight\">\n kyro-cms.com\n </span>\n <span className=\"text-[12px] text-[var(--kyro-text-secondary)] leading-tight opacity-80\">\n https://kyro-cms.com › posts › {slug}\n </span>\n </div>\n </div>\n <h3 className=\"text-[20px] text-[#2563eb] dark:text-[#60a5fa] font-medium hover:underline cursor-pointer mb-1 leading-tight transition-colors\">\n {title}\n </h3>\n <p className=\"text-[14px] text-[var(--kyro-text-secondary)] leading-relaxed line-clamp-2\">\n {description}\n </p>\n </div>\n);\n","import React, { useState } from \"react\";\nimport type { Field } from \"@kyro-cms/core/client\";\nimport { SeoPreview } from \"../ui/SeoPreview\";\n\ninterface TabsLayoutProps {\n field: Field;\n formData: Record<string, unknown>;\n onTabDataChange: (value: unknown) => void;\n renderField: (\n field: Field,\n parentData: Record<string, unknown>,\n onChange: (value: unknown) => void,\n ) => React.ReactNode;\n}\n\nexport function TabsLayout({\n field,\n formData,\n onTabDataChange,\n renderField,\n}: TabsLayoutProps) {\n const [activeTab, setActiveTab] = useState(0);\n\n const fieldTabs = (field as Field & { tabs?: { label: string; fields: Field[] }[] }).tabs || [];\n const currentTab = fieldTabs[activeTab] || fieldTabs[0];\n\n // Tab data is stored nested under field.name when present\n const tabData: Record<string, unknown> = field.name\n ? (formData[field.name] as Record<string, unknown>) || {}\n : formData;\n\n return (\n <div className=\"space-y-8\">\n <div className=\"flex items-center gap-2 border-b border-[var(--kyro-border)] mb-6 overflow-x-auto hide-scrollbar\">\n {fieldTabs.map((tab: { label: string }, index: number) => (\n <button\n key={index}\n type=\"button\"\n className={`px-6 py-3 text-sm tracking-widest font-medium transition-all border-b-2 -mb-[1px] whitespace-nowrap ${activeTab === index\n ? \"border-[var(--kyro-primary)] text-[var(--kyro-primary)]\"\n : \"border-transparent text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] opacity-60 hover:opacity-100\"\n }`}\n onClick={() => setActiveTab(index)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div className=\"space-y-6\">\n {currentTab?.fields.map((f: Field) =>\n renderField(f, tabData, onTabDataChange),\n )}\n </div>\n\n {currentTab?.label === \"SEO\" && (\n <div className=\"mt-12 pt-8 border-t border-[var(--kyro-border)]\">\n <h4 className=\"text-[10px] font-bold text-[var(--kyro-text-secondary)] tracking-[0.2em] mb-6 opacity-50\">\n Live Google Preview\n </h4>\n <SeoPreview\n title={String(\n (typeof tabData.metaTitle === \"object\" ? \"\" : tabData.metaTitle) ||\n (typeof tabData.title === \"object\" ? \"\" : tabData.title) ||\n \"Untitled\"\n )}\n description={String(\n (typeof tabData.metaDescription === \"object\" ? \"\" : tabData.metaDescription) ||\n \"Please enter a description...\"\n )}\n slug={String(\n (typeof formData.slug === \"object\" ? \"\" : formData.slug) ||\n \"your-slug\"\n )}\n />\n </div>\n )}\n </div>\n );\n}\n","import { ChevronRight, Check, ExternalLink, X } from \"./ui/icons\";\nimport { useState, useRef, useEffect } from \"react\";\nimport type {\n CollectionConfig,\n GlobalConfig,\n Field,\n Block,\n} from \"@kyro-cms/core/client\";\n\ntype View = \"edit\" | \"version\" | \"api\";\nimport { UploadField } from \"./fields/UploadField\";\nimport { CodeField } from \"./fields\";\nimport NumberField from \"./fields/NumberField\";\nimport CheckboxField from \"./fields/CheckboxField\";\nimport SelectField from \"./fields/SelectField\";\nimport DateField from \"./fields/DateField\";\nimport { MarkdownField } from \"./fields/MarkdownField\";\nimport TextField from \"./fields/TextField\";\nimport { globals, collections } from \"../lib/config\";\nimport { slugifyText } from \"../lib/slugify\";\nimport { resolveUrl, apiGet, apiDelete, fetchWithAuth } from \"../lib/api\";\nimport { Shimmer } from \"./ui/Shimmer\";\nimport { normalizeUploadFields } from \"../lib/normalize-upload-fields\";\nimport { useAutoFormStore } from \"../lib/autoform-store\";\nimport { useAutoFormState } from \"../hooks/useAutoFormState\";\nimport { useUIStore, toast } from \"../lib/stores\";\nimport { EmptyState } from \"./ui/EmptyState\";\n\nimport { adminPath as ADMIN_BASE, apiPath as API_BASE } from \"../lib/paths\";\n\nimport { BlocksField } from \"./fields/BlocksField\";\nimport { ConfirmModal, Modal as UIModal } from \"./ui/Modal\";\nimport { ListField } from \"./fields/ListField\";\nimport { RelationshipBlockField } from \"./fields/RelationshipBlockField\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { Dropdown, DropdownItem, DropdownSeparator } from \"./ui/Dropdown\";\nimport { SplitButton } from \"./ui/SplitButton\";\nimport type { SplitButtonStatus } from \"./ui/SplitButton\";\nimport { TabsLayout } from \"./fields/TabsLayout\";\nimport { GroupLayout } from \"./fields/GroupLayout\";\nimport { ArrayLayout } from \"./fields/ArrayLayout\";\n\ninterface AutoFormProps {\n config: CollectionConfig | GlobalConfig;\n data?: Record<string, unknown>;\n errors?: Record<string, string>;\n onChange?: (data: Record<string, unknown>) => void;\n disabled?: boolean;\n collectionSlug?: string;\n globalSlug?: string;\n documentId?: string;\n documentName?: string;\n layout?: \"split\" | \"single\";\n onActionSuccess?: (message: string) => void;\n onActionError?: (message: string) => void;\n justSaved?: boolean;\n documentStatus?: string;\n}\n\nexport function AutoForm({\n config: propConfig,\n data: initialData = {},\n errors = {},\n onChange,\n disabled: propDisabled,\n collectionSlug,\n globalSlug,\n documentId,\n documentName,\n layout = \"split\",\n onActionSuccess,\n onActionError,\n justSaved,\n}: AutoFormProps) {\n // Resolve the \"live\" config to preserve functions (admin.condition) lost during prop serialization\n const activeConfig = globalSlug\n ? globals[globalSlug]\n : collectionSlug\n ? collections[collectionSlug]\n : propConfig;\n const config = activeConfig || propConfig;\n\n\n const { confirm } = useUIStore();\n\n const {\n formData,\n lastSavedData,\n hasUnsavedChanges,\n isAutoSaving,\n backgroundProcessing,\n autoSaveStatus,\n lastSavedAt,\n retryCount,\n sidebarCollapsed,\n setSidebarCollapsed,\n activeTab,\n setActiveTab,\n isSlugLocked,\n setIsSlugLocked,\n view,\n setView,\n isDropdownOpen,\n setIsDropdownOpen,\n versions,\n loadingVersions,\n showPreview,\n setShowPreview,\n isMenuOpen,\n setIsMenuOpen,\n loadingFields,\n setLoadingFields,\n compareMode,\n setCompareMode,\n compareSelected,\n setCompareSelected,\n compareDiffs,\n setCompareDiffs,\n loadingDiffs,\n setLoadingDiffs,\n setField,\n setFormData,\n markSaved,\n setLastSavedData,\n setAutoSaveStatus,\n fetchVersions,\n saveDocument,\n autoSaveSkipRef,\n lastAutoSaveTimeRef,\n documentStatus,\n hasUnpublishedChanges,\n versionsEnabled,\n } = useAutoFormState({\n config,\n initialData,\n collectionSlug,\n globalSlug,\n onChange,\n onActionSuccess,\n onActionError,\n });\n\n const menuRef = useRef<HTMLDivElement>(null);\n const scheduleRef = useRef<HTMLDivElement>(null);\n const [showSchedulePicker, setShowSchedulePicker] = useState(false);\n const [localSaveStatus, setLocalSaveStatus] = useState<\"idle\" | \"saving\" | \"saved\" | \"error\">(\"idle\");\n const [now, setNow] = useState(Date.now());\n const disabled = propDisabled;\n const [clientLoading, setClientLoading] = useState(false);\n\n // Client-side fetch when SSR didn't provide data\n useEffect(() => {\n const shouldFetchCollection = collectionSlug && documentId && documentId !== \"new\";\n const shouldFetchGlobal = globalSlug;\n if (!shouldFetchCollection && !shouldFetchGlobal) return;\n if (initialData && Object.keys(initialData).length > 0) return;\n\n setClientLoading(true);\n const url = globalSlug\n ? `/api/globals/${globalSlug}`\n : `/api/${collectionSlug}/${documentId}`;\n\n apiGet<{ data?: Record<string, unknown> }>(url, { autoToast: false })\n .then((result) => {\n const docData = result.data || {};\n setFormData(docData);\n setClientLoading(false);\n })\n .catch(() => {\n setClientLoading(false);\n });\n }, [collectionSlug, documentId, globalSlug, initialData]);\n\n // Tick every 10s so the \"saved X ago\" label stays fresh\n useEffect(() => {\n const id = setInterval(() => setNow(Date.now()), 10_000);\n return () => clearInterval(id);\n }, []);\n\n const resolveAdminFlag = (\n value: boolean | ((\n data: Record<string, unknown>,\n siblingData: Record<string, unknown>,\n ) => boolean) | undefined,\n currentData: Record<string, unknown>,\n ): boolean => {\n if (typeof value === \"function\") {\n try {\n return value(formData, currentData);\n } catch (error) {\n console.warn(\"Error evaluating admin runtime flag:\", error);\n return false;\n }\n }\n return Boolean(value);\n };\n\n const handleRestoreVersion = (versionId: string) => {\n confirm({\n title: \"Restore Version\",\n message: \"Are you sure you want to restore this version? This will overwrite your current changes.\",\n onConfirm: async () => {\n try {\n const url = globalSlug\n ? resolveUrl(`/api/globals/${globalSlug}/versions/${versionId}/restore`)\n : resolveUrl(`/api/${collectionSlug}/${formData.id}/versions/${versionId}/restore`);\n\n // Try RESTful URL first\n let resp = await fetchWithAuth(url, { method: \"POST\" });\n\n // Fallback to legacy action-based URL for Collections if needed\n if (!resp.ok && collectionSlug) {\n resp = await fetchWithAuth(\n resolveUrl(`/api/${collectionSlug}/${formData.id}/versions`),\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ versionId, action: \"restore\" }),\n },\n );\n }\n\n const result = await resp.json();\n if (result.data) {\n const restoredData = { ...formData, ...result.data };\n setFormData(restoredData);\n useAutoFormStore.getState().loadDocument(restoredData, restoredData);\n onActionSuccess?.(\"Version restored successfully\");\n fetchVersions();\n setView(\"edit\");\n } else {\n toast.error(result.error || \"Failed to restore version\");\n }\n } catch (err) {\n console.error(\"Failed to restore version:\", err);\n toast.error(\"Failed to restore version\");\n }\n }\n });\n };\n\n const handleCompareVersions = async () => {\n if (compareSelected.length !== 2) return;\n setLoadingDiffs(true);\n try {\n const resp = await fetchWithAuth(\n resolveUrl(`/api/${collectionSlug}/${formData.id}/versions?compareA=${compareSelected[0]}&compareB=${compareSelected[1]}`),\n );\n const data = await resp.json();\n setCompareDiffs(data.diffs || []);\n } catch (e) {\n console.error(\"Compare failed:\", e);\n setCompareDiffs([]);\n } finally {\n setLoadingDiffs(false);\n }\n };\n\n const toggleCompareSelection = (versionId: string) => {\n setCompareSelected((prev) => {\n if (prev.includes(versionId)) {\n return prev.filter((id) => id !== versionId);\n }\n if (prev.length >= 2) {\n return [prev[1], versionId];\n }\n return [...prev, versionId];\n });\n };\n\n useEffect(() => {\n const handleShortcuts = (e: KeyboardEvent) => {\n // Cmd/Ctrl + S = Save Draft\n if ((e.metaKey || e.ctrlKey) && e.key === \"s\") {\n e.preventDefault();\n handleSaveDraft();\n }\n // Cmd/Ctrl + Shift + P = Publish Changes\n if ((e.metaKey || e.ctrlKey) && e.shiftKey && (e.key === \"P\" || e.key === \"p\")) {\n e.preventDefault();\n (document.getElementById(\"btn-publish\") as HTMLButtonElement | null)?.click();\n }\n // Cmd/Ctrl + P (no shift) = Toggle Preview\n if ((e.metaKey || e.ctrlKey) && !e.shiftKey && e.key === \"p\") {\n e.preventDefault();\n setShowPreview((prev) => !prev);\n }\n // Keys 1, 2, 3 = Tab Switching\n if (\n document.activeElement?.tagName !== \"INPUT\" &&\n document.activeElement?.tagName !== \"TEXTAREA\"\n ) {\n if (e.key === \"1\") setView(\"edit\");\n if (e.key === \"2\") setView(\"version\");\n if (e.key === \"3\") setView(\"api\");\n }\n };\n window.addEventListener(\"keydown\", handleShortcuts);\n return () => window.removeEventListener(\"keydown\", handleShortcuts);\n }, []);\n\n // Listen for external \"View History\" trigger from ActionBar\n useEffect(() => {\n const handler = () => setView(\"version\");\n window.addEventListener(\"kyro:show-version-history\", handler);\n return () => window.removeEventListener(\"kyro:show-version-history\", handler);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsMenuOpen(false);\n }\n };\n if (isMenuOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }\n }, [isMenuOpen]);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (scheduleRef.current && !scheduleRef.current.contains(e.target as Node)) {\n setShowSchedulePicker(false);\n }\n };\n if (showSchedulePicker) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }\n }, [showSchedulePicker]);\n\n const handleCreateNew = () => {\n if (hasUnsavedChanges) {\n confirm({\n title: \"Unsaved Changes\",\n message: \"You have unsaved changes. Save before creating new?\",\n onConfirm: async () => {\n await handleSaveDraft();\n await new Promise((r) => setTimeout(r, 1000));\n window.location.href = `${ADMIN_BASE}/${collectionSlug}/new`;\n },\n });\n } else {\n window.location.href = `${ADMIN_BASE}/${collectionSlug}/new`;\n }\n };\n\n const handleDuplicate = () => {\n confirm({\n title: \"Duplicate Document\",\n message: \"Are you sure you want to duplicate this document?\",\n onConfirm: async () => {\n try {\n const { id, createdAt, updatedAt, ...duplicateData } = formData;\n const normalizedData = normalizeUploadFields(duplicateData) as Record<string, unknown>;\n const response = await fetchWithAuth(`/api/${collectionSlug}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n ...normalizedData,\n title: `${duplicateData.title || duplicateData.name || \"Copy\"} (Copy)`,\n slug: `${duplicateData.slug || \"copy\"}-${Date.now()}`,\n status: \"draft\",\n }),\n });\n\n if (response.ok) {\n const result = await response.json();\n onActionSuccess?.(\"Document duplicated successfully\");\n if (result.data?.id) {\n window.location.href = `${ADMIN_BASE}/${collectionSlug}/${result.data.id}`;\n }\n } else {\n const error = await response.json();\n toast.error(error.error || \"Failed to duplicate document\");\n }\n } catch (err) {\n toast.error(\"Failed to duplicate document\");\n }\n },\n });\n };\n\n const handleDelete = () => {\n confirm({\n title: \"Delete Document\",\n message: \"Delete this document? This cannot be undone. Are you absolutely sure?\",\n variant: \"danger\",\n onConfirm: async () => {\n try {\n await apiDelete(`/api/${collectionSlug}/${formData.id}`);\n window.location.href = `${ADMIN_BASE}/${collectionSlug}`;\n } catch (err) {\n toast.error((err as Error).message || \"Failed to delete document\");\n }\n },\n });\n };\n\n const handleUnpublish = () => {\n confirm({\n title: \"Unpublish Document\",\n message: \"Unpublish this document?\",\n onConfirm: async () => {\n try {\n const response = await saveDocument(\n { ...formData, status: 'draft' } as Record<string, unknown>,\n false,\n );\n if (response?.ok) {\n onActionSuccess?.(\"Document unpublished successfully\");\n location.reload();\n } else {\n const error = await response?.json().catch(() => ({}));\n toast.error(error?.error || \"Failed to unpublish\");\n }\n } catch (err) {\n toast.error(\"Failed to unpublish\");\n }\n },\n });\n };\n\n const handleSaveDraft = async () => {\n const isNewDoc = !formData.id;\n autoSaveSkipRef.current = true;\n setLocalSaveStatus(\"saving\");\n\n try {\n const data = normalizeUploadFields({ ...formData }) as Record<string, unknown>;\n const isPost = isNewDoc && !globalSlug;\n\n const response = isPost\n ? await fetchWithAuth(`/api/${collectionSlug}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(data),\n })\n : await saveDocument(data);\n\n if (response.ok) {\n const result = await response.json();\n const savedData = result.data || data;\n setFormData({ ...formData, ...savedData });\n setLastSavedData({ ...formData, ...savedData });\n lastAutoSaveTimeRef.current = Date.now();\n setAutoSaveStatus(\"success\");\n setLocalSaveStatus(\"saved\");\n if (versionsEnabled) fetchVersions();\n setTimeout(() => {\n setAutoSaveStatus(\"idle\");\n setLocalSaveStatus(\"idle\");\n }, 2000);\n onActionSuccess?.(\n isPost ? \"Document created successfully\" : \"Changes saved\",\n );\n if (isPost) {\n setTimeout(() => {\n window.location.href = `${ADMIN_BASE}/${collectionSlug}`;\n }, 800);\n }\n } else {\n const error = await response.json();\n if (response.status === 409) {\n setAutoSaveStatus(\"conflict\");\n }\n setLocalSaveStatus(\"error\");\n toast.error(error.error || \"Failed to save\");\n setTimeout(() => setLocalSaveStatus(\"idle\"), 3000);\n }\n } catch (err) {\n setLocalSaveStatus(\"error\");\n toast.error(\"Failed to save document\");\n setTimeout(() => setLocalSaveStatus(\"idle\"), 3000);\n } finally {\n autoSaveSkipRef.current = false;\n }\n };\n\n const handlePublish = async () => {\n const isNewDoc = !formData.id;\n autoSaveSkipRef.current = true;\n setLocalSaveStatus(\"saving\");\n\n try {\n if (isNewDoc && !globalSlug) {\n // Create then immediately publish\n const data = normalizeUploadFields({ ...formData }) as Record<string, unknown>;\n const response = await fetchWithAuth(`/api/${collectionSlug}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n if (response.status === 409) setAutoSaveStatus(\"conflict\");\n setLocalSaveStatus(\"error\");\n toast.error(error.error || \"Failed to create document\");\n setTimeout(() => setLocalSaveStatus(\"idle\"), 3000);\n return;\n }\n const result = await response.json();\n const savedData = result.data || data;\n setFormData({ ...formData, ...savedData });\n setLastSavedData({ ...formData, ...savedData });\n }\n\n // Save and publish (X-Draft: false writes to main doc + versions table)\n const data = normalizeUploadFields({ ...formData }) as Record<string, unknown>;\n const response = await saveDocument(data, false);\n\n if (response?.ok) {\n setLocalSaveStatus(\"saved\");\n onActionSuccess?.(\"Published successfully\");\n await new Promise((r) => setTimeout(r, 1000));\n location.reload();\n } else {\n const error = await response?.json().catch(() => ({}));\n if (response?.status === 409) setAutoSaveStatus(\"conflict\");\n setLocalSaveStatus(\"error\");\n toast.error(error?.error || \"Failed to publish\");\n setTimeout(() => setLocalSaveStatus(\"idle\"), 3000);\n }\n } catch (err) {\n setLocalSaveStatus(\"error\");\n toast.error(\"Failed to publish\");\n setTimeout(() => setLocalSaveStatus(\"idle\"), 3000);\n } finally {\n autoSaveSkipRef.current = false;\n }\n };\n\n const handleSchedulePublish = async (scheduledFor: string) => {\n const isNewDoc = !formData.id;\n // Save the document first with _schedulePublishAt metadata\n autoSaveSkipRef.current = true;\n\n try {\n const data = {\n ...normalizeUploadFields({ ...formData }) as Record<string, unknown>,\n _schedulePublishAt: scheduledFor,\n };\n\n if (isNewDoc && !globalSlug) {\n const response = await fetchWithAuth(`/api/${collectionSlug}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n const err = await response.json().catch(() => ({}));\n toast.error(err.error || \"Failed to schedule publish\");\n return;\n }\n } else {\n const response = await saveDocument(data);\n if (!response.ok) {\n const err = await response.json().catch(() => ({}));\n toast.error(err.error || \"Failed to schedule publish\");\n return;\n }\n }\n\n onActionSuccess?.(`Scheduled publish for ${new Date(scheduledFor).toLocaleString()}`);\n setShowSchedulePicker(false);\n } catch {\n toast.error(\"Failed to schedule publish\");\n } finally {\n autoSaveSkipRef.current = false;\n }\n };\n\n const handleFieldChange = (fieldName: string, value: unknown) => {\n setField(fieldName, value);\n };\n\n const renderField = (\n field: Field,\n parentData?: Record<string, unknown>,\n onParentChange?: (val: unknown) => void,\n ): React.ReactNode => {\n const currentData = parentData !== undefined ? parentData : formData;\n const isHidden = resolveAdminFlag((field.hidden !== undefined ? field.hidden : field.admin?.hidden) as any, currentData);\n if (isHidden) return null;\n\n const isReadOnly = resolveAdminFlag((field.readOnly !== undefined ? field.readOnly : field.admin?.readOnly) as any, currentData);\n const effectiveDisabled = Boolean(disabled || isReadOnly);\n\n // Evaluate display condition if present\n // For conditional fields, pass formData as the root context (first arg)\n // and currentData as the sibling context (second arg)\n if (field.admin?.condition) {\n if (typeof field.admin.condition === \"function\") {\n try {\n // Compatibility wrapper: pass { values: formData, ...formData } to support both old and new signatures\n const evalData = { values: formData || {}, ...(formData || {}) };\n const shouldShow = field.admin.condition(evalData, currentData);\n if (!shouldShow) {\n return null;\n }\n } catch (e) {\n console.warn(`Condition error for field ${field.name}:`, e);\n // Show the field if there's an error evaluating the condition\n }\n } else if (typeof field.admin.condition === \"object\") {\n try {\n const cond = field.admin.condition as any;\n const targetField = cond.field;\n\n // Get target field value, prioritizing sibling context (currentData) then root context (formData)\n const val = (currentData && currentData[targetField] !== undefined)\n ? currentData[targetField]\n : (formData && formData[targetField] !== undefined ? formData[targetField] : undefined);\n\n let shouldShow = true;\n if (\"equals\" in cond) {\n shouldShow = val === cond.equals;\n } else if (\"notEquals\" in cond) {\n shouldShow = val !== cond.notEquals;\n } else if (\"in\" in cond && Array.isArray(cond.in)) {\n shouldShow = cond.in.includes(val);\n }\n\n if (!shouldShow) {\n return null;\n }\n } catch (e) {\n console.warn(`Declarative condition error for field ${field.name}:`, e);\n }\n }\n }\n\n const value = currentData[field.name!];\n const error = errors[field.name!];\n\n const onFieldChange = (val: unknown) => {\n if (onParentChange) {\n onParentChange({ ...currentData, [field.name!]: val });\n } else {\n handleFieldChange(field.name!, val);\n }\n };\n\n if (field.type === \"row\" && \"fields\" in field) {\n const rowFields = (field as Field & { fields?: Field[] }).fields;\n return (\n <div\n key={field.name || `row-${Math.random()}`}\n className=\"kyro-form-row flex flex-col md:flex-row gap-4 md:gap-6 items-start md:items-end w-full\"\n >\n {rowFields?.map((f: Field) => {\n const fAdmin = f.admin || {};\n const actionUrl = fAdmin?.action as string | undefined;\n\n if ((f.type === \"button\" || f.type === \"action\") && actionUrl) {\n const siblingEmailField = rowFields?.find(\n (ff: Field) => ff.type === \"email\",\n );\n return (\n <div key={f.name} className=\"flex-shrink-0\">\n <button\n type=\"button\"\n onClick={async () => {\n const rowName = field.name as string | undefined;\n const emailFieldName = siblingEmailField?.name as string | undefined;\n let emailValue = emailFieldName ? formData[emailFieldName] : undefined;\n if (!emailValue && rowName && typeof rowName === \"string\" && emailFieldName) {\n emailValue = (formData[rowName] as Record<string, unknown>)?.[emailFieldName] as string | undefined;\n }\n if (!emailValue) return;\n\n setLoadingFields((prev) => ({\n ...prev,\n [f.name as string]: true,\n }));\n try {\n const response = await fetchWithAuth(resolveUrl(actionUrl), {\n method: (fAdmin.method as string) || \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email: emailValue }),\n });\n let result: { success?: boolean; message?: string; error?: string } = {};\n try {\n result = await response.json() as typeof result;\n } catch {\n result = {};\n }\n if (response.ok && result.success) {\n onActionSuccess?.(\n result.message || \"Action completed successfully\",\n );\n } else {\n const errorMsg =\n result.error ||\n `Request failed (${response.status})`;\n onActionError?.(errorMsg);\n }\n } catch (err: unknown) {\n onActionError?.(\n err instanceof Error ? err.message : \"Error connecting to server\",\n );\n } finally {\n setLoadingFields((prev) => ({\n ...prev,\n [f.name as string]: false,\n }));\n }\n }}\n //@ts-ignore\n disabled={loadingFields[f.name as string] || effectiveDisabled}\n className=\"kyro-btn kyro-btn-primary px-4 py-2 rounded-lg font-medium hover:opacity-90 transition-opacity disabled:opacity-50\"\n >\n {loadingFields[f.name as string] ? \"Sending...\" : f.label || \"Click\"}\n </button>\n </div>\n );\n }\n\n return (\n <div\n key={f.name}\n className={f.type === \"button\" || f.type === \"action\" ? \"flex-shrink-0\" : \"flex-1\"}\n style={\n fAdmin?.width ? { width: fAdmin.width as string, flex: \"none\" } : {}\n }\n >\n {renderField(f, parentData, onParentChange)}\n </div>\n );\n })}\n </div>\n );\n }\n\n switch (field.type) {\n case \"tabs\":\n return (\n <TabsLayout\n key={field.name || `tabs-${Math.random()}`}\n field={field}\n formData={formData}\n onTabDataChange={(tabData) => {\n setField(field.name!, tabData);\n }}\n renderField={(f, parentData, onChange) => renderField(f, parentData, onChange)}\n />\n );\n\n case \"group\":\n return (\n <GroupLayout\n key={field.name}\n field={field}\n value={value as Record<string, unknown> | null}\n onChange={onFieldChange}\n renderField={renderField}\n />\n );\n\n case \"array\":\n return (\n <ArrayLayout\n key={field.name}\n field={field}\n value={value as unknown[]}\n onChange={onFieldChange}\n renderField={renderField}\n disabled={effectiveDisabled}\n />\n );\n\n\n case \"button\":\n case \"action\": {\n const fieldName = field.name as string;\n const isLoading = loadingFields[fieldName];\n return (\n <div key={fieldName} className=\"kyro-form-field\">\n <button\n type=\"button\"\n disabled={isLoading || effectiveDisabled}\n onClick={async () => {\n const action = (field.admin?.action || (field as Record<string, unknown>).action) as string | undefined;\n const method =\n (field.admin?.method || (field as Record<string, unknown>).method || \"POST\") as string;\n if (action) {\n setLoadingFields((prev) => ({\n ...prev,\n [fieldName]: true,\n }));\n try {\n const response = await fetchWithAuth(action, {\n method,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(formData),\n });\n await response.json();\n if (response.ok) {\n // handle result\n } else {\n // handle error\n }\n } catch (err) {\n console.error(\"Error executing action:\", err);\n } finally {\n setLoadingFields((prev) => ({\n ...prev,\n [fieldName]: false,\n }));\n }\n }\n }}\n className={`kyro-btn kyro-btn-md kyro-btn-secondary transition-all active:scale-95 whitespace-nowrap flex items-center gap-2 ${isLoading ? \"opacity-70 cursor-not-allowed\" : \"\"}`}\n >\n {isLoading && (\n <svg\n className=\"animate-spin h-3 w-3 text-white\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {isLoading ? \"Processing...\" : field.label || \"Click\"}\n </button>\n </div>\n );\n }\n\n case \"relationship-block\":\n return (\n <div key={field.name} className=\"kyro-form-field\">\n <label className=\"kyro-form-label\">\n {field.label || field.name}\n {field.required && (\n <span className=\"kyro-form-label-required\">*</span>\n )}\n </label>\n <RelationshipBlockField\n relationTo={field.relationTo as string}\n hasMany={field.hasMany as boolean}\n selectedIds={Array.isArray(value) ? value : value ? [value] : []}\n onChange={(_field: string, newValue: unknown) => {\n onFieldChange(newValue);\n }}\n compact\n />\n {field.admin?.description ? (\n <p className=\"kyro-form-help\">{String(field.admin?.description)}</p>\n ) : null}\n </div>\n );\n\n default:\n return (\n <FieldRenderer\n key={field.name || Math.random().toString()}\n field={field}\n value={value}\n onChange={onFieldChange}\n error={error}\n disabled={effectiveDisabled}\n />\n );\n }\n };\n\n const renderHeader = () => {\n const docTitle = String(\n (formData.mainTabs as { title?: string })?.title ||\n (typeof formData.title === \"object\" ? \"\" : formData.title) ||\n (typeof formData.name === \"object\" ? \"\" : formData.name) ||\n \"Untitled\",\n );\n // Use status from the document (merged from version table on draft reads)\n const docStatus = documentStatus ?? formData.status ?? 'draft';\n const isNew = !formData.id;\n const lastModified = formData.updatedAt\n ? new Date(formData.updatedAt as string).toLocaleString()\n : \"Just now\";\n const createdAt = formData.createdAt\n ? new Date(formData.createdAt as string).toLocaleString()\n : \"Just now\";\n\n const isDraftMode = !formData.id || documentStatus === 'draft';\n\n // Status label shown in the header\n const statusLabel = hasUnpublishedChanges\n ? 'Draft (unpublished changes)'\n : docStatus === 'published'\n ? 'Published'\n : 'Draft';\n\n // Compact status label for mobile\n const statusLabelMobile = hasUnpublishedChanges\n ? 'Unpublished'\n : docStatus === 'published'\n ? 'Published'\n : 'Draft';\n\n const statusColor = docStatus === 'published' && !hasUnsavedChanges\n ? 'bg-[var(--kyro-success)]'\n : hasUnpublishedChanges\n ? 'bg-[var(--kyro-warning)]'\n : 'bg-[var(--kyro-text-muted)]';\n\n const statusBadgeBg = docStatus === 'published' && !hasUnpublishedChanges\n ? 'bg-[var(--kyro-success)]/10 text-[var(--kyro-success)] border-[var(--kyro-success)]/20'\n : hasUnpublishedChanges\n ? 'bg-[var(--kyro-warning)]/10 text-[var(--kyro-warning)] border-[var(--kyro-warning)]/20'\n : 'bg-[var(--kyro-text-muted)]/10 text-[var(--kyro-text-muted)] border-[var(--kyro-text-muted)]/20';\n\n /* ── Auto-save status indicator (shared between mobile and desktop) ─── */\n const renderAutoSaveStatus = (compact = false) => (\n <>\n {autoSaveStatus === \"saving\" && (\n <span className=\"flex items-center gap-1.5 text-[var(--kyro-text-muted)]\">\n <svg\n className=\"animate-spin h-3 w-3 shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n {compact ? \"Saving…\" : \"Saving draft...\"}\n </span>\n )}\n {autoSaveStatus === \"success\" && (\n <span className=\"text-[var(--kyro-success)] flex items-center gap-1\">\n <Check className=\"w-3.5 h-3.5 shrink-0\" />\n {compact\n ? \"Saved\"\n : lastSavedAt ? `Saved ${Math.floor((Date.now() - lastSavedAt) / 60000)}m ago` : \"Draft saved\"}\n </span>\n )}\n {autoSaveStatus === \"retrying\" && (\n <span className=\"text-[var(--kyro-warning)] flex items-center gap-1.5\">\n <svg className=\"animate-spin h-3 w-3 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" />\n </svg>\n {compact ? `Retry ${retryCount}/5` : `Retrying save (${retryCount}/5)`}\n </span>\n )}\n {autoSaveStatus === \"offline\" && (\n <span className=\"text-[var(--kyro-text-muted)] flex items-center gap-1.5\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"shrink-0\">\n <path d=\"M10.61 10.61a3 3 0 0 0 4.24 4.24\" />\n <path d=\"M13.36 13.36a3 3 0 0 0-4.24-4.24\" />\n <path d=\"m2 2 20 20\" />\n <path d=\"M18.36 5.64a9 9 0 0 0-12.72 0\" />\n <path d=\"M22.61 1.39a15 15 0 0 0-21.22 0\" />\n </svg>\n {compact ? \"Offline\" : \"Offline — cached locally\"}\n </span>\n )}\n {autoSaveStatus === \"error\" && (\n <span className=\"text-[var(--kyro-danger)]\">{compact ? \"Failed\" : \"Draft save failed\"}</span>\n )}\n {autoSaveStatus === \"conflict\" && (\n compact ? (\n <span className=\"text-[var(--kyro-danger)] font-semibold\">Conflict</span>\n ) : (\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[var(--kyro-danger)] font-semibold\">Conflict detected</span>\n <span className=\"opacity-30\">—</span>\n <button\n type=\"button\"\n onClick={async () => {\n await saveDocument(formData);\n setAutoSaveStatus(\"success\");\n }}\n className=\"text-[var(--kyro-primary)] hover:underline\"\n >\n Keep my changes\n </button>\n <span className=\"opacity-30\">|</span>\n <button\n type=\"button\"\n onClick={() => {\n window.location.reload();\n }}\n className=\"text-[var(--kyro-danger)] hover:underline\"\n >\n Reload server version\n </button>\n </div>\n )\n )}\n </>\n );\n\n /* ── Kebab dropdown (shared between mobile and desktop) ──────────────── */\n const renderKebabMenu = () => !isNew && (\n <Dropdown\n trigger={\n <button\n type=\"button\"\n className=\"kyro-btn p-2 md:p-2.5 rounded-xl border border-[var(--kyro-border)] hover:bg-[var(--kyro-bg-secondary)] transition-all\"\n title=\"More actions\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <circle cx=\"12\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"19\" r=\"1.5\" />\n </svg>\n </button>\n }\n direction=\"down\"\n >\n {!globalSlug && (\n <DropdownItem\n onClick={handleCreateNew}\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n }\n >\n Create New\n </DropdownItem>\n )}\n {!globalSlug && (\n <DropdownItem\n onClick={handleDuplicate}\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n }\n >\n Duplicate\n </DropdownItem>\n )}\n <DropdownItem\n onClick={() => setShowSchedulePicker(true)}\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n }\n >\n Schedule Publish\n </DropdownItem>\n {documentStatus === \"published\" && (\n <DropdownItem\n onClick={handleUnpublish}\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n }\n >\n Unpublish\n </DropdownItem>\n )}\n {!globalSlug && (\n <>\n <DropdownSeparator />\n <DropdownItem\n onClick={handleDelete}\n danger\n icon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </svg>\n }\n >\n Delete\n </DropdownItem>\n </>\n )}\n </Dropdown>\n );\n\n /* ── Schedule picker popover (shared) ──────────────────────────────── */\n const renderSchedulePicker = () => showSchedulePicker && (\n <div ref={scheduleRef} className=\"relative\">\n <div className=\"absolute right-0 top-2 p-4 rounded-lg border border-[var(--kyro-border)] bg-[var(--kyro-surface)] shadow-2xl z-50 min-w-[260px]\">\n <p className=\"text-xs font-medium mb-2\">Schedule Publish</p>\n <input\n type=\"datetime-local\"\n id=\"schedule-datetime\"\n className=\"kyro-form-input text-xs mb-3 w-full\"\n min={new Date().toISOString().slice(0, 16)}\n />\n <div className=\"flex items-center gap-2 justify-end\">\n <button\n type=\"button\"\n onClick={() => setShowSchedulePicker(false)}\n className=\"px-3 py-1.5 text-xs kyro-btn rounded-lg\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={() => {\n const val = (document.getElementById(\"schedule-datetime\") as HTMLInputElement)?.value;\n if (val) handleSchedulePublish(val);\n }}\n className=\"px-3 py-1.5 text-xs kyro-btn-success rounded-lg\"\n >\n Schedule\n </button>\n </div>\n </div>\n </div>\n );\n\n return (\n <>\n {/* ═══════════════════════════════════════════════════════════════════\n MOBILE HEADER (< md)\n Two rows: top = nav + title + actions, bottom = toolbar\n ════════════════════════════════════════════════════════════════════ */}\n <header className=\"md:hidden border-b border-[var(--kyro-border)] bg-[var(--kyro-surface)] backdrop-blur-md rounded-lg\">\n {/* ── Row 1: Back, Title, Status, Primary actions ─────────────── */}\n <div className=\"flex items-center gap-2 px-3 py-2.5\">\n {/* Back button */}\n <a\n href={`/${collectionSlug}`}\n className=\"p-1.5 rounded-lg hover:bg-[var(--kyro-bg-secondary)] transition-colors shrink-0\"\n aria-label=\"Back to list\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </a>\n\n {/* Title + status badge */}\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <h1 className=\"text-base font-bold tracking-tight truncate min-w-0\">{docTitle}</h1>\n <span className={`shrink-0 inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[9px] font-medium border ${statusBadgeBg}`}>\n <span className={`h-1.5 w-1.5 rounded-full ${statusColor}`} />\n {statusLabelMobile}\n </span>\n </div>\n\n {/* Primary actions: Publish + Kebab */}\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <SplitButton\n status={documentStatus as SplitButtonStatus}\n saveStatus={localSaveStatus}\n hasChanges={hasUnsavedChanges}\n onPublish={handlePublish}\n disabled={localSaveStatus === \"saving\"}\n />\n {renderKebabMenu()}\n {renderSchedulePicker()}\n </div>\n </div>\n\n {/* ── Row 2: Compact toolbar ─────────────────────────────────── */}\n <div className=\"flex items-center justify-between px-3 py-1.5 border-t border-[var(--kyro-border)]/50 bg-[var(--kyro-bg-secondary)]/30\">\n {/* View tabs (compact pill style) */}\n <div className=\"flex items-center gap-0.5 bg-[var(--kyro-bg-secondary)] p-0.5 rounded-lg border border-[var(--kyro-border)]/50\">\n {([\"edit\", \"version\", \"api\"] as const).map((v) => (\n <button\n key={v}\n type=\"button\"\n onClick={() => setView(v as View)}\n className={`px-3 py-1 text-[10px] font-bold rounded-md transition-all ${view === v\n ? \"bg-[var(--kyro-surface)] shadow-sm border border-[var(--kyro-border)] text-[var(--kyro-text-primary)]\"\n : \"text-[var(--kyro-text-secondary)] opacity-50 active:opacity-100\"\n }`}\n >\n {v === \"edit\" ? \"Edit\" : v === \"version\" ? \"History\" : \"API\"}\n </button>\n ))}\n </div>\n\n {/* Auto-save status + utility buttons */}\n <div className=\"flex items-center gap-2 text-[10px] font-medium\">\n {renderAutoSaveStatus(true)}\n\n {hasUnsavedChanges && autoSaveStatus !== \"saving\" && autoSaveStatus !== \"retrying\" && autoSaveStatus !== \"conflict\" && (\n <button\n type=\"button\"\n onClick={async () => {\n setFormData(lastSavedData);\n markSaved();\n }}\n className=\"text-[var(--kyro-primary)] text-[10px] font-medium hover:underline\"\n >\n Revert\n </button>\n )}\n\n <div className=\"h-4 w-px bg-[var(--kyro-border)] mx-0.5\" />\n\n {/* Preview toggle */}\n <button\n type=\"button\"\n onClick={() => setShowPreview(!showPreview)}\n className={`p-1.5 rounded-lg transition-all ${showPreview\n ? \"bg-[var(--kyro-primary)]/10 text-[var(--kyro-primary)]\"\n : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-bg-secondary)]\"\n }`}\n title=\"Live Preview\"\n >\n <ExternalLink className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </div>\n\n {/* ── Mobile conflict resolution bar (shown when conflict detected) */}\n {autoSaveStatus === \"conflict\" && (\n <div className=\"flex items-center justify-between gap-2 px-3 py-2 border-t border-[var(--kyro-danger)]/30 bg-[var(--kyro-danger)]/5\">\n <span className=\"text-[11px] font-semibold text-[var(--kyro-danger)]\">Conflict detected</span>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={async () => {\n await saveDocument(formData);\n setAutoSaveStatus(\"success\");\n }}\n className=\"text-[11px] font-medium text-[var(--kyro-primary)] hover:underline\"\n >\n Keep mine\n </button>\n <span className=\"text-[var(--kyro-text-muted)] opacity-30\">|</span>\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n className=\"text-[11px] font-medium text-[var(--kyro-danger)] hover:underline\"\n >\n Reload\n </button>\n </div>\n </div>\n )}\n </header>\n\n {/* ═══════════════════════════════════════════════════════════════════\n DESKTOP HEADER (≥ md)\n Original single-row layout preserved\n ════════════════════════════════════════════════════════════════════ */}\n <header className=\"hidden md:flex surface-tile px-8 py-6 items-center justify-between sticky top-0 border-b border-[var(--kyro-border)] mb-8 bg-[var(--kyro-surface)] backdrop-blur-md\">\n <div className=\"flex flex-col gap-2 min-w-0\">\n <div className=\"flex items-center gap-3 flex-wrap min-w-0\">\n <a\n href={`/${collectionSlug}`}\n className=\"p-2 border border-[var(--kyro-border)] rounded-xl hover:bg-[var(--kyro-bg-secondary)] transition-colors shrink-0\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </a>\n <h1 className=\"text-xl font-bold tracking-tighter truncate min-w-0\">{docTitle}</h1>\n <span className={`shrink-0 inline-flex items-center gap-1.5 px-2 rounded-full text-[10px] font-regular border ${statusBadgeBg}`}>\n <span className={`h-1.5 w-1.5 rounded-full ${statusColor}`} />\n {statusLabel}\n </span>\n </div>\n <div className=\"flex items-center gap-4 text-[11px] font-medium tracking-wide opacity-60 ml-12\">\n {renderAutoSaveStatus(false)}\n {hasUnsavedChanges && autoSaveStatus !== \"saving\" && autoSaveStatus !== \"retrying\" && autoSaveStatus !== \"conflict\" && (\n <>\n <span className=\"opacity-30\">—</span>\n <button\n type=\"button\"\n onClick={async () => {\n setFormData(lastSavedData);\n markSaved();\n }}\n className=\"text-[var(--kyro-primary)] hover:underline\"\n >\n Revert changes\n </button>\n </>\n )}\n {/* Live auto-save timestamp */}\n {lastSavedAt && autoSaveStatus !== \"saving\" && autoSaveStatus !== \"retrying\" && autoSaveStatus !== \"success\" && (\n <span className=\"border-l border-[var(--kyro-border)] pl-4\">\n Draft saved {(() => {\n const diffMs = now - lastSavedAt;\n const diffMin = Math.floor(diffMs / 60_000);\n const diffSec = Math.floor(diffMs / 1_000);\n if (diffMin >= 1) return `${diffMin}m ago`;\n if (diffSec >= 5) return `${diffSec}s ago`;\n return \"just now\";\n })()}\n </span>\n )}\n <span className=\"border-l border-[var(--kyro-border)] pl-4\">\n Modified {lastModified}\n </span>\n <span className=\"border-l border-[var(--kyro-border)] pl-4\">\n Created {createdAt}\n </span>\n </div>\n </div>\n\n <div className=\"flex items-center gap-6\">\n <div className=\"flex items-center gap-1 bg-[var(--kyro-bg-secondary)] p-1 rounded-xl border border-[var(--kyro-border)]\">\n {[\"edit\", \"version\", \"api\"].map((v) => (\n <button\n key={v}\n type=\"button\"\n onClick={() => setView(v as View)}\n className={`px-5 py-2 text-xs font-bold rounded-lg transition-all ${view === v ? \"bg-[var(--kyro-surface)] shadow-sm border border-[var(--kyro-border)] text-[var(--kyro-text-primary)]\" : \"text-[var(--kyro-text-secondary)] opacity-50 hover:opacity-100\"}`}\n >\n {v.toUpperCase()}\n </button>\n ))}\n </div>\n\n <div className=\"h-8 w-px bg-[var(--kyro-border)] mx-2\" />\n\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => setShowPreview(!showPreview)}\n className={`kyro-btn p-2.5 rounded-xl transition-all flex items-center gap-2 ${showPreview ? \"shadow-lg\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-bg-secondary)]\"}`}\n title=\"Live Preview\"\n >\n <ExternalLink className=\"w-4 h-4\" />\n {showPreview && (\n <span className=\"text-[10px] font-bold tracking-widest pr-1\">\n Active\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n window.dispatchEvent(new CustomEvent(\"toggle-sidebar\"));\n }}\n className={`kyro-btn p-2.5 rounded-xl transition-all ${sidebarCollapsed ? \"\" : \"text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-bg-secondary)]\"}`}\n title=\"Toggle Sidebar\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" />\n </svg>\n </button>\n\n {/* ── Publish button (no dropdown) ──────────────────────────────── */}\n <SplitButton\n status={documentStatus as SplitButtonStatus}\n saveStatus={localSaveStatus}\n hasChanges={hasUnsavedChanges}\n onPublish={handlePublish}\n disabled={localSaveStatus === \"saving\"}\n />\n\n {/* ── Kebab: document management actions ───────────────────────── */}\n {renderKebabMenu()}\n\n {renderSchedulePicker()}\n </div>\n </div>\n </header>\n </>\n );\n };\n\n const renderEditView = () => {\n // Single layout: no split grid, no sidebar column — just a clean field list\n if (layout === \"single\") {\n return (\n <div className=\"w-full space-y-6 md:space-y-8\">\n <div className=\"surface-tile p-4 md:p-8 space-y-6 md:space-y-8\">\n {config.fields.map((f: Field) => renderField(f))}\n </div>\n </div>\n );\n }\n\n // Default split layout\n const showRightColumn = !sidebarCollapsed && !showPreview;\n const hasSidebarFields =\n config.fields.some((f: Field) => f.admin?.position === \"sidebar\") &&\n !showPreview;\n\n return (\n <div\n className={`w-full mx-auto grid gap-4 md:gap-8 pb-32 transition-all duration-700 ${showPreview\n ? \"grid-cols-1 lg:grid-cols-2\"\n : sidebarCollapsed || !hasSidebarFields\n ? \"grid-cols-1\"\n : \"grid-cols-1 lg:grid-cols-[1fr_380px]\"\n }`}\n >\n <div className=\"space-y-6 md:space-y-8 animate-in fade-in slide-in-from-left-4 duration-500\">\n {config.tabs ? (\n renderField({ type: \"tabs\", tabs: config.tabs } as Field)\n ) : (\n <div className=\"surface-tile p-4 md:p-8 space-y-6 md:space-y-8\">\n {config.fields\n .filter(\n (f: Field) => !f.admin?.position || f.admin.position === \"main\",\n )\n .map((f: Field) => renderField(f))}\n </div>\n )}\n </div>\n\n {showPreview ? (\n <div className=\"sticky top-36 h-[calc(100vh-280px)] animate-in fade-in slide-in-from-right-10 duration-700\">\n <div className=\"w-full h-full rounded-3xl border border-[var(--kyro-border)] bg-[var(--kyro-bg-secondary)] shadow-2xl overflow-hidden relative group\">\n <div className=\"absolute top-4 left-4 z-10 flex items-center gap-2\">\n <div className=\"h-2 w-2 rounded-full bg-green-500 animate-pulse\" />\n <span className=\"text-[10px] font-bold tracking-widest text-white/60\">\n Live Preview Mode\n </span>\n </div>\n <iframe\n src={`/${collectionSlug}/${formData.slug || formData.id}?preview=true`}\n className=\"w-full h-full border-none\"\n title=\"Live Preview\"\n />\n <div className=\"absolute inset-0 bg-transparent pointer-events-none border-[12px] border-[var(--kyro-surface)] rounded-3xl\" />\n </div>\n </div>\n ) : sidebarCollapsed ? null : (\n <div className=\"space-y-4 md:space-y-6 animate-in fade-in slide-in-from-right-4 duration-500\">\n {config.fields.some((f: Field) => f.admin?.position === \"sidebar\") && (\n <div className=\"surface-tile p-4 md:p-6 space-y-4 md:space-y-6\">\n <h3 className=\"text-[10px] font-bold tracking-[0.2em] opacity-40\">\n Settings\n </h3>\n {config.fields\n .filter((f: Field) => f.admin?.position === \"sidebar\")\n .map((f: Field) => renderField(f))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n };\n\n const renderVersionView = () => (\n <div className=\"w-full animate-in fade-in slide-in-from-bottom-4 pb-12\">\n <div className=\"surface-tile p-0 overflow-hidden\">\n <div className=\"px-4 md:px-6 py-3 md:py-4 border-b border-[var(--kyro-border)] flex flex-col md:flex-row md:items-center justify-between gap-2\">\n <div>\n <h2 className=\"text-base md:text-lg font-bold text-[var(--kyro-text-primary)]\">\n Version History\n </h2>\n <p className=\"text-[11px] text-[var(--kyro-text-muted)] mt-0.5\">\n {compareMode\n ? `Select 2 versions · ${compareSelected.length}/2 chosen`\n : `${versions.length} snapshot${versions.length !== 1 ? \"s\" : \"\"} · Auto-saved`}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n {compareMode && compareSelected.length === 2 && (\n <button\n type=\"button\"\n onClick={handleCompareVersions}\n disabled={loadingDiffs}\n className=\"kyro-btn kyro-btn-primary px-3 py-1.5 rounded-lg text-[11px] font-bold tracking-wider hover:opacity-90 disabled:opacity-50\"\n >\n {loadingDiffs ? \"Comparing...\" : \"Compare\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => {\n setCompareMode(!compareMode);\n setCompareSelected([]);\n setCompareDiffs([]);\n }}\n className={`px-3 py-1.5 rounded-lg text-[11px] font-bold tracking-wider transition-all ${compareMode\n ? \"bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)]\"\n : \"border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)]\"\n }`}\n >\n {compareMode ? \"Done\" : \"Compare\"}\n </button>\n </div>\n </div>\n\n {compareDiffs.length > 0 && (\n <div className=\"border-b border-[var(--kyro-border)]\">\n <div className=\"px-6 py-3 flex items-center justify-between\">\n <span className=\"text-[11px] font-bold text-[var(--kyro-text-primary)] tracking-wider\">\n {compareDiffs.length} change\n {compareDiffs.length !== 1 ? \"s\" : \"\"}\n </span>\n <button\n type=\"button\"\n onClick={() => setCompareDiffs([])}\n className=\"p-1 rounded hover:bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-muted)]\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"max-h-[400px] overflow-y-auto\">\n {compareDiffs.map((d, i) => (\n <div\n key={i}\n className=\"flex flex-col md:grid md:grid-cols-4 gap-1 md:gap-3 px-4 md:px-6 py-2.5 text-[11px] font-mono border-t border-[var(--kyro-border)] hover:bg-[var(--kyro-bg-secondary)]\"\n >\n <div className=\"text-[var(--kyro-text-muted)] truncate font-semibold md:font-normal\">\n {d.field}\n </div>\n <div className=\"text-[var(--kyro-text-muted)] truncate hidden md:block\">\n {typeof d.oldValue === \"object\"\n ? JSON.stringify(d.oldValue)\n : String(d.oldValue ?? \"null\")}\n </div>\n <div className=\"md:col-span-2 text-[var(--kyro-text-primary)] truncate\">\n <span className=\"md:hidden text-[var(--kyro-text-muted)]\">→ </span>\n {typeof d.newValue === \"object\"\n ? JSON.stringify(d.newValue)\n : String(d.newValue ?? \"null\")}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {loadingVersions ? (\n <div className=\"flex justify-center py-16\">\n <span className=\"animate-spin text-[var(--kyro-primary)]\">⌛</span>\n </div>\n ) : versions.length === 0 ? (\n <div className=\"text-center py-16 text-[var(--kyro-text-muted)] text-sm italic\">\n No versions yet.\n </div>\n ) : (\n <div className=\"divide-y divide-[var(--kyro-border)]\">\n {versions.map((v, i) => {\n const isSelected = compareSelected.includes(v.id);\n const isDraftVersion = v.status === \"draft\";\n const isAutoSaved = (v.changeDescription || \"\")\n .toLowerCase()\n .includes(\"auto\");\n\n return (\n <div\n key={v.id}\n onClick={\n compareMode ? () => toggleCompareSelection(v.id) : undefined\n }\n className={`transition-all ${compareMode\n ? isSelected\n ? \"bg-[var(--kyro-primary)]/5 cursor-pointer\"\n : \"hover:bg-[var(--kyro-bg-secondary)] cursor-pointer\"\n : \"hover:bg-[var(--kyro-bg-secondary)]\"\n }`}\n >\n {/* ── Desktop: grid row ─────────────────────────────── */}\n <div className=\"hidden md:grid grid-cols-12 gap-3 px-6 py-3 items-center\">\n <div className=\"col-span-1 flex items-center gap-2\">\n {compareMode ? (\n <div\n className={`w-4 h-4 rounded-full border ${isSelected\n ? \"border-[var(--kyro-primary)] bg-[var(--kyro-primary)]\"\n : \"border-[var(--kyro-border)]\"\n }`}\n >\n {isSelected && (\n <Check className=\"w-4 h-4\" />\n )}\n </div>\n ) : (\n <span className=\"text-[10px] font-bold text-[var(--kyro-text-muted)] w-5\">\n {versions.length - i}\n </span>\n )}\n </div>\n <div className=\"col-span-4 min-w-0\">\n <div className=\"text-[13px] font-medium text-[var(--kyro-text-primary)] truncate flex items-center gap-2\">\n {v.changeDescription || \"Snapshot\"}\n {isAutoSaved && (\n <span className=\"text-[9px] px-1.5 py-0.5 bg-[var(--kyro-bg-secondary)] text-[var(--kyro-text-secondary)] rounded font-bold tracking-wider\">\n Auto\n </span>\n )}\n </div>\n <div className=\"text-[11px] text-[var(--kyro-text-muted)]\">\n {new Date(v.createdAt as string).toLocaleString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </div>\n </div>\n <div className=\"col-span-3\">\n {v.status && (\n <span\n className={`inline-flex items-center gap-1 px-2 py-0.5 rounded text-[10px] font-bold capitalize tracking-wider ${v.status === \"published\"\n ? \" text-[var(--kyro-success)]\"\n : \" text-[var(--kyro-warning)]\"\n }`}\n >\n <span\n className={`w-1.5 h-1.5 rounded-full ${v.status === \"published\" ? \"bg-[var(--kyro-success)]\" : \"bg-[var(--kyro-warning)]\"}`}\n />\n {v.status}\n </span>\n )}\n </div>\n <div className=\"col-span-2 text-[11px] text-[var(--kyro-text-muted)]\">\n {v.createdBy || \"system\"}\n </div>\n <div className=\"col-span-2 flex justify-end\">\n {!compareMode && (\n <button\n type=\"button\"\n onClick={() => handleRestoreVersion(v.id)}\n className=\"px-3 py-1.5 rounded-lg border border-[var(--kyro-border)] text-[11px] font-bold tracking-wider text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] hover:border-[var(--kyro-primary)] transition-all active:scale-95\"\n >\n Restore\n </button>\n )}\n </div>\n </div>\n\n {/* ── Mobile: card layout ───────────────────────────── */}\n <div className=\"md:hidden flex items-start gap-3 px-4 py-3\">\n {/* Left: index or compare checkbox */}\n <div className=\"pt-0.5 shrink-0\">\n {compareMode ? (\n <div\n className={`w-4 h-4 rounded-full border ${isSelected\n ? \"border-[var(--kyro-primary)] bg-[var(--kyro-primary)]\"\n : \"border-[var(--kyro-border)]\"\n }`}\n >\n {isSelected && <Check className=\"w-4 h-4\" />}\n </div>\n ) : (\n <span className=\"text-[10px] font-bold text-[var(--kyro-text-muted)] w-5 inline-block text-center\">\n {versions.length - i}\n </span>\n )}\n </div>\n\n {/* Center: description, date, status */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-[13px] font-medium text-[var(--kyro-text-primary)] truncate flex items-center gap-1.5\">\n {v.changeDescription || \"Snapshot\"}\n {isAutoSaved && (\n <span className=\"text-[9px] px-1 py-0.5 bg-[var(--kyro-bg-secondary)] text-[var(--kyro-text-secondary)] rounded font-bold tracking-wider shrink-0\">\n Auto\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2 mt-1 flex-wrap\">\n <span className=\"text-[11px] text-[var(--kyro-text-muted)]\">\n {new Date(v.createdAt as string).toLocaleString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </span>\n {v.status && (\n <span\n className={`inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] font-bold capitalize tracking-wider ${v.status === \"published\"\n ? \"text-[var(--kyro-success)]\"\n : \"text-[var(--kyro-warning)]\"\n }`}\n >\n <span\n className={`w-1 h-1 rounded-full ${v.status === \"published\" ? \"bg-[var(--kyro-success)]\" : \"bg-[var(--kyro-warning)]\"}`}\n />\n {v.status}\n </span>\n )}\n <span className=\"text-[10px] text-[var(--kyro-text-muted)] opacity-60\">\n {v.createdBy || \"system\"}\n </span>\n </div>\n </div>\n\n {/* Right: restore button */}\n {!compareMode && (\n <button\n type=\"button\"\n onClick={() => handleRestoreVersion(v.id)}\n className=\"shrink-0 px-2.5 py-1 rounded-lg border border-[var(--kyro-border)] text-[10px] font-bold tracking-wider text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] hover:border-[var(--kyro-primary)] transition-all active:scale-95\"\n >\n Restore\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n\n const renderApiView = () => (\n <div className=\"w-full space-y-8 animate-in fade-in slide-in-from-bottom-4\">\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_300px] gap-8\">\n <div className=\"surface-tile p-8 min-w-0\">\n <h2 className=\"text-xl font-bold mb-6\">Response Payload</h2>\n <div className=\"bg-[#0f172a] p-6 rounded-2xl border border-white/5 overflow-x-auto max-h-[800px]\">\n <pre className=\"text-blue-300 text-xs font-mono whitespace-pre-wrap break-all\">\n {JSON.stringify(formData, null, 2)}\n </pre>\n </div>\n </div>\n\n <div className=\"space-y-6\">\n <div className=\"surface-tile p-8 space-y-6\">\n <h2 className=\"text-xl font-bold mb-6\">API Info</h2>\n\n <div className=\"space-y-6\">\n <div>\n <label className=\"text-[10px] font-bold tracking-[0.1em] text-[var(--kyro-text-secondary)] opacity-50 block mb-2\">\n Reference Path\n </label>\n <div className=\"relative group\">\n <code className=\"block bg-[var(--kyro-bg-secondary)] p-4 rounded-xl border border-[var(--kyro-border)] text-[var(--kyro-text-primary)] text-xs font-mono break-all leading-relaxed\">\n {`/api/${collectionSlug}/${formData.id || \"\"}`}\n </code>\n </div>\n </div>\n\n <div>\n <label className=\"text-[10px] font-bold tracking-[0.1em] text-[var(--kyro-text-secondary)] opacity-50 block mb-3\">\n Methods Allowed\n </label>\n <div className=\"flex gap-2\">\n <span className=\"px-3 py-1.5 bg-green-500/10 text-green-500 rounded-lg font-bold text-[9px] tracking-wider\">\n GET\n </span>\n <span className=\"px-3 py-1.5 bg-amber-500/10 text-amber-500 rounded-lg font-bold text-[9px] tracking-wider\">\n PATCH\n </span>\n <span className=\"px-3 py-1.5 bg-red-500/10 text-red-500 rounded-lg font-bold text-[9px] tracking-wider\">\n DELETE\n </span>\n </div>\n </div>\n\n <div className=\"pt-6 border-t border-[var(--kyro-border)]\">\n <label className=\"text-[10px] font-bold tracking-[0.1em] text-[var(--kyro-text-secondary)] opacity-50 block mb-4\">\n Security Policy\n </label>\n <div className=\"space-y-3\">\n {[\n {\n id: \"auth-required\",\n label: \"Authorization required\",\n checked: true,\n },\n {\n id: \"auth-admin\",\n label: \"System administrator only\",\n checked: false,\n },\n {\n id: \"auth-api\",\n label: \"API Key authentication allowed\",\n checked: true,\n },\n ].map((item) => (\n <label\n key={item.id}\n className=\"flex items-center gap-3 cursor-pointer group\"\n >\n <div\n className={`w-4 h-4 rounded border transition-all flex items-center justify-center ${item.checked ? \"bg-[var(--kyro-primary)] border-[var(--kyro-primary)]\" : \"border-[var(--kyro-border)] group-hover:border-[var(--kyro-text-secondary)]\"}`}\n >\n {item.checked && (\n <Check className=\"w-4 h-4\" />\n )}\n </div>\n <span className=\"text-xs font-medium text-[var(--kyro-text-secondary)] group-hover:text-[var(--kyro-text-primary)] transition-colors\">\n {item.label}\n </span>\n </label>\n ))}\n </div>\n </div>\n\n <div className=\"pt-6 border-t border-[var(--kyro-border)]\">\n <label className=\"text-[10px] font-bold tracking-[0.1em] text-[var(--kyro-text-secondary)] opacity-50 block mb-2\">\n Usage Help\n </label>\n <p className=\"text-[11px] text-[var(--kyro-text-secondary)] leading-relaxed\">\n Include the{\" \"}\n <code className=\"text-[var(--kyro-text-primary)] font-bold\">\n Authorization: Bearer &lt;token&gt;\n </code>{\" \"}\n header to perform write operations on this document.\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n\n if (clientLoading) {\n return (\n <div className=\"space-y-6 p-4\">\n <div className=\"space-y-2\">\n <Shimmer variant=\"text\" className=\"w-1/3\" />\n <Shimmer variant=\"text\" className=\"w-2/3\" />\n </div>\n <div className=\"space-y-4\">\n <Shimmer variant=\"rect\" count={4} />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col h-full\">\n {layout !== \"single\" && renderHeader()}\n {layout === \"single\" && (\n <>\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-[var(--kyro-border)] bg-[var(--kyro-surface)]\">\n <div className=\"flex items-center gap-3 text-[11px] font-medium\">\n {autoSaveStatus === \"saving\" && (\n <span className=\"flex items-center gap-1.5 text-[var(--kyro-text-muted)]\">\n <svg className=\"animate-spin h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" />\n </svg>\n Saving...\n </span>\n )}\n {autoSaveStatus === \"success\" && (\n <span className=\"text-[var(--kyro-success)] flex items-center gap-1\">\n <Check className=\"w-4 h-4\" />\n {lastSavedAt ? `Saved ${Math.floor((Date.now() - lastSavedAt) / 60000)}m ago` : \"Saved\"}\n </span>\n )}\n {autoSaveStatus === \"retrying\" && (\n <span className=\"text-[var(--kyro-warning)] flex items-center gap-1.5\">\n <svg className=\"animate-spin h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" />\n </svg>\n Retrying...\n </span>\n )}\n {autoSaveStatus === \"offline\" && (\n <span className=\"text-[var(--kyro-text-muted)]\">Offline — cached locally</span>\n )}\n {autoSaveStatus === \"error\" && (\n <span className=\"text-[var(--kyro-danger)]\">Save failed</span>\n )}\n {autoSaveStatus === \"conflict\" && (\n <span className=\"text-[var(--kyro-danger)]\">Conflict detected</span>\n )}\n {hasUnsavedChanges && autoSaveStatus !== \"saving\" && autoSaveStatus !== \"retrying\" && autoSaveStatus !== \"conflict\" && (\n <span className=\"text-[var(--kyro-warning)]\">Unsaved changes</span>\n )}\n {!hasUnsavedChanges && autoSaveStatus !== \"success\" && autoSaveStatus !== \"saving\" && autoSaveStatus !== \"error\" && (\n <span className=\"text-[var(--kyro-success)]\">All changes saved</span>\n )}\n </div>\n <span className=\"text-[11px] text-[var(--kyro-text-muted)] opacity-60\">\n {formData.updatedAt ? `Modified ${new Date(formData.updatedAt as string).toLocaleString()}` : \"\"}\n </span>\n </div>\n <button\n id=\"btn-save\"\n type=\"button\"\n style={{ width: 0, height: 0, opacity: 0, padding: 0, margin: 0, border: 'none', position: 'absolute' }}\n onClick={async () => {\n try {\n const response = await saveDocument();\n if (response.ok) {\n const result = await response.json();\n const savedData = result.data || formData;\n setFormData({ ...formData, ...savedData });\n setLastSavedData({ ...formData, ...savedData });\n onActionSuccess?.(\"Changes saved\");\n }\n } catch (e) {\n console.error(\"Save error exception:\", e);\n onActionError?.(\"Save failed: \" + (e as Error).message);\n }\n }}\n />\n </>\n )}\n <main className=\"w-full pt-6 md:pt-0\">\n {view === \"edit\" && renderEditView()}\n {view === \"version\" && renderVersionView()}\n {view === \"api\" && renderApiView()}\n </main>\n </div>\n );\n}\n\ninterface RelationshipFieldProps {\n field: Field;\n value?: unknown;\n onChange?: (value: unknown) => void;\n disabled?: boolean;\n error?: string;\n}\n\nfunction RelationshipField({\n field,\n value,\n onChange,\n disabled,\n error,\n}: RelationshipFieldProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [options, setOptions] = useState<unknown[]>([]);\n const [loading, setLoading] = useState(false);\n\n const isMultiple = field.hasMany;\n const targetCollection = Array.isArray(field.relationTo)\n ? field.relationTo[0]\n : field.relationTo;\n\n const fetchOptions = () => {\n setLoading(true);\n fetchWithAuth(`/api/${targetCollection}?limit=50`)\n .then((res) => res.json())\n .then((data) => {\n setOptions((data.docs || []) as unknown[]);\n setLoading(false);\n })\n .catch((err) => {\n console.error(\"Failed to fetch relations:\", err);\n setLoading(false);\n });\n };\n\n useEffect(() => {\n fetchOptions();\n }, [targetCollection]);\n\n const getLabel = (opt: unknown) => {\n const o = opt as Record<string, unknown> | undefined;\n if (!o) return \"\";\n return String(\n o.title || o.name || o.label || o.filename || o.slug || o.id || \"\",\n );\n };\n\n const findOptionById = (id: unknown) => {\n return (options as Array<Record<string, unknown>>).find(\n (o) => o.id === id,\n );\n };\n\n const isSelected = (optId: string) => {\n if (!value) return false;\n if (isMultiple) {\n const arr = Array.isArray(value) ? value : [];\n return (arr as Array<{ id?: string }>).some((v) => (v.id || v) === optId);\n }\n return ((value as { id?: string })?.id || value) === optId;\n };\n\n const toggleSelection = (opt: { id?: string }) => {\n if (isMultiple) {\n const current = Array.isArray(value) ? value : [];\n const arr = current as Array<{ id?: string }>;\n if (isSelected(opt.id as string)) {\n onChange?.(arr.filter((item) => (item.id || item) !== opt.id));\n } else {\n onChange?.([...arr, opt.id]);\n }\n } else {\n if (isSelected(opt.id as string)) {\n onChange?.(null);\n } else {\n onChange?.(opt.id);\n setIsOpen(false);\n }\n }\n };\n\n const renderSelectedValue = () => {\n if (!value) return null;\n if (isMultiple && Array.isArray(value)) {\n if (value.length === 0) return \"None selected\";\n const arr = value as Array<{ id?: string }>;\n return arr\n .map((v) => {\n const id = v.id || v;\n const opt = findOptionById(id);\n return opt ? getLabel(opt) : String(id);\n })\n .join(\", \");\n }\n const id = (value as { id?: string }).id || value;\n const opt = findOptionById(id);\n return opt ? getLabel(opt) : String(id);\n };\n\n const filteredOptions = (search\n ? (options || []).filter((opt) => {\n const o = opt as Record<string, unknown>;\n const term = search.toLowerCase();\n const searchableFields = [\"title\", \"name\", \"label\", \"filename\", \"slug\"];\n return searchableFields.some(\n (key) => o[key] && String(o[key]).toLowerCase().includes(term),\n );\n })\n : options || []) as Array<Record<string, unknown>>;\n\n return (\n <div className=\"kyro-form-field\">\n <label className=\"kyro-form-label\">\n {field.label || field.name}\n {field.required && <span className=\"kyro-form-label-required\">*</span>}\n </label>\n\n <div\n className=\"kyro-form-relationship\"\n onClick={() => !disabled && setIsOpen(true)}\n style={disabled ? { opacity: 0.5, cursor: \"not-allowed\" } : {}}\n >\n <div className=\"kyro-form-relationship-header\">\n <span className=\"kyro-form-relationship-type\">\n {targetCollection}\n </span>\n {isMultiple && (\n <span className=\"kyro-form-relationship-badge\">Multiple</span>\n )}\n </div>\n\n <div className=\"kyro-form-relationship-value\">\n {value ? (\n renderSelectedValue()\n ) : (\n <span className=\"kyro-form-relationship-empty\">\n Click to search and select...\n </span>\n )}\n </div>\n </div>\n\n {(field.admin?.description && !error) ? (\n <p className=\"kyro-form-help\">{String((field.admin as { description?: string }).description)}</p>\n ) : null}\n {error && <p className=\"kyro-form-error\">{error}</p>}\n\n {/* Modal */}\n {isOpen && (\n <div className=\"kyro-modal-overlay\" onClick={() => setIsOpen(false)}>\n <div\n className=\"kyro-relation-modal\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"kyro-relation-modal-header\">\n <h3>Select {field.label || field.name}</h3>\n <input\n type=\"text\"\n autoFocus\n placeholder={`Search in ${targetCollection}...`}\n className=\"kyro-relation-modal-search\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n\n <div className=\"kyro-relation-modal-list\">\n {loading ? (\n <div className=\"kyro-relation-modal-empty\">Loading...</div>\n ) : filteredOptions.length === 0 ? (\n <EmptyState title=\"No results found.\" />\n ) : (\n filteredOptions.map((opt) => {\n const o = opt as { id?: string };\n return (\n <button\n key={String(o.id)}\n type=\"button\"\n className={`kyro-relation-modal-item ${isSelected(String(o.id)) ? \"selected\" : \"\"}`}\n onClick={() => toggleSelection(o)}\n >\n <span>{getLabel(opt)}</span>\n <span className=\"kyro-relation-modal-item-id\">\n {o.id ? `(${String(o.id).slice(0, 8)}...)` : \"\"}\n </span>\n </button>\n );\n })\n )}\n </div>\n\n <div className=\"kyro-relation-modal-footer\">\n <button\n type=\"button\"\n className=\"kyro-btn kyro-btn-secondary kyro-btn-sm\"\n onClick={() => setIsOpen(false)}\n >\n Done\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// SEO Utilities\nfunction stripHtml(html: string) {\n if (typeof html !== \"string\") return \"\";\n return html.replace(/<[^>]*>?/gm, \"\").trim();\n}\n","import React, { useState, useRef, useEffect } from \"react\";\nimport { IconPlus, IconSend, IconClock, IconArchive, IconUndo, IconCopy, IconEye, IconTrash2, IconMoreVertical } from \"./ui/icons\";\nimport { DropdownItem, DropdownSeparator } from \"./ui/Dropdown\";\nimport { SplitButton } from \"./ui/SplitButton\";\nimport { Spinner } from \"./ui/Spinner\";\nimport { useAutoFormStore } from \"../lib/autoform-store\";\n\nexport type DocumentStatus = \"draft\" | \"published\" | \"scheduled\" | \"archived\";\nexport type SaveStatus = \"idle\" | \"saving\" | \"saved\" | \"error\";\n\nexport interface ActionBarProps {\n status: DocumentStatus;\n saveStatus: SaveStatus;\n hasChanges: boolean;\n onSave: () => void;\n onPublish?: () => void;\n onUnpublish?: () => void;\n onDuplicate?: () => void;\n onViewHistory?: () => void;\n onPreview?: () => void;\n onDelete?: () => void;\n onBack?: () => void;\n onToggleSidebar?: () => void;\n publishedAt?: string | null;\n updatedAt?: string | null;\n}\n\nconst STATUS_DOT: Record<string, string> = {\n draft: \"bg-[var(--kyro-warning)]\",\n published: \"bg-[var(--kyro-success)]\",\n scheduled: \"bg-[var(--kyro-primary)]\",\n archived: \"bg-[var(--kyro-text-muted)]\",\n};\n\nconst STATUS_COLOR: Record<string, string> = {\n draft: \"var(--kyro-warning)\",\n published: \"var(--kyro-success)\",\n scheduled: \"var(--kyro-primary)\",\n archived: \"var(--kyro-text-muted)\",\n};\n\nexport function ActionBar({\n status,\n saveStatus,\n hasChanges,\n onSave,\n onPublish,\n onUnpublish,\n onDuplicate,\n onViewHistory,\n onPreview,\n onDelete,\n onBack,\n onToggleSidebar,\n publishedAt,\n updatedAt,\n}: ActionBarProps) {\n const view = useAutoFormStore((s) => s.view) || \"edit\";\n const setView = useAutoFormStore((s) => s.setView);\n const [moreOpen, setMoreOpen] = useState(false);\n const moreRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClick = (e: MouseEvent) => {\n if (moreRef.current && !moreRef.current.contains(e.target as Node)) setMoreOpen(false);\n };\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, []);\n\n const getSaveStatusText = () => {\n if (saveStatus === \"saving\") return \"Saving...\";\n if (saveStatus === \"saved\") return \"Saved\";\n if (saveStatus === \"error\") return \"Error saving\";\n if (hasChanges) return \"Unsaved\";\n return null;\n };\n\n const tabs = [\"edit\", \"version\", \"api\"] as const;\n const saveText = getSaveStatusText();\n\n const iconBtnClass = \"p-1.5 rounded-lg hover:bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-muted)] hover:text-[var(--kyro-text-primary)] transition-all shrink-0\";\n\n return (\n <div className=\"flex items-center gap-1 px-2 py-1.5 bg-[var(--kyro-surface)] border-b border-[var(--kyro-border)] w-full overflow-x-auto\">\n {onBack && (\n <button type=\"button\" onClick={onBack} className=\"p-1 rounded-lg hover:bg-[var(--kyro-surface-accent)] text-[var(--kyro-text-secondary)] transition-all shrink-0\">\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"M19 12H5M12 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n <div className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[status] || \"bg-[var(--kyro-text-muted)]\"}`} />\n\n {saveText && (\n <span className={`text-[10px] whitespace-nowrap max-md:hidden ${saveStatus === \"error\" ? \"text-[var(--kyro-error)]\" : \"text-[var(--kyro-text-muted)]\"}`}>\n {saveStatus === \"saving\" && <Spinner size=\"sm\" className=\"inline mr-0.5\" />}\n {saveText}\n </span>\n )}\n\n <div className=\"flex items-center gap-0.5 bg-[var(--kyro-bg-secondary)] p-0.5 rounded-lg border border-[var(--kyro-border)] shrink-0 max-md:hidden\">\n {tabs.map((v) => (\n <button key={v} type=\"button\" onClick={() => setView(v)}\n className={`px-2.5 py-1 text-[11px] font-semibold rounded-md transition-all ${\n view === v\n ? \"bg-[var(--kyro-surface)] shadow-sm border border-[var(--kyro-border)] text-[var(--kyro-text-primary)]\"\n : \"text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)]\"\n }`}\n >\n {v === \"edit\" ? \"Edit\" : v === \"version\" ? \"Ver\" : \"API\"}\n </button>\n ))}\n </div>\n\n <div className=\"flex items-center gap-1 ml-auto shrink-0\">\n {onPreview && (\n <button type=\"button\" onClick={onPreview} className={`${iconBtnClass} max-md:hidden`} title=\"Preview\">\n <IconEye className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {onViewHistory && (\n <button type=\"button\" onClick={onViewHistory} className={`${iconBtnClass} max-md:hidden`} title=\"View History\">\n <IconClock className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {onDuplicate && (\n <button type=\"button\" onClick={onDuplicate} className={`${iconBtnClass} max-md:hidden`} title=\"Duplicate\">\n <IconCopy className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {onDelete && (\n <button type=\"button\" onClick={onDelete} className={`${iconBtnClass} hover:bg-[var(--kyro-danger-bg)] hover:text-[var(--kyro-danger)] max-md:hidden`} title=\"Delete\">\n <IconTrash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {onToggleSidebar && (\n <button type=\"button\" onClick={onToggleSidebar} className={`${iconBtnClass} max-md:hidden`} title=\"Toggle Sidebar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" />\n </svg>\n </button>\n )}\n\n {/* Mobile overflow menu */}\n <div ref={moreRef} className=\"relative md:hidden\">\n <button type=\"button\" onClick={() => setMoreOpen(!moreOpen)} className={iconBtnClass} title=\"More\">\n <IconMoreVertical className=\"w-3.5 h-3.5\" />\n </button>\n {moreOpen && (\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-lg shadow-xl z-50 py-1 max-h-[70vh] overflow-y-auto\">\n {saveText && (\n <div className=\"px-3 py-2 text-[10px] text-[var(--kyro-text-muted)] border-b border-[var(--kyro-border)] flex items-center gap-1.5\">\n <div className={`w-1.5 h-1.5 rounded-full ${STATUS_DOT[status]}`} />\n <span className=\"capitalize\">{status}</span>\n <span>·</span>\n {saveStatus === \"saving\" && <Spinner size=\"sm\" className=\"inline\" />}\n <span>{saveText}</span>\n </div>\n )}\n <div className=\"flex gap-1 px-2 py-2 border-b border-[var(--kyro-border)]\">\n {tabs.map((v) => (\n <button key={v} type=\"button\" onClick={() => { setView(v); setMoreOpen(false); }}\n className={`px-2.5 py-1 text-[11px] font-semibold rounded-md transition-all flex-1 ${\n view === v\n ? \"bg-[var(--kyro-primary)] text-white\"\n : \"text-[var(--kyro-text-muted)] hover:text-[var(--kyro-text-primary)]\"\n }`}\n >\n {v === \"edit\" ? \"Edit\" : v === \"version\" ? \"Ver\" : \"API\"}\n </button>\n ))}\n </div>\n {onViewHistory && (\n <button type=\"button\" onClick={() => { onViewHistory(); setMoreOpen(false); }} className=\"w-full flex items-center gap-2 px-3 py-2 text-xs text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)] transition-colors\">\n <IconClock className=\"w-3.5 h-3.5\" /> View History\n </button>\n )}\n {onDuplicate && (\n <button type=\"button\" onClick={() => { onDuplicate(); setMoreOpen(false); }} className=\"w-full flex items-center gap-2 px-3 py-2 text-xs text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)] transition-colors\">\n <IconCopy className=\"w-3.5 h-3.5\" /> Duplicate\n </button>\n )}\n {onPreview && (\n <button type=\"button\" onClick={() => { onPreview(); setMoreOpen(false); }} className=\"w-full flex items-center gap-2 px-3 py-2 text-xs text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)] transition-colors\">\n <IconEye className=\"w-3.5 h-3.5\" /> Preview\n </button>\n )}\n {onDelete && (\n <div className=\"border-t border-[var(--kyro-border)] mt-1 pt-1\">\n <button type=\"button\" onClick={() => { onDelete(); setMoreOpen(false); }} className=\"w-full flex items-center gap-2 px-3 py-2 text-xs text-[var(--kyro-danger)] hover:bg-[var(--kyro-danger-bg)] transition-colors\">\n <IconTrash2 className=\"w-3.5 h-3.5\" /> Delete\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n\n <div className=\"h-4 w-px bg-[var(--kyro-border)] mx-0.5\" />\n\n {status === \"draft\" && onPublish && (\n <button type=\"button\" onClick={onPublish} disabled={saveStatus === \"saving\"}\n className=\"kyro-btn kyro-btn-primary kyro-btn-sm flex items-center gap-1 shrink-0\"\n >\n <IconSend className=\"w-3.5 h-3.5\" />\n <span className=\"max-md:hidden\">Publish</span>\n </button>\n )}\n {status === \"published\" && onUnpublish && (\n <button type=\"button\" onClick={onUnpublish} disabled={saveStatus === \"saving\"}\n className=\"kyro-btn kyro-btn-secondary kyro-btn-sm flex items-center gap-1 shrink-0\"\n >\n <IconUndo className=\"w-3.5 h-3.5\" />\n <span className=\"max-md:hidden\">Unpublish</span>\n </button>\n )}\n\n <SplitButton\n status={status}\n saveStatus={saveStatus}\n hasChanges={hasChanges}\n onPublish={onSave}\n >\n {onDuplicate && (\n <DropdownItem icon={<IconCopy className=\"w-4 h-4\" />}>Duplicate</DropdownItem>\n )}\n {onViewHistory && (\n <DropdownItem icon={<IconClock className=\"w-4 h-4\" />}>View History</DropdownItem>\n )}\n {onPreview && (\n <DropdownItem icon={<IconEye className=\"w-4 h-4\" />}>Preview</DropdownItem>\n )}\n {(onDuplicate || onViewHistory || onPreview) && <DropdownSeparator />}\n {onDelete && (\n <DropdownItem onClick={onDelete} danger icon={<IconTrash2 className=\"w-4 h-4\" />}>Delete</DropdownItem>\n )}\n </SplitButton>\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport { apiGet, apiPatch, apiPost, apiDelete } from \"../lib/api\";\nimport type {\n KyroConfig,\n CollectionConfig,\n GlobalConfig,\n} from \"@kyro-cms/core/client\";\nimport { AutoForm } from \"./AutoForm\";\nimport { ActionBar, type DocumentStatus, type SaveStatus } from \"./ActionBar\";\nimport { Spinner } from \"./ui/Spinner\";\nimport { Shimmer } from \"./ui/Shimmer\";\nimport { useUIStore, toast } from \"../lib/stores\";\nimport { PageHeader } from \"./ui/PageHeader\";\nimport { Badge } from \"./ui/Badge\";\nimport { SplitButton } from \"./ui/SplitButton\";\nimport { adminPath } from \"../lib/paths\";\nimport { resolveFieldValue } from \"../lib/resolve-field-value\";\n\n\ninterface DetailViewProps {\n config: KyroConfig;\n collection?: CollectionConfig;\n global?: GlobalConfig;\n documentId?: string;\n onBack: () => void;\n onSave: () => void;\n onDelete?: () => void;\n onError: (message: string) => void;\n mode?: \"collection\" | \"global\";\n}\n\nexport function DetailView({\n config,\n collection,\n global,\n documentId,\n onBack,\n onSave,\n onDelete,\n onError,\n mode = \"collection\",\n}: DetailViewProps) {\n const { confirm, alert } = useUIStore();\n const [data, setData] = useState<Record<string, unknown>>({});\n const [originalData, setOriginalData] = useState<Record<string, unknown>>({});\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [saveStatus, setSaveStatus] = useState<SaveStatus>(\"idle\");\n const [deleting, setDeleting] = useState(false);\n const [status, setStatus] = useState<DocumentStatus>(\"draft\");\n const [createdAt, setCreatedAt] = useState<string | null>(null);\n const [updatedAt, setUpdatedAt] = useState<string | null>(null);\n const [publishedAt, setPublishedAt] = useState<string | null>(null);\n const [justSaved, setJustSaved] = useState(false);\n\n const fields = global?.fields || collection?.fields || [];\n const label = global?.label || collection?.label || \"Document\";\n const slug = global?.slug || collection?.slug || \"\";\n\n const hasChanges = JSON.stringify(data) !== JSON.stringify(originalData);\n\n // Auto-set status to draft when there are changes from a published state\n useEffect(() => {\n if (hasChanges && status === \"published\") {\n setStatus(\"draft\");\n }\n }, [hasChanges, status]);\n\n useEffect(() => {\n if (hasChanges && saveStatus === \"saved\") {\n setSaveStatus(\"idle\");\n }\n }, [hasChanges, saveStatus]);\n\n useEffect(() => {\n if (mode === \"global\") {\n loadGlobal();\n } else if (documentId) {\n loadDocument();\n }\n }, [documentId, mode, slug]);\n\n\n const loadDocument = async () => {\n try {\n setLoading(true);\n const result = (await apiGet(`/api/${slug}/${documentId}`, { autoToast: false }) as {\n data?: Record<string, unknown>;\n status?: string;\n createdAt?: string;\n updatedAt?: string;\n publishedAt?: string;\n });\n const docData = result.data || {};\n setData(docData);\n setOriginalData(docData);\n setStatus(((docData as any)?.status || result.status || \"draft\") as DocumentStatus);\n setCreatedAt(result.createdAt || (docData.createdAt as string) || null);\n setUpdatedAt(result.updatedAt || (docData.updatedAt as string) || null);\n setPublishedAt(result.publishedAt || (docData.publishedAt as string) || null);\n } catch {\n onError(\"Failed to load document\");\n } finally {\n setLoading(false);\n }\n };\n\n const loadGlobal = async () => {\n try {\n setLoading(true);\n const result = (await apiGet(`/api/globals/${slug}`, { autoToast: false }) as {\n data?: Record<string, unknown>;\n createdAt?: string;\n updatedAt?: string;\n });\n const globalData = result.data || {};\n setData(globalData);\n setOriginalData(globalData);\n setCreatedAt(result.createdAt || null);\n setUpdatedAt(result.updatedAt || null);\n } catch {\n onError(\"Failed to load global\");\n } finally {\n setLoading(false);\n }\n };\n\n const handleSave = useCallback(\n async (isAutosave = false) => {\n try {\n setSaveStatus(\"saving\");\n const endpoint =\n mode === \"global\"\n ? `/api/globals/${slug}`\n : `/api/${slug}/${documentId}`;\n\n const isDraft = status === \"draft\" || (data as any)?.status === \"draft\";\n const result = (await apiPatch(endpoint, data, { autoToast: false, headers: { \"X-Draft\": String(isDraft) } }) as { data?: Record<string, unknown> });\n const savedData = (result && (result.data || result)) || data;\n\n if (!isAutosave) {\n setOriginalData(savedData);\n onSave();\n }\n\n setData(savedData);\n setStatus((savedData as any)?.status || status);\n setSaveStatus(\"saved\");\n setUpdatedAt(new Date().toISOString());\n\n // Show green border for 3 seconds after any save\n setJustSaved(true);\n setTimeout(() => setJustSaved(false), 3000);\n\n if (!isAutosave) {\n const isDraft = status === \"draft\" || (savedData as any)?.status === \"draft\";\n if (isDraft) toast.warning(\"Draft saved\");\n else toast.success(\"Updated\");\n }\n\n setTimeout(() => {\n setSaveStatus(\"idle\");\n }, 2000);\n } catch {\n setSaveStatus(\"error\");\n if (!isAutosave) {\n onError(\"Failed to save changes\");\n toast.error(\"Failed to save changes\");\n }\n } finally {\n setSaving(false);\n }\n },\n [data, mode, slug, documentId, status, onSave, onError],\n );\n\n const handlePublish = async () => {\n try {\n setSaving(true);\n await apiPatch(`/api/${slug}/${documentId}`, data, {\n autoToast: false,\n headers: { \"X-Draft\": \"false\" },\n } as any);\n setStatus(\"published\");\n setPublishedAt(new Date().toISOString());\n toast.success(\"Published successfully\");\n onSave();\n } catch {\n onError(\"Failed to publish\");\n toast.error(\"Failed to publish\");\n } finally {\n setSaving(false);\n }\n };\n\n const handleUnpublish = async () => {\n try {\n setSaving(true);\n await apiPatch(`/api/${slug}/${documentId}`, { status: 'draft' }, {\n autoToast: false,\n headers: { \"X-Draft\": \"false\" },\n } as any);\n setStatus(\"draft\");\n toast.warning(\"Document unpublished\");\n onSave();\n } catch {\n onError(\"Failed to unpublish\");\n toast.error(\"Failed to unpublish\");\n } finally {\n setSaving(false);\n }\n };\n\n const handleDuplicate = async () => {\n try {\n setSaving(true);\n await apiPost(`/api/${slug}/${documentId}/duplicate`, undefined, { autoToast: false });\n toast.success(\"Document duplicated\");\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : \"Failed to duplicate document\";\n onError(message);\n toast.error(message);\n } finally {\n setSaving(false);\n }\n };\n\n const handleDeleteTrigger = () => {\n confirm({\n title: `Delete ${label}?`,\n message: \"This action cannot be undone.\",\n variant: \"danger\",\n onConfirm: async () => {\n try {\n setDeleting(true);\n await apiDelete(`/api/${slug}/${documentId}`, { autoToast: false });\n onDelete?.();\n toast.error(\"Document deleted\");\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : \"Failed to delete document\";\n toast.error(message);\n } finally {\n setDeleting(false);\n }\n }\n });\n };\n\n if (loading) {\n return (\n <div className=\"kyro-detail\">\n <div className=\"space-y-6 p-4\">\n <div className=\"space-y-2\">\n <Shimmer variant=\"text\" className=\"w-1/3\" />\n <Shimmer variant=\"text\" className=\"w-2/3\" />\n </div>\n <div className=\"space-y-4\">\n <Shimmer variant=\"rect\" count={4} />\n </div>\n </div>\n </div>\n );\n }\n\n const isSingleLayout =\n mode === \"global\" || collection?.admin?.layout === \"single\";\n\n return (\n <div className=\"kyro-detail\">\n <PageHeader\n back={{ onClick: onBack }}\n breadcrumbs={[\n { label: mode === \"global\" ? \"Globals\" : \"Collections\" },\n {\n label: label,\n href: mode === \"collection\" ? `${adminPath}/${slug}` : undefined\n },\n { label: mode === \"global\" ? \"Edit\" : documentId ? \"Edit\" : \"New\" }\n ]}\n title={\n (mode === \"global\" ? label : ((resolveFieldValue(collection?.fields as any, data, collection?.admin?.useAsTitle || \"title\") as string) || data.name as string || documentId || `New ${collection?.singularLabel || label}`))\n }\n metadata={[\n <Badge\n key=\"status\"\n variant={status === \"published\" ? \"success\" : \"warning\"}\n dot\n className=\"text-[10px] font-bold \"\n >\n {status}\n </Badge>\n ]}\n />\n\n <ActionBar\n status={status}\n saveStatus={saveStatus}\n hasChanges={hasChanges}\n onSave={() => handleSave(false)}\n onPublish={handlePublish}\n onUnpublish={status === \"published\" ? handleUnpublish : undefined}\n onDuplicate={handleDuplicate}\n onViewHistory={() => {\n window.dispatchEvent(new CustomEvent('kyro:show-version-history'));\n }}\n onPreview={() =>\n window.open(`/preview/${slug}/${documentId}`, \"_blank\")\n }\n onDelete={handleDeleteTrigger}\n onBack={onBack}\n onToggleSidebar={() => window.dispatchEvent(new CustomEvent(\"toggle-sidebar\"))}\n publishedAt={publishedAt}\n updatedAt={updatedAt}\n />\n\n <div\n className={\n isSingleLayout\n ? \"w-full pt-4 md:pt-8\"\n : \"w-full mx-auto grid grid-cols-1 lg:grid-cols-[1fr_360px] gap-4 md:gap-8 pt-4 md:pt-0\"\n }\n >\n <div className=\"space-y-4 md:space-y-8 min-w-0\">\n <div className=\"surface-tile p-4 md:p-8\">\n <div className=\"flex items-center justify-between mb-8 px-1\">\n <h2 className=\"text-[10px] font-bold tracking-[0.2em] opacity-40\">\n Core Configuration\n </h2>\n <div className=\"h-px flex-1 bg-[var(--kyro-border)] ml-6 opacity-30\" />\n </div>\n <AutoForm\n config={\n collection\n ? { ...collection, fields: fields }\n : ({ slug: \"unknown\", fields: fields } as CollectionConfig)\n }\n data={data}\n onChange={setData}\n layout={isSingleLayout ? \"single\" : \"split\"}\n globalSlug={mode === \"global\" ? slug : undefined}\n collectionSlug={mode === \"collection\" ? slug : undefined}\n onActionSuccess={(message) => toast.success(message)}\n onActionError={(message) => toast.error(message)}\n documentStatus={status}\n justSaved={justSaved}\n />\n {isSingleLayout && (\n <div className=\"mt-8 pt-8 border-t border-[var(--kyro-border)] flex justify-end gap-3\">\n {mode === \"collection\" && documentId && (\n <button\n type=\"button\"\n onClick={handleDeleteTrigger}\n className=\"kyro-btn kyro-btn-lg kyro-btn-ghost text-[var(--kyro-error)]\"\n >\n Delete\n </button>\n )}\n <SplitButton\n status={status}\n saveStatus={saving ? \"saving\" : \"idle\"}\n hasChanges={hasChanges}\n onPublish={() => handleSave(false)}\n disabled={saving}\n />\n </div>\n )}\n </div>\n </div>\n\n {!isSingleLayout && (\n <div className=\"space-y-4 md:space-y-6 animate-in fade-in slide-in-from-right-4 duration-500\">\n <div className=\"surface-tile p-4 md:p-8\">\n <h3 className=\"text-[10px] font-bold tracking-[0.2em] opacity-40 mb-4 md:mb-6\">\n Metadata\n </h3>\n <div className=\"space-y-4 md:space-y-6\">\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-[10px] font-bold tracking-widest opacity-40\">\n Dynamic Status\n </span>\n <div>\n <span\n className={`inline-flex items-center px-3 py-1 rounded-full text-[9px] font-bold tracking-widest ${status === \"published\" ? \"bg-green-500/10 text-green-500\" : \"bg-amber-500/10 text-amber-500\"}`}\n >\n {status || \"draft\"}\n </span>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-[10px] font-bold tracking-widest opacity-40\">\n Date Created\n </span>\n <span className=\"text-sm font-bold text-[var(--kyro-text-secondary)]\">\n {createdAt\n ? new Date(createdAt).toLocaleString(\"en-US\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n })\n : \"N/A\"}\n </span>\n </div>\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-[10px] font-bold tracking-widest opacity-40\">\n Last Modified\n </span>\n <span className=\"text-sm font-bold text-[var(--kyro-text-secondary)]\">\n {updatedAt\n ? new Date(updatedAt).toLocaleString(\"en-US\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n })\n : \"Just now\"}\n </span>\n </div>\n {publishedAt && (\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-[10px] font-bold tracking-widest opacity-40\">\n Public At\n </span>\n <span className=\"text-sm font-bold text-[var(--kyro-text-secondary)]\">\n {new Date(publishedAt).toLocaleString(\"en-US\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n })}\n </span>\n </div>\n )}\n </div>\n </div>\n\n <div className=\"surface-tile p-4 md:p-8 bg-[var(--kyro-bg-secondary)]\">\n <h3 className=\"text-[10px] font-bold tracking-[0.2em] opacity-40 mb-3 md:mb-4\">\n Quick Links\n </h3>\n <div className=\"space-y-2 md:space-y-3\">\n <button\n type=\"button\"\n onClick={handleDuplicate}\n className=\"kyro-btn kyro-btn-sm kyro-btn-ghost w-full justify-start\"\n >\n Duplicate Document\n </button>\n <button\n type=\"button\"\n onClick={() => window.open(`/preview/${slug}/${documentId}`, \"_blank\")}\n className=\"kyro-btn kyro-btn-sm kyro-btn-ghost w-full justify-start\"\n >\n View Public Page\n </button>\n <button\n type=\"button\"\n onClick={handleDeleteTrigger}\n className=\"kyro-btn kyro-btn-sm kyro-btn-ghost w-full justify-start text-[var(--kyro-error)] hover:bg-[var(--kyro-danger-bg)]\"\n >\n Delete Entry\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { apiPost } from \"../lib/api\";\nimport type { KyroConfig, CollectionConfig } from \"@kyro-cms/core/client\";\nimport { AutoForm } from \"./AutoForm\";\nimport { Spinner } from \"./ui/Spinner\";\nimport { PageHeader } from \"./ui/PageHeader\";\nimport { adminPath } from \"../lib/paths\";\nimport { toast } from \"../lib/stores\";\n\n\ninterface CreateViewProps {\n config: KyroConfig;\n collection: CollectionConfig;\n onCancel: () => void;\n onSuccess: () => void;\n onError: (message: string) => void;\n}\n\nexport function CreateView({\n config,\n collection,\n onCancel,\n onSuccess,\n onError,\n}: CreateViewProps) {\n const [data, setData] = useState<Record<string, unknown>>({});\n const [saving, setSaving] = useState(false);\n\n const fields = collection.fields || [];\n const label = collection.label || collection.slug;\n\n const handleSubmit = async (e?: React.FormEvent) => {\n if (e) e.preventDefault();\n\n try {\n setSaving(true);\n await apiPost(`/api/${collection.slug}`, data);\n toast.success(`${collection.singularLabel || collection.label || \"Document\"} created`);\n onSuccess();\n } catch (err) {\n onError(err instanceof Error ? err.message : \"Failed to create\");\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <div className=\"kyro-detail\">\n <PageHeader\n back={{ onClick: onCancel }}\n breadcrumbs={[\n { label: \"Collections\" },\n { label: label, href: `${adminPath}/${collection.slug}` },\n { label: \"New\" }\n ]}\n title={`Create ${collection.singularLabel || label}`}\n action={{\n label: saving ? \"Creating...\" : `Create ${collection.singularLabel || label}`,\n onClick: () => handleSubmit(),\n }}\n\n />\n\n\n <div className=\"kyro-detail-body\">\n <div className=\"kyro-card\">\n <div className=\"kyro-card-content\">\n <form>\n <AutoForm\n config={{ ...collection, fields }}\n data={data}\n onChange={setData}\n />\n </form>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { createContext, useContext, type ReactNode } from \"react\";\nimport { \n CheckCircle2, \n AlertTriangle, \n Info, \n X,\n ShieldAlert\n} from \"./icons\";\n\nimport { useToastStore } from \"../../lib/stores\";\n\ntype ToastType = \"success\" | \"error\" | \"warning\" | \"info\";\n\ninterface ToastProps {\n type: ToastType;\n message: string;\n onClose: () => void;\n}\n\nexport function Toast({ type, message, onClose }: ToastProps) {\n const [isPaused, setIsPaused] = React.useState(false);\n const timerRef = React.useRef<NodeJS.Timeout | null>(null);\n\n const startTimer = () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(onClose, 5000);\n };\n\n const clearTimer = () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n\n React.useEffect(() => {\n if (!isPaused) {\n startTimer();\n } else {\n clearTimer();\n }\n return clearTimer;\n }, [isPaused, onClose]);\n\n const Icon = {\n success: CheckCircle2,\n error: ShieldAlert,\n warning: AlertTriangle,\n info: Info,\n }[type];\n\n return (\n <div \n className={`kyro-toast kyro-toast-${type} group animate-in fade-in slide-in-from-right-4 duration-300`}\n onMouseEnter={() => setIsPaused(true)}\n onMouseLeave={() => setIsPaused(false)}\n >\n <div className=\"kyro-toast-accent\" />\n <div className=\"kyro-toast-icon-container\">\n <Icon className=\"w-4 h-4\" />\n </div>\n <div className=\"kyro-toast-content\">\n <p className=\"kyro-toast-message\">{message}</p>\n </div>\n <button \n type=\"button\" \n className=\"kyro-toast-close group-hover:opacity-100 opacity-40 transition-opacity\" \n onClick={onClose}\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n );\n}\n\ninterface ToastProviderProps {\n children: ReactNode;\n}\n\nexport function ToastProvider({ children }: ToastProviderProps) {\n return <>{children}</>;\n}\n\nexport function useToast() {\n const addToast = useToastStore((state) => state.addToast);\n const removeToast = useToastStore((state) => state.removeToast);\n const toasts = useToastStore((state) => state.toasts);\n\n return { toasts, addToast, removeToast };\n}\n","import { useToastStore } from \"../../lib/stores\";\nimport { Toast } from \"./Toast\";\n\nexport function Toaster() {\n const toasts = useToastStore((state) => state.toasts);\n const removeToast = useToastStore((state) => state.removeToast);\n\n return (\n <div className=\"kyro-toasts-container\" style={{ position: \"fixed\", bottom: \"24px\", right: \"24px\", display: \"flex\", flexDirection: \"column\", gap: \"12px\", zIndex: 9999, pointerEvents: \"none\" }}>\n {toasts.map((t) => (\n <div key={t.id} style={{ pointerEvents: \"auto\" }}>\n <Toast type={t.type} message={t.message} onClose={() => removeToast(t.id)} />\n </div>\n ))}\n </div>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { apiGet, apiPost } from \"../lib/api\";\nimport { ThemeProvider, type ThemeMode } from \"./ThemeProvider\";\nimport { Toaster } from \"./ui/Toaster\";\nimport { useToastStore } from \"../lib/stores\";\n\ninterface LoginPageProps {\n onAuth: (token: string, user: Record<string, unknown>) => void;\n theme?: ThemeMode;\n}\n\ntype AuthMode = \"login\" | \"register\";\n\nexport function LoginPage({ onAuth, theme = \"light\" }: LoginPageProps) {\n const [mode, setMode] = useState<AuthMode>(\"login\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [isFirstUser, setIsFirstUser] = useState(false);\n const addToast = useToastStore((state) => state.addToast);\n\n useEffect(() => {\n checkIfFirstUser();\n }, []);\n\n const checkIfFirstUser = async () => {\n try {\n await apiGet(\"/api/users\");\n } catch {\n setIsFirstUser(true);\n setMode(\"register\");\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setLoading(true);\n\n try {\n const endpoint =\n mode === \"login\" ? \"/api/auth/login\" : \"/api/auth/register\";\n const body: Record<string, string> = { email, password };\n if (mode === \"register\") {\n body.confirmPassword = confirmPassword;\n }\n\n const data = await apiPost<any>(endpoint, body);\n\n if (data.isFirstUser) {\n setIsFirstUser(true);\n }\n\n localStorage.setItem(\"kyro_user\", JSON.stringify(data.user));\n addToast(\n \"success\",\n mode === \"login\" ? \"Welcome back!\" : \"Account created!\",\n );\n onAuth(data.token, data.user);\n } catch {\n addToast(\"error\", \"Connection failed\");\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ThemeProvider defaultMode={theme}>\n <div className=\"kyro-login-page\">\n <div className=\"kyro-login-container\">\n <div className=\"kyro-login-header\">\n <h1 className=\"kyro-login-title\">\n {isFirstUser\n ? \"Create Admin Account\"\n : mode === \"login\"\n ? \"Sign In\"\n : \"Create Account\"}\n </h1>\n <p className=\"kyro-login-subtitle\">\n {isFirstUser\n ? \"Set up your admin account to get started\"\n : mode === \"login\"\n ? \"Enter your credentials to access the admin\"\n : \"Create an account to access the admin\"}\n </p>\n </div>\n\n <form onSubmit={handleSubmit} className=\"kyro-login-form\">\n <div className=\"kyro-form-group\">\n <label htmlFor=\"email\">Email</label>\n <input\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"admin@example.com\"\n required\n autoComplete=\"email\"\n />\n </div>\n\n <div className=\"kyro-form-group\">\n <label htmlFor=\"password\">Password</label>\n <input\n id=\"password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"••••••••\"\n required\n minLength={8}\n autoComplete={\n mode === \"login\" ? \"current-password\" : \"new-password\"\n }\n />\n </div>\n\n {mode === \"register\" && (\n <div className=\"kyro-form-group\">\n <label htmlFor=\"confirmPassword\">Confirm Password</label>\n <input\n id=\"confirmPassword\"\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n placeholder=\"••••••••\"\n required\n minLength={8}\n autoComplete=\"new-password\"\n />\n </div>\n )}\n\n <button\n type=\"submit\"\n className=\"kyro-btn kyro-btn-primary kyro-btn-lg\"\n disabled={loading}\n >\n {loading\n ? mode === \"login\"\n ? \"Signing in...\"\n : \"Creating account...\"\n : mode === \"login\"\n ? \"Sign In\"\n : \"Create Account\"}\n </button>\n </form>\n\n {!isFirstUser && (\n <div className=\"kyro-login-footer\">\n <p>\n {mode === \"login\" ? (\n <>\n Don't have an account?{\" \"}\n <button\n type=\"button\"\n className=\"kyro-login-link\"\n onClick={() => setMode(\"register\")}\n >\n Sign up\n </button>\n </>\n ) : (\n <>\n Already have an account?{\" \"}\n <button\n type=\"button\"\n className=\"kyro-login-link\"\n onClick={() => setMode(\"login\")}\n >\n Sign in\n </button>\n </>\n )}\n </p>\n </div>\n )}\n </div>\n <Toaster />\n </div>\n </ThemeProvider>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { LayoutDashboard, FileText, Image as ImageIcon, Users, Plus, ArrowUpRight, Activity, Clock as ClockIcon, ArrowRight } from \"./ui/icons\";\nimport { useAuthStore } from \"../lib/stores\";\nimport { authCollectionSlugs } from \"../lib/config\";\nimport { PageHeader } from \"./ui/PageHeader\";\nimport { Shimmer } from \"./ui/Shimmer\";\n\n\ninterface DashboardProps {\n collections: Record<string, unknown>;\n onNavigate: (view: string, collection?: string) => void;\n user: Record<string, unknown> | null;\n}\n\nexport function Dashboard({ collections, onNavigate, user }: DashboardProps) {\n const { permissions } = useAuthStore();\n const [stats, setStats] = useState({\n totalDocs: 0,\n totalMedia: 0,\n totalUsers: 0,\n recentActivity: [],\n });\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n // Mock data fetching for high-fidelity look\n const timer = setTimeout(() => {\n setStats({\n totalDocs: 124,\n totalMedia: 856,\n totalUsers: 12,\n recentActivity: [\n {\n id: 1,\n type: \"edit\",\n user: \"Daniel Dozie\",\n doc: \"Getting Started with Kyro\",\n collection: \"posts\",\n time: \"2m ago\",\n },\n {\n id: 2,\n type: \"create\",\n user: \"Jane Smith\",\n doc: \"New Product Launch\",\n collection: \"products\",\n time: \"15m ago\",\n },\n {\n id: 3,\n type: \"upload\",\n user: \"Daniel Dozie\",\n doc: \"hero-banner.jpg\",\n collection: \"media\",\n time: \"1h ago\",\n },\n {\n id: 4,\n type: \"publish\",\n user: \"System\",\n doc: \"Weekly Update\",\n collection: \"posts\",\n time: \"3h ago\",\n },\n ],\n } as { totalDocs: number; totalMedia: number; totalUsers: number; recentActivity: Array<{ id: number; type: string; user: string; doc: string; collection: string; time: string }> });\n setLoading(false);\n }, 800);\n return () => clearTimeout(timer);\n }, []);\n\n const collectionList = Object.entries(collections).filter(\n ([slug]) =>\n !authCollectionSlugs.includes(slug) &&\n permissions?.collections?.[slug]?.read !== false,\n );\n\n return (\n <div className=\"w-full space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-700 px-8 pb-12\">\n <PageHeader\n title={`Welcome back, ${user?.email?.split(\"@\")[0] || \"Admin\"}`}\n description=\"Everything looks great in your command center today.\"\n action={collectionList.length > 0 && permissions?.collections?.[collectionList[0]?.[0]]?.create !== false ? {\n label: \"New Document\",\n onClick: () => onNavigate(\"create\", collectionList[0]?.[0]),\n icon: Plus,\n } : undefined}\n />\n\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n {[\n {\n label: \"Total Content\",\n value: stats.totalDocs,\n icon: FileText,\n color: \"text-blue-500\",\n },\n {\n label: \"Media Assets\",\n value: stats.totalMedia,\n icon: ImageIcon,\n color: \"text-purple-500\",\n },\n {\n label: \"Active Users\",\n value: stats.totalUsers,\n icon: Users,\n color: \"text-green-500\",\n },\n {\n label: \"System Health\",\n value: \"100%\",\n icon: Activity,\n color: \"text-amber-500\",\n },\n ].map((stat, i) => (\n <div\n key={i}\n className=\"surface-tile p-6 flex items-center justify-between group hover:border-[var(--kyro-primary)] transition-all duration-500 cursor-default\"\n >\n <div>\n <p className=\"text-[10px] font-bold tracking-[0.2em] opacity-40 mb-1\">\n {stat.label}\n </p>\n <h3 className=\"text-3xl font-bold tracking-tighter\">\n {loading ? <Shimmer variant=\"text\" className=\"w-16\" /> : stat.value}\n </h3>\n </div>\n <div\n className={`p-3 rounded-2xl bg-[var(--kyro-bg-secondary)] group-hover:scale-110 transition-transform duration-500 ${stat.color}`}\n >\n <stat.icon className=\"w-6 h-6\" />\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_400px] gap-8\">\n {/* Main Content Area: Collections & Insights */}\n <div className=\"space-y-8 min-w-0\">\n <section className=\"surface-tile p-8\">\n <h2 className=\"text-xl font-bold mb-1 tracking-tight flex items-center gap-2\">\n <LayoutDashboard className=\"w-5 h-5 opacity-40\" />\n Content Growth\n </h2>\n <p className=\"text-[10px] font-bold tracking-widest opacity-40 mb-8\">\n Snapshot of document velocity over the last 7 days\n </p>\n\n {/* SVG Line Chart */}\n <div className=\"h-48 w-full relative mb-12\">\n <svg\n className=\"w-full h-full\"\n viewBox=\"0 0 1000 200\"\n preserveAspectRatio=\"none\"\n >\n <defs>\n <linearGradient\n id=\"chartGradient\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop\n offset=\"0%\"\n stopColor=\"var(--kyro-primary)\"\n stopOpacity=\"0.3\"\n />\n <stop\n offset=\"100%\"\n stopColor=\"var(--kyro-primary)\"\n stopOpacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path\n d=\"M0,180 Q100,140 200,160 T400,100 T600,120 T800,40 T1000,60 L1000,200 L0,200 Z\"\n fill=\"url(#chartGradient)\"\n className=\"animate-pulse duration-[4s]\"\n />\n <path\n d=\"M0,180 Q100,140 200,160 T400,100 T600,120 T800,40 T1000,60\"\n fill=\"none\"\n stroke=\"var(--kyro-primary)\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n className=\"filter drop-shadow-[0_0_8px_var(--kyro-primary)]\"\n />\n </svg>\n <div className=\"flex justify-between mt-4 text-[10px] font-bold opacity-30 tracking-widest \">\n <span>Mon</span>\n <span>Tue</span>\n <span>Wed</span>\n <span>Thu</span>\n <span>Fri</span>\n <span>Sat</span>\n <span>Sun</span>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {collectionList.map(([slug, config]: [string, Record<string, unknown>]) => (\n <div\n key={slug}\n onClick={() => onNavigate(\"list\", slug)}\n className=\"p-6 rounded-2xl border border-[var(--kyro-border)] hover:border-[var(--kyro-primary)] bg-[var(--kyro-bg-secondary)] hover:bg-[var(--kyro-surface)] transition-all cursor-pointer group\"\n >\n <div className=\"flex items-center justify-between mb-2\">\n <h3 className=\"font-bold text-lg tracking-tight group-hover:text-[var(--kyro-primary)] transition-colors\">\n {config.label || slug}\n </h3>\n <ArrowUpRight className=\"w-4 h-4 opacity-0 group-hover:opacity-100 transition-all\" />\n </div>\n <div className=\"w-full h-1 bg-[var(--kyro-bg-secondary)] rounded-full mb-3 overflow-hidden\">\n <div\n className=\"h-full bg-[var(--kyro-primary)]\"\n style={{ width: `${Math.random() * 60 + 20}%` }}\n />\n </div>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] line-clamp-1\">\n {config.admin?.description || `Manage ${slug} content.`}\n </p>\n </div>\n ))}\n </div>\n </section>\n\n <section className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <section className=\"surface-tile p-6 border border-[var(--kyro-border)] hover:border-[var(--kyro-primary)] transition-all cursor-pointer group\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-xl font-bold tracking-tight group-hover:text-[var(--kyro-primary)] transition-colors flex items-center gap-2\">\n <Plus className=\"w-5 h-5\" />\n Quick Links\n </h3>\n </div>\n <div className=\"space-y-3\">\n {collectionList\n .filter(([slug]) => permissions?.collections?.[slug]?.create !== false)\n .map(([slug]) => (\n <button type=\"button\"\n key={slug}\n onClick={() => onNavigate(\"new\", slug)}\n className=\"w-full flex items-center justify-between p-4 bg-[var(--kyro-bg-secondary)] border border-[var(--kyro-border)] rounded-xl hover:bg-[var(--kyro-surface-accent)] hover:border-[var(--kyro-primary)] transition-all group/btn\"\n >\n <span className=\"text-sm font-medium text-[var(--kyro-text-primary)]\">\n New {(collections[slug] as Record<string, unknown>)?.singularLabel || (collections[slug] as Record<string, unknown>)?.label || slug}\n </span>\n <Plus className=\"w-4 h-4 text-[var(--kyro-text-secondary)] group-hover/btn:text-[var(--kyro-primary)]\" />\n </button>\n ))}\n {collectionList.every(([slug]) => permissions?.collections?.[slug]?.create === false) && (\n <p className=\"text-sm text-[var(--kyro-text-secondary)] py-2\">No collections available for creation.</p>\n )}\n </div>\n </section>\n\n <div className=\"surface-tile p-8 bg-[#0f172a] text-white border-none shadow-2xl shadow-blue-500/10 overflow-hidden relative group cursor-pointer\">\n <div className=\"relative z-10\">\n <h3 className=\"text-2xl font-bold tracking-tighter mb-2\">\n Media Library\n </h3>\n <p className=\"opacity-80 text-sm font-medium mb-6\">\n Manage high-fidelity assets with our liquid masonry gallery.\n </p>\n <div className=\"flex items-center gap-2 font-bold text-xs tracking-widest text-blue-400\">\n Open Assets{\" \"}\n <ArrowRight className=\"w-4 h-4 group-hover:translate-x-1 transition-transform\" />\n </div>\n </div>\n <ImageIcon className=\"absolute bottom-[-20px] right-[-20px] w-48 h-48 opacity-10 rotate-12 group-hover:scale-110 transition-transform duration-1000\" />\n </div>\n </section>\n </div>\n\n {/* Sidebar Area: Recent Activity */}\n <div className=\"space-y-6\">\n <section className=\"surface-tile p-8\">\n <h2 className=\"text-xl font-bold mb-6 tracking-tight flex items-center gap-2\">\n <ClockIcon className=\"w-5 h-5 opacity-40\" />\n Recent Activity\n </h2>\n <div className=\"space-y-6\">\n {stats.recentActivity.map((act: Record<string, unknown>) => (\n <div key={act.id} className=\"flex gap-4 group\">\n <div className=\"mt-1\">\n <div className=\"w-8 h-8 rounded-full bg-[var(--kyro-bg-secondary)] flex items-center justify-center border border-[var(--kyro-border)] group-hover:bg-[var(--kyro-primary)] transition-colors\">\n <span className=\"text-[10px] font-bold\">\n {act.user[0]}\n </span>\n </div>\n </div>\n <div className=\"flex-1 border-b border-[var(--kyro-border)] pb-4 group-last:border-none\">\n <p className=\"text-sm font-medium text-[var(--kyro-text-primary)] leading-snug\">\n <span className=\"font-bold\">{act.user}</span>{\" \"}\n {act.type === \"create\"\n ? \"created\"\n : act.type === \"edit\"\n ? \"edited\"\n : act.type === \"publish\"\n ? \"published\"\n : \"uploaded\"}{\" \"}\n <span className=\"text-[var(--kyro-primary)] italic\">\n \"{act.doc}\"\n </span>{\" \"}\n in <span className=\"opacity-60\">{act.collection}</span>\n </p>\n <span className=\"text-[10px] font-bold opacity-40 mt-1 block\">\n {act.time}\n </span>\n </div>\n </div>\n ))}\n </div>\n <button type=\"button\" className=\"w-full mt-6 py-3 text-xs font-bold tracking-widest text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-text-primary)] transition-colors border-t border-[var(--kyro-border)] pt-6\">\n View Audit Logs\n </button>\n </section>\n\n <section className=\"surface-tile p-8\">\n <h2 className=\"text-xl font-bold mb-6 tracking-tight flex items-center gap-2\">\n <Activity className=\"w-5 h-5 opacity-40\" />\n System Status\n </h2>\n <div className=\"space-y-4\">\n {[\n {\n label: \"Cloud API\",\n status: \"Optimal\",\n pulse: \"bg-green-500\",\n },\n {\n label: \"Database Node\",\n status: \"Healthy\",\n pulse: \"bg-green-500\",\n },\n { label: \"Media CDN\", status: \"Active\", pulse: \"bg-blue-500\" },\n {\n label: \"Auth Service\",\n status: \"Secure\",\n pulse: \"bg-green-500\",\n },\n ].map((sys, index) => (\n <div\n key={index}\n className=\"flex items-center justify-between p-4 bg-[var(--kyro-bg-secondary)] rounded-2xl border border-[var(--kyro-border)]\"\n >\n <span className=\"text-xs font-bold text-[var(--kyro-text-secondary)]\">\n {sys.label}\n </span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-bold tracking-widest opacity-60\">\n {sys.status}\n </span>\n <div\n className={`w-2 h-2 rounded-full ${sys.pulse} animate-pulse shadow-[0_0_8px] shadow-current`}\n />\n </div>\n </div>\n ))}\n </div>\n </section>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { apiGet, apiPost, apiPatch, apiDelete } from \"../lib/api\";\nimport {\n Users,\n UserPlus,\n Shield,\n Lock,\n Unlock,\n Clock,\n Search,\n Trash2,\n AlertTriangle,\n} from \"./ui/icons\";\nimport { useUIStore, toast } from \"../lib/stores\";\nimport { Modal, ModalContent, ModalActions } from \"./ui/Modal\";\nimport { Badge } from \"./ui/Badge\";\nimport { PageHeader } from \"./ui/PageHeader\";\n\ninterface User {\n id: string;\n email: string;\n name?: string;\n role: string;\n avatar?: string;\n locked?: boolean;\n lastLogin?: string;\n tenantId?: string;\n createdAt: string;\n}\n\nexport function UserManagement() {\n const [users, setUsers] = useState<User[]>([]);\n const [loading, setLoading] = useState(true);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [showCreateModal, setShowCreateModal] = useState(false);\n const [createForm, setCreateForm] = useState({ name: \"\", email: \"\", password: \"\", role: \"customer\" });\n const [createError, setCreateError] = useState(\"\");\n const [creating, setCreating] = useState(false);\n const { confirm, alert } = useUIStore();\n\n useEffect(() => {\n loadUsers();\n }, []);\n\n const loadUsers = async () => {\n try {\n setLoading(true);\n const result = await apiGet<any>(\"/api/users\");\n setUsers(result.docs || []);\n } catch (error) {\n console.error(\"Failed to load users:\", error);\n } finally {\n setLoading(false);\n }\n };\n\n const handleToggleLock = (user: User) => {\n const isLocking = !user.locked;\n confirm({\n title: isLocking ? \"Lock User Account?\" : \"Unlock User Account?\",\n message: isLocking\n ? `Are you sure you want to lock ${user.email}? They will be immediately logged out and unable to return.`\n : `Restore system access for ${user.email}?`,\n variant: isLocking ? \"danger\" : \"success\",\n onConfirm: async () => {\n try {\n await apiPatch(`/api/users/${user.id}`, { locked: isLocking });\n setUsers((prev) =>\n prev.map((u) => (u.id === user.id ? { ...u, locked: isLocking } : u)),\n );\n toast.success(isLocking ? `Account locked: ${user.email}` : `Account restored: ${user.email}`);\n } catch (error) {\n console.error(\"Failed to toggle user lock:\", error);\n toast.error(\"Failed to update account status\");\n }\n },\n });\n };\n\n const handleDelete = (user: User) => {\n confirm({\n title: \"Destroy User Account\",\n message: `You are about to permanently delete ${user.email}. This will remove all their data and cannot be undone.`,\n variant: \"danger\",\n confirmLabel: \"Destroy Account\",\n onConfirm: async () => {\n try {\n await apiDelete(`/api/users/${user.id}`);\n setUsers((prev) => prev.filter((u) => u.id !== user.id));\n toast.success(`Identity purged: ${user.email}`);\n } catch (error) {\n console.error(\"Failed to delete user:\", error);\n toast.error(\"Failed to delete user\");\n }\n },\n });\n };\n\n const handleCreateUser = async () => {\n if (!createForm.email.trim() || !createForm.password.trim()) {\n setCreateError(\"Email and password are required\");\n return;\n }\n setCreating(true);\n setCreateError(\"\");\n try {\n await apiPost(\"/api/users\", {\n name: createForm.name.trim() || undefined,\n email: createForm.email.trim(),\n password: createForm.password,\n role: createForm.role,\n });\n setShowCreateModal(false);\n setCreateForm({ name: \"\", email: \"\", password: \"\", role: \"customer\" });\n toast.success(\"User created successfully\");\n loadUsers();\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Failed to create user\";\n setCreateError(message);\n toast.error(message);\n } finally {\n setCreating(false);\n }\n };\n\n const roleOptions = [\"super_admin\", \"admin\", \"editor\", \"author\", \"customer\", \"guest\"];\n\n const filteredUsers = users.filter(\n (u) =>\n u.email.toLowerCase().includes(searchQuery.toLowerCase()) ||\n u.name?.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n\n return (\n <div className=\"w-full space-y-6 animate-in fade-in slide-in-from-bottom-4 duration-700 px-4 md:px-8 pb-12\">\n {/* Header */}\n <PageHeader\n title=\"Identity & Access\"\n description=\"Manage the core administrative team and security permissions.\"\n icon={Users}\n action={{\n label: \"New User\",\n onClick: () => {\n setCreateForm({ name: \"\", email: \"\", password: \"\", role: \"customer\" });\n setCreateError(\"\");\n setShowCreateModal(true);\n },\n icon: UserPlus,\n }}\n />\n\n {/* Control Bar */}\n <div className=\"flex flex-col md:flex-row gap-3\">\n <div className=\"relative flex-1 group\">\n <Search className=\"absolute left-3.5 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--kyro-text-secondary)] opacity-40 group-focus-within:opacity-100 transition-opacity\" />\n <input\n type=\"text\"\n placeholder=\"Search by identity or email...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full pl-10 pr-4 py-2.5 bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] rounded-xl focus:outline-none focus:ring-2 focus:ring-[var(--kyro-sidebar-active)] transition-all text-xs font-bold\"\n />\n </div>\n <div className=\"flex items-center gap-1 bg-[var(--kyro-surface-accent)] p-1 rounded-xl border border-[var(--kyro-border)]\">\n <button className=\"px-4 py-1.5 text-[10px] font-bold tracking-widest bg-[var(--kyro-surface)] shadow-sm rounded-lg border border-[var(--kyro-border)]\">ALL</button>\n <button className=\"px-4 py-1.5 text-[10px] font-bold tracking-widest opacity-40 hover:opacity-100 transition-all\">ADMINS</button>\n <button className=\"px-4 py-1.5 text-[10px] font-bold tracking-widest opacity-40 hover:opacity-100 transition-all\">LOCKED</button>\n </div>\n </div>\n\n {/* User Table */}\n <div className=\"surface-tile overflow-x-auto\">\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"text-[var(--kyro-text-secondary)] font-bold text-[9px] tracking-[0.2em] uppercase border-b border-[var(--kyro-border)] whitespace-nowrap\">\n <th className=\"px-6 py-4 w-64\">Member Identity</th>\n <th className=\"px-6 py-4\">Administrative Role</th>\n <th className=\"px-6 py-4\">Security Status</th>\n <th className=\"px-6 py-4\">Last Activity</th>\n <th className=\"px-6 py-4 w-32 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-[var(--kyro-border)]\">\n {loading ? (\n Array.from({ length: 6 }).map((_, i) => (\n <tr key={i} className=\"animate-pulse\">\n <td colSpan={5} className=\"px-6 py-5 bg-[var(--kyro-surface-accent)]/30\" />\n </tr>\n ))\n ) : filteredUsers.length === 0 ? (\n <tr>\n <td colSpan={5} className=\"px-6 py-20 text-center\">\n <p className=\"text-xs font-bold opacity-30 tracking-widest uppercase italic\">No identity matches found</p>\n </td>\n </tr>\n ) : (\n filteredUsers.map((user) => (\n <tr key={user.id} className={`hover:bg-[var(--kyro-surface-accent)]/50 transition-colors group ${user.locked ? \"opacity-50 grayscale\" : \"\"}`}>\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-3\">\n <AvatarCell user={user} />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <div className=\"text-xs font-bold text-[var(--kyro-text-primary)] truncate\">{user.name || user.email.split(\"@\")[0]}</div>\n {user.tenantId && (\n <Badge variant=\"outline\" className=\"text-[7px] px-1 py-0 border-none bg-[var(--kyro-surface-accent)] opacity-50\">\n {user.tenantId}\n </Badge>\n )}\n </div>\n <div className=\"text-[10px] text-[var(--kyro-text-secondary)] opacity-50 truncate\">{user.email}</div>\n </div>\n </div>\n </td>\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2\">\n <Shield className=\"w-3.5 h-3.5 opacity-30\" />\n <span className=\"text-[10px] font-bold tracking-widest uppercase opacity-70\">{user.role}</span>\n </div>\n </td>\n <td className=\"px-6 py-3.5\">\n <Badge variant={user.locked ? \"danger\" : \"success\"} dot className=\"text-[8px] font-bold uppercase tracking-widest\">\n {user.locked ? \"Restricted\" : \"Authorized\"}\n </Badge>\n </td>\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2 text-[10px] font-bold text-[var(--kyro-text-secondary)] opacity-50 uppercase tabular-nums\">\n <Clock className=\"w-3 h-3\" />\n {user.lastLogin ? new Date(user.lastLogin).toLocaleDateString() : \"Never\"}\n </div>\n </td>\n <td className=\"px-6 py-3.5 text-right\">\n <div className=\"flex items-center justify-end gap-1 opacity-0 group-hover:opacity-100 transition-all\">\n <button\n onClick={() => handleToggleLock(user)}\n className={`p-1.5 rounded-lg border transition-all ${user.locked ? \"bg-green-500/10 text-green-500 border-green-500/20 hover:bg-green-500/20\" : \"bg-amber-500/10 text-amber-500 border-amber-500/20 hover:bg-amber-500/20\"}`}\n title={user.locked ? \"Restore Access\" : \"Restrict Access\"}\n >\n {user.locked ? <Unlock className=\"w-3.5 h-3.5\" /> : <Lock className=\"w-3.5 h-3.5\" />}\n </button>\n <button\n onClick={() => handleDelete(user)}\n className=\"p-1.5 rounded-lg border border-red-500/20 bg-red-500/10 text-red-500 hover:bg-red-500/20 transition-all\"\n title=\"Delete User\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {/* Create User Modal */}\n <Modal\n open={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n title=\"Create User\"\n size=\"lg\"\n >\n <ModalContent>\n <div className=\"space-y-6\">\n <div>\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Name (optional)</label>\n <input\n type=\"text\"\n value={createForm.name}\n onChange={(e) => setCreateForm({ ...createForm, name: e.target.value })}\n placeholder=\"John Doe\"\n className=\"w-full px-4 py-3 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)]\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Email Address</label>\n <input\n type=\"email\"\n value={createForm.email}\n onChange={(e) => setCreateForm({ ...createForm, email: e.target.value })}\n placeholder=\"user@example.com\"\n required\n className=\"w-full px-4 py-3 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)]\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Password</label>\n <input\n type=\"password\"\n value={createForm.password}\n onChange={(e) => setCreateForm({ ...createForm, password: e.target.value })}\n placeholder=\"Minimum 12 characters\"\n required\n minLength={12}\n className=\"w-full px-4 py-3 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)]\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Role</label>\n <select\n value={createForm.role}\n onChange={(e) => setCreateForm({ ...createForm, role: e.target.value })}\n className=\"w-full px-4 py-3 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)]\"\n >\n {roleOptions.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n </div>\n {createError && (\n <div className=\"p-3 bg-red-500/10 border border-red-500/20 rounded-xl flex items-center gap-2 text-red-500 text-xs font-bold\">\n <AlertTriangle className=\"w-4 h-4\" />\n {createError}\n </div>\n )}\n </div>\n </ModalContent>\n <ModalActions>\n <button\n type=\"button\"\n onClick={() => setShowCreateModal(false)}\n className=\"px-6 py-2.5 rounded-xl font-bold text-sm border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleCreateUser}\n disabled={creating}\n className=\"kyro-btn kyro-btn-primary px-6 py-2.5 rounded-xl font-bold text-sm hover:opacity-90 transition-all shadow-lg shadow-[var(--kyro-primary)]/10 disabled:opacity-50\"\n >\n {creating ? \"Creating...\" : \"Create User\"}\n </button>\n </ModalActions>\n </Modal>\n\n\n </div>\n );\n}\n\nfunction AvatarCell({ user }: { user: User }) {\n const [url, setUrl] = useState<string | null>(null);\n\n useEffect(() => {\n const avatar = user.avatar;\n if (typeof avatar === \"string\" && /^[0-9a-f-]+$/i.test(avatar)) {\n apiGet<any>(`/api/media/${avatar}`)\n .then((media) => setUrl(media?.thumbnailUrl || media?.url || null))\n .catch(() => setUrl(null));\n }\n }, [user.avatar]);\n\n if (url) {\n return (\n <div className=\"w-8 h-8 rounded-lg overflow-hidden border border-[var(--kyro-border)] flex-shrink-0\">\n <img src={url} alt=\"\" className=\"w-full h-full object-cover\" />\n </div>\n );\n }\n\n return (\n <div className=\"w-8 h-8 rounded-lg bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] flex items-center justify-center text-xs font-bold text-[var(--kyro-primary)] flex-shrink-0\">\n {user.name ? user.name[0] : user.email[0].toUpperCase()}\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { apiGet, apiPatch } from \"../lib/api\";\nimport { toast } from \"../lib/stores\";\nimport {\n Palette,\n Tag,\n Layout,\n Type,\n Image as ImageIcon,\n Save,\n Check,\n RefreshCcw,\n Sparkles,\n} from \"./ui/icons\";\n\nexport function BrandingHub() {\n const [siteName, setSiteName] = useState(\"Kyro CMS\");\n const [adminTitle, setAdminTitle] = useState(\"Command Center\");\n const [primaryColor, setPrimaryColor] = useState(\"#6366f1\");\n const [dashboardGreeting, setDashboardGreeting] = useState(\n \"Welcome back to your Command Center.\",\n );\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n\n useEffect(() => {\n const fetchBranding = async () => {\n try {\n const result = await apiGet(\"/api/globals/site-settings\");\n const data = result.data || result;\n if (data && Object.keys(data).length > 0) {\n if (data.siteName) setSiteName(data.siteName);\n if (data.adminTitle) setAdminTitle(data.adminTitle);\n if (data.primaryColor) setPrimaryColor(data.primaryColor);\n if (data.dashboardGreeting)\n setDashboardGreeting(data.dashboardGreeting);\n }\n } catch (err) {\n console.error(\"Failed to load branding:\", err);\n }\n };\n fetchBranding();\n }, []);\n\n const handleSave = async () => {\n setSaving(true);\n try {\n await apiPatch(\"/api/globals/site-settings\", {\n siteName,\n adminTitle,\n primaryColor,\n dashboardGreeting,\n });\n setSaved(true);\n toast.success(\"Branding updated\");\n document.documentElement.style.setProperty(\n \"--kyro-primary\",\n primaryColor,\n );\n setTimeout(() => window.location.reload(), 800);\n } catch (e) {\n toast.error(\"Failed to save branding\");\n console.error(e);\n } finally {\n setSaving(false);\n }\n };\n\n const colors = [\n { name: \"Indigo\", hex: \"#6366f1\" },\n { name: \"Emerald\", hex: \"#10b981\" },\n { name: \"Rose\", hex: \"#f43f5e\" },\n { name: \"Amber\", hex: \"#f59e0b\" },\n { name: \"Sky\", hex: \"#0ea5e9\" },\n { name: \"Violet\", hex: \"#8b5cf6\" },\n ];\n\n return (\n <div className=\"w-full space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-700 pb-32\">\n {/* Header */}\n <div className=\"flex flex-col lg:flex-row lg:items-center justify-between gap-6 pt-4\">\n <div>\n <h1 className=\"text-xl font-bold tracking-tighter text-[var(--kyro-text-primary)]\">\n Branding <span className=\"text-[var(--kyro-primary)]\">Hub</span>\n </h1>\n <p className=\"text-[var(--kyro-text-secondary)] mt-1 font-medium opacity-60\">\n Customize the identity and aesthetic of your administrative\n ecosystem.\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\n className={`flex items-center gap-2 px-8 py-3 rounded-2xl font-bold text-sm shadow-xl transition-all active:scale-95 ${saved\n ? \"bg-green-500 text-white\"\n : \"kyro-btn-primary hover:shadow-[var(--kyro-primary)]\"\n }`}\n >\n {saving ? (\n <RefreshCcw className=\"w-4 h-4 animate-spin\" />\n ) : saved ? (\n <Check className=\"w-4 h-4\" />\n ) : (\n <Save className=\"w-4 h-4\" />\n )}\n {saving\n ? \"Saving...\"\n : saved\n ? \"Identity Updated\"\n : \"Publish Branding\"}\n </button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8\">\n {/* Identity Settings */}\n <section className=\"surface-tile p-8 space-y-8\">\n <div className=\"flex items-center gap-3 mb-2\">\n <Tag className=\"w-5 h-5 text-[var(--kyro-primary)]\" />\n <h2 className=\"text-xl font-bold tracking-tight\">Core Identity</h2>\n </div>\n\n <div className=\"space-y-6\">\n <div className=\"space-y-2\">\n <label className=\"text-[10px] font-bold tracking-[0.2em] opacity-40\">\n Site Public Name\n </label>\n <input\n type=\"text\"\n value={siteName}\n onChange={(e) => setSiteName(e.target.value)}\n className=\"w-full bg-[var(--kyro-bg-secondary)] border border-[var(--kyro-border)] rounded-xl py-3 px-4 text-sm font-bold focus:outline-none focus:ring-2 focus:ring-[var(--kyro-primary)] transition-all\"\n placeholder=\"e.g. Acme Corp CMS\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-[10px] font-bold tracking-[0.2em] opacity-40\">\n Admin Dashboard Title\n </label>\n <input\n type=\"text\"\n value={adminTitle}\n onChange={(e) => setAdminTitle(e.target.value)}\n className=\"w-full bg-[var(--kyro-bg-secondary)] border border-[var(--kyro-border)] rounded-xl py-3 px-4 text-sm font-bold focus:outline-none focus:ring-2 focus:ring-[var(--kyro-primary)] transition-all\"\n placeholder=\"e.g. Command Center\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-[10px] font-bold tracking-[0.2em] opacity-40\">\n System Greeting\n </label>\n <textarea\n value={dashboardGreeting}\n onChange={(e) => setDashboardGreeting(e.target.value)}\n rows={3}\n className=\"w-full bg-[var(--kyro-bg-secondary)] border border-[var(--kyro-border)] rounded-xl py-3 px-4 text-sm font-bold focus:outline-none focus:ring-2 focus:ring-[var(--kyro-primary)] transition-all resize-none\"\n placeholder=\"Greeting text for the dashboard...\"\n />\n </div>\n </div>\n </section>\n\n {/* Visual Aesthetic */}\n <section className=\"surface-tile p-8 space-y-8\">\n <div className=\"flex items-center gap-3 mb-2\">\n <Palette className=\"w-5 h-5 text-[var(--kyro-primary)]\" />\n <h2 className=\"text-xl font-bold tracking-tight\">\n Visual Aesthetic\n </h2>\n </div>\n\n <div className=\"space-y-8\">\n <div className=\"space-y-4\">\n <label className=\"text-[10px] font-bold tracking-[0.2em] opacity-40\">\n Primary Brand Color\n </label>\n <div className=\"grid grid-cols-6 gap-3\">\n {colors.map((c) => (\n <button\n type=\"button\"\n key={c.name}\n onClick={() => setPrimaryColor(c.hex)}\n className={`aspect-square rounded-xl transition-all border-4 ${primaryColor === c.hex ? \"border-white ring-2 ring-[var(--kyro-primary)]\" : \"border-transparent opacity-60 hover:opacity-100\"}`}\n style={{ backgroundColor: c.hex }}\n title={c.name}\n />\n ))}\n </div>\n </div>\n\n <div className=\"space-y-4 pt-4 border-t border-[var(--kyro-border)]\">\n <label className=\"text-[10px] font-bold tracking-[0.2em] opacity-40\">\n Project Logo (SVG/PNG)\n </label>\n <div className=\"flex items-center gap-6\">\n <div className=\"w-20 h-20 rounded-2xl bg-[var(--kyro-bg-secondary)] border-2 border-dashed border-[var(--kyro-border)] flex flex-col items-center justify-center text-[var(--kyro-text-secondary)] hover:border-[var(--kyro-primary)] hover:text-[var(--kyro-primary)] cursor-pointer transition-all\">\n <ImageIcon className=\"w-6 h-6 mb-1 opacity-40\" />\n <span className=\"text-[8px] font-bold \">\n Upload\n </span>\n </div>\n <div className=\"flex-1\">\n <p className=\"text-xs font-bold mb-1\">\n Upload global CMS logo\n </p>\n <p className=\"text-[10px] opacity-40 leading-relaxed\">\n This will replace the Kyro brand in the sidebar and login\n screens.\n </p>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* Live Preview of Dashboard Card */}\n <section className=\"lg:col-span-2 surface-tile p-8 overflow-hidden relative group\">\n <div className=\"absolute top-0 right-0 p-8 flex items-center gap-2 text-[var(--kyro-primary)]\">\n <Sparkles className=\"w-4 h-4\" />\n <span className=\"text-[10px] font-bold tracking-widest\">\n Live Preview\n </span>\n </div>\n\n <div className=\"max-w-2xl mx-auto py-12 text-center space-y-6\">\n <div className=\"inline-flex items-center gap-3 px-4 py-2 bg-[var(--kyro-bg-secondary)] rounded-full border border-[var(--kyro-border)]\">\n <span className=\"w-2 h-2 rounded-full bg-green-500 animate-pulse\" />\n <span className=\"text-[10px] font-bold tracking-widest opacity-60\">\n {adminTitle} Online\n </span>\n </div>\n <h2 className=\"text-5xl font-bold tracking-tighter leading-none italic\">\n Welcome to {siteName}.\n </h2>\n <p className=\"text-xl font-medium text-[var(--kyro-text-secondary)] opacity-60\">\n {dashboardGreeting}\n </p>\n </div>\n\n {/* Simulated Palette Update */}\n <style\n dangerouslySetInnerHTML={{\n __html: `\n :root {\n --kyro-primary-temp: ${primaryColor};\n }\n .preview-btn {\n background-color: var(--kyro-primary-temp);\n }\n `,\n }}\n />\n </section>\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { apiGet, apiPost, apiDelete, resolveApi } from \"../lib/api\";\nimport {\n Terminal,\n Key,\n PlayCircle,\n Copy,\n RefreshCcw,\n Trash2,\n ExternalLink,\n ChevronRight,\n Code2,\n Lock,\n Eye,\n EyeOff,\n} from \"./ui/icons\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { json } from \"@codemirror/lang-json\";\nimport { aura } from \"@uiw/codemirror-theme-aura\";\nimport { useUIStore, toast } from \"../lib/stores\";\nimport { Modal, ModalContent, ModalActions } from \"./ui/Modal\";\nimport { PageHeader } from \"./ui/PageHeader\";\nimport { Badge } from \"./ui/Badge\";\n\n// @ts-ignore\nconst API_BASE = typeof __KYRO_API_PATH__ !== 'undefined' ? __KYRO_API_PATH__ : '/api';\n\ninterface ApiKey {\n id: string;\n name: string;\n key: string;\n lastUsed?: string;\n createdAt: string;\n}\n\nexport function DeveloperCenter({ collections }: { collections: Record<string, unknown> }) {\n const [keys, setKeys] = useState<ApiKey[]>([]);\n const [loading, setLoading] = useState(false);\n const [showKey, setShowKey] = useState<string | null>(null);\n const [testEndpoint, setTestEndpoint] = useState(\"\");\n const [playgroundResult, setPlaygroundResult] = useState<unknown>(null);\n const [exploring, setExploring] = useState(false);\n const { confirm, alert } = useUIStore();\n\n const [showCreateModal, setShowCreateModal] = useState(false);\n const [newKeyName, setNewKeyName] = useState(\"\");\n\n const loadKeys = async () => {\n try {\n const data = await apiGet(\"/api/keys\");\n setKeys(data);\n } catch (e) {\n console.error(e);\n }\n };\n\n useEffect(() => {\n loadKeys();\n }, []);\n\n const handleGenerateKey = async () => {\n setNewKeyName(\"\");\n setShowCreateModal(true);\n };\n\n const confirmGenerateKey = async () => {\n if (!newKeyName.trim()) return;\n try {\n await apiPost(\"/api/keys\", { name: newKeyName });\n loadKeys();\n setShowCreateModal(false);\n setNewKeyName(\"\");\n toast.success(\"API key generated\");\n } catch (e) {\n console.error(e);\n toast.error(\"Failed to generate API key\");\n }\n };\n\n const handleRevokeKey = (id: string) => {\n confirm({\n title: \"Revoke API Key\",\n message: \"Are you sure you want to revoke this key? Any integrations using it will stop working.\",\n variant: \"danger\",\n onConfirm: async () => {\n try {\n await apiDelete(`/api/keys/${id}`);\n loadKeys();\n toast.success(\"API key revoked\");\n } catch (e) {\n console.error(e);\n toast.error(\"Failed to revoke API key\");\n }\n }\n });\n };\n\n const handleRunTest = async () => {\n if (!testEndpoint) return;\n setExploring(true);\n try {\n const response = await fetch(resolveApi(`/api/${testEndpoint}`));\n const data = await response.json();\n setPlaygroundResult(data);\n } catch (e) {\n setPlaygroundResult({\n error: \"Failed to fetch. Ensure the endpoint exists.\",\n });\n } finally {\n setExploring(false);\n }\n };\n\n return (\n <div className=\"w-full space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-700 pb-32\">\n <PageHeader\n title=\"Developer Center\"\n description=\"Provision access keys and explore the headless API ecosystem.\"\n icon={Code2}\n actions={[\n {\n label: \"Generate Key\",\n onClick: handleGenerateKey,\n icon: Key,\n },\n ]}\n />\n\n <div className=\"grid grid-cols-1 xl:grid-cols-3 gap-8\">\n {/* API Key List */}\n <section className=\"xl:col-span-2 space-y-6\">\n <div className=\"flex items-center gap-2 px-2\">\n <div className=\"w-1 h-4 bg-[var(--kyro-primary)] rounded-full\" />\n <h2 className=\"text-sm font-medium tracking-[0.2em] opacity-40 uppercase\">Access Credentials</h2>\n </div>\n\n <div className=\"space-y-4\">\n {keys.length === 0 ? (\n <div className=\"p-12 text-center rounded-[2rem] border-2 border-dashed border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)]/30\">\n <Lock className=\"w-10 h-10 mx-auto mb-4 opacity-20\" />\n <p className=\"text-sm text-[var(--kyro-text-secondary)] opacity-50\">No API keys found. Generate one to get started.</p>\n </div>\n ) : (\n keys.map((key) => (\n <div\n key={key.id}\n className=\"group relative overflow-hidden bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-3xl p-6 hover:border-[var(--kyro-primary)]/50 transition-all duration-300\"\n >\n <div className=\"flex flex-col md:flex-row md:items-center justify-between gap-6 relative z-10\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-3 mb-4\">\n <div className=\"p-2.5 bg-[var(--kyro-surface-accent)] rounded-xl group-hover:bg-[var(--kyro-primary)]/10 transition-colors\">\n <Key className=\"w-5 h-5 text-[var(--kyro-text-secondary)] group-hover:text-[var(--kyro-primary)] transition-colors\" />\n </div>\n <h3 className=\"text-lg font-bold group-hover:text-[var(--kyro-primary)] transition-colors truncate\">\n {key.name}\n </h3>\n </div>\n \n <div className=\"flex-1 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-2xl px-4 py-3 flex items-center justify-between group/key overflow-hidden\">\n <code className=\"text-xs font-mono opacity-80 truncate mr-4\">\n {showKey === key.id\n ? key.key\n : \"••••••••••••••••••••••••••••••••\"}\n </code>\n <div className=\"flex items-center gap-2 shrink-0\">\n <button\n type=\"button\"\n onClick={() =>\n setShowKey(showKey === key.id ? null : key.id)\n }\n className=\"p-1.5 hover:bg-[var(--kyro-surface-accent)] rounded-lg transition-all text-[var(--kyro-text-secondary)]\"\n >\n {showKey === key.id ? (\n <EyeOff className=\"w-4 h-4\" />\n ) : (\n <Eye className=\"w-4 h-4\" />\n )}\n </button>\n <button\n type=\"button\"\n className=\"p-1.5 hover:bg-[var(--kyro-surface-accent)] rounded-lg transition-all text-[var(--kyro-text-secondary)]\"\n onClick={() => {\n navigator.clipboard.writeText(key.key);\n toast.success(\"API key copied to clipboard\");\n }}\n >\n <Copy className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n \n <div className=\"flex items-center gap-6 mt-4 text-[10px] font-bold opacity-30 uppercase tracking-widest\">\n <div className=\"flex items-center gap-2\">\n <span>Issued:</span>\n <span>{new Date(key.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span>Status:</span>\n <span className=\"text-green-500\">Active</span>\n </div>\n </div>\n </div>\n \n <button\n type=\"button\"\n onClick={() => handleRevokeKey(key.id)}\n className=\"p-3.5 bg-red-500/5 text-red-500 rounded-2xl hover:bg-red-500/10 transition-all border border-transparent hover:border-red-500/30 self-start md:self-center\"\n title=\"Revoke Key\"\n >\n <Trash2 className=\"w-5 h-5\" />\n </button>\n </div>\n </div>\n ))\n )}\n </div>\n </section>\n\n {/* Sidebar Info - Modernized */}\n <section className=\"space-y-6\">\n <div className=\"relative overflow-hidden rounded-[2.5rem] border border-[var(--kyro-border)] bg-gradient-to-br from-[var(--kyro-primary)] to-[var(--kyro-primary)]/80 p-8 group shadow-2xl shadow-[var(--kyro-primary)]/20\">\n <div className=\"absolute top-0 right-0 p-8 opacity-[0.1] pointer-events-none group-hover:scale-110 transition-transform duration-700\">\n <Terminal className=\"w-48 h-48 rotate-12\" />\n </div>\n <div className=\"relative z-10\">\n <div className=\"w-12 h-12 bg-white/20 backdrop-blur-md rounded-2xl flex items-center justify-center mb-6\">\n <Terminal className=\"w-6 h-6 text-white\" />\n </div>\n <h3 className=\"text-white text-2xl font-bold tracking-tight mb-3\">\n Endpoint Hub\n </h3>\n <p className=\"text-white/80 text-sm font-medium leading-relaxed mb-8\">\n Kyro CMS is built for high-performance content delivery. Use these endpoints to power your headless frontends.\n </p>\n <button\n type=\"button\"\n className=\"w-full py-4 bg-white text-[var(--kyro-primary)] rounded-[1.2rem] font-bold text-xs uppercase tracking-widest hover:shadow-xl transition-all flex items-center justify-center gap-2 active:scale-[0.98]\"\n >\n Full API Documentation\n <ExternalLink className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </div>\n\n <div className=\"rounded-[2.5rem] border border-[var(--kyro-border)] bg-[var(--kyro-surface)]/50 p-8 space-y-6\">\n <h4 className=\"text-[10px] font-bold uppercase tracking-[0.2em] opacity-40\">Environment Matrix</h4>\n <div className=\"space-y-5\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-bold\">Content API</span>\n <Badge variant=\"outline\" className=\"text-[8px] font-bold uppercase py-0.5\">Production</Badge>\n </div>\n <div className=\"group relative\">\n <div className=\"absolute -inset-0.5 bg-gradient-to-r from-[var(--kyro-primary)]/30 to-transparent rounded-xl blur opacity-0 group-hover:opacity-100 transition-all\"></div>\n <div className=\"relative bg-[var(--kyro-bg)] p-3.5 rounded-xl border border-[var(--kyro-border)] flex items-center justify-between\">\n <code className=\"text-[10px] font-mono opacity-60\">https://api.kyro.io/v1</code>\n <Copy className=\"w-3.5 h-3.5 opacity-0 group-hover:opacity-40 cursor-pointer transition-opacity\" onClick={() => navigator.clipboard.writeText('https://api.kyro.io/v1')} />\n </div>\n </div>\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-bold\">Draft Explorer</span>\n <Badge variant=\"outline\" className=\"text-[8px] font-bold uppercase py-0.5\">Staging</Badge>\n </div>\n <div className=\"group relative\">\n <div className=\"absolute -inset-0.5 bg-gradient-to-r from-amber-500/30 to-transparent rounded-xl blur opacity-0 group-hover:opacity-100 transition-all\"></div>\n <div className=\"relative bg-[var(--kyro-bg)] p-3.5 rounded-xl border border-[var(--kyro-border)] flex items-center justify-between\">\n <code className=\"text-[10px] font-mono opacity-60\">https://preview.kyro.io/v1</code>\n <Copy className=\"w-3.5 h-3.5 opacity-0 group-hover:opacity-40 cursor-pointer transition-opacity\" onClick={() => navigator.clipboard.writeText('https://preview.kyro.io/v1')} />\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* Playground Explorer - High Fidelity */}\n <section className=\"xl:col-span-3 rounded-[3rem] border border-[var(--kyro-border)] bg-[var(--kyro-surface)]/50 p-10 space-y-10 overflow-hidden relative\">\n <div className=\"absolute top-0 right-0 p-20 opacity-[0.02] pointer-events-none\">\n <PlayCircle className=\"w-96 h-96\" />\n </div>\n \n <div className=\"flex flex-col lg:flex-row lg:items-center justify-between gap-10 relative z-10\">\n <div className=\"max-w-xl\">\n <h2 className=\"text-3xl font-bold tracking-tighter flex items-center gap-4 mb-3\">\n <div className=\"w-12 h-12 bg-[var(--kyro-primary)]/10 rounded-2xl flex items-center justify-center\">\n <PlayCircle className=\"w-7 h-7 text-[var(--kyro-primary)]\" />\n </div>\n API <span className=\"text-[var(--kyro-primary)]\">Explorer</span>\n </h2>\n <p className=\"text-[var(--kyro-text-secondary)] text-sm font-medium opacity-60 leading-relaxed\">\n Test your collection endpoints and analyze live response payloads. \n Enter a collection slug to fetch its latest documents.\n </p>\n </div>\n \n <div className=\"flex items-center gap-4 flex-1 lg:max-w-2xl bg-[var(--kyro-bg)] p-2 rounded-[2rem] border border-[var(--kyro-border)] shadow-2xl\">\n <div className=\"flex-1 relative flex items-center pl-6\">\n <span className=\"text-[11px] font-bold opacity-30 uppercase tracking-widest mr-2 whitespace-nowrap\">\n GET {API_BASE}/\n </span>\n <input\n type=\"text\"\n value={testEndpoint}\n onChange={(e) => setTestEndpoint(e.target.value)}\n placeholder=\"collection-slug\"\n className=\"w-full py-4 bg-transparent focus:outline-none font-mono text-sm font-bold text-[var(--kyro-primary)]\"\n />\n </div>\n <button\n type=\"button\"\n onClick={handleRunTest}\n disabled={exploring || !testEndpoint}\n className=\"kyro-btn kyro-btn-primary px-8 py-4 rounded-[1.5rem] font-bold text-sm shadow-xl disabled:opacity-50 disabled:cursor-not-allowed hover:scale-[1.02] transition-all flex items-center gap-3 shrink-0\"\n >\n {exploring ? (\n <RefreshCcw className=\"w-4 h-4 animate-spin\" />\n ) : (\n <ChevronRight className=\"w-5 h-5\" />\n )}\n Run Query\n </button>\n </div>\n </div>\n\n {playgroundResult ? (\n <div className=\"animate-in fade-in zoom-in-95 duration-500 relative z-10\">\n <div className=\"flex items-center justify-between mb-4 px-2\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-1 h-3 bg-[var(--kyro-primary)] rounded-full\" />\n <span className=\"text-[10px] font-bold uppercase tracking-[0.2em] opacity-40\">Response Payload</span>\n </div>\n <Badge variant=\"outline\" className=\"text-[9px] font-mono px-3\">200 OK</Badge>\n </div>\n <div className=\"rounded-[2rem] overflow-hidden border border-[var(--kyro-border)] shadow-2xl bg-[#090b10]\">\n <div className=\"flex items-center gap-2 px-6 py-4 bg-[#11141d] border-b border-[var(--kyro-border)]/50\">\n <div className=\"w-2.5 h-2.5 rounded-full bg-red-500/20\" />\n <div className=\"w-2.5 h-2.5 rounded-full bg-amber-500/20\" />\n <div className=\"w-2.5 h-2.5 rounded-full bg-green-500/20\" />\n </div>\n <CodeMirror\n value={JSON.stringify(playgroundResult, null, 2)}\n height=\"450px\"\n theme={aura}\n extensions={[json()]}\n editable={false}\n className=\"text-sm\"\n />\n </div>\n </div>\n ) : (\n <div className=\"h-80 rounded-[3rem] border-2 border-dashed border-[var(--kyro-border)] flex flex-col items-center justify-center bg-[var(--kyro-surface-accent)]/20 transition-all duration-700\">\n <div className=\"w-20 h-20 bg-[var(--kyro-surface)] rounded-3xl flex items-center justify-center shadow-lg border border-[var(--kyro-border)] mb-6 opacity-20\">\n <Code2 className=\"w-10 h-10\" />\n </div>\n <p className=\"font-bold text-sm opacity-30 uppercase tracking-[0.2em]\">\n Awaiting request dispatch...\n </p>\n </div>\n )}\n </section>\n </div>\n\n {/* Create Modal */}\n <Modal\n open={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n title=\"Generate Access Token\"\n size=\"lg\"\n >\n <ModalContent>\n <div className=\"space-y-6\">\n <p className=\"text-sm text-[var(--kyro-text-secondary)] opacity-70 leading-relaxed\">\n Define a name for this API key to identify its integration context. \n Keys are encrypted at rest and should be treated with extreme caution.\n </p>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-bold uppercase tracking-widest opacity-40 px-1\">Token Name</label>\n <input\n type=\"text\"\n value={newKeyName}\n onChange={(e) => setNewKeyName(e.target.value)}\n placeholder=\"e.g., Mobile App SDK, Production Server\"\n className=\"w-full px-6 py-4 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-2xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)] shadow-sm transition-all\"\n onKeyDown={(e) => e.key === \"Enter\" && confirmGenerateKey()}\n />\n </div>\n </div>\n </ModalContent>\n <ModalActions>\n <button\n type=\"button\"\n onClick={() => setShowCreateModal(false)}\n className=\"px-6 py-3 rounded-xl font-bold text-sm border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] transition-all\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={confirmGenerateKey}\n className=\"kyro-btn kyro-btn-primary px-8 py-3 rounded-xl font-bold text-sm hover:opacity-90 shadow-lg shadow-[var(--kyro-primary)]/20 transition-all\"\n >\n Generate Token\n </button>\n </ModalActions>\n </Modal>\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { apiGet, apiPost, apiDelete, apiPatch } from \"./api\";\nimport { useUIStore, toast } from \"./stores\";\n\ninterface UseResourceManagerOptions<T> {\n endpoint: string;\n onSuccess?: (action: \"load\" | \"create\" | \"delete\" | \"update\", data?: unknown) => void;\n onError?: (action: \"load\" | \"create\" | \"delete\" | \"update\", error: unknown) => void;\n transformLoad?: (data: unknown[]) => T[];\n}\n\nexport function useResourceManager<T extends { id: string }>(\n options: UseResourceManagerOptions<T>\n) {\n const [items, setItems] = useState<T[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n const { confirm } = useUIStore();\n\n const load = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const response = await apiGet<any>(options.endpoint);\n const data = Array.isArray(response) ? response : response.docs || [];\n const transformed = options.transformLoad ? options.transformLoad(data) : data;\n setItems(transformed);\n options.onSuccess?.(\"load\", transformed);\n} catch (e: unknown) {\n const message = e instanceof Error ? e.message : \"Failed to load resources\";\n setError(message);\n options.onError?.(\"load\", e as Error);\n } finally {\n setLoading(false);\n }\n }, [options.endpoint, options.transformLoad]);\n\n useEffect(() => {\n load();\n }, [load]);\n\n const remove = useCallback((id: string, resourceName = \"item\") => {\n confirm({\n title: `Delete ${resourceName}`,\n message: `Are you sure you want to delete this ${resourceName.toLowerCase()}? This action cannot be undone.`,\n variant: \"danger\",\n onConfirm: async () => {\n try {\n await apiDelete(`${options.endpoint}/${id}`);\n setItems((prev) => prev.filter((item) => item.id !== id));\n options.onSuccess?.(\"delete\", id);\n toast.success(`${resourceName} deleted`);\n} catch (e: unknown) {\n const message = e instanceof Error ? e.message : `Failed to delete ${resourceName}`;\n toast.error(message);\n options.onError?.(\"delete\", e as Error);\n }\n },\n });\n }, [options.endpoint, confirm]);\n\n const create = useCallback(async (data: unknown) => {\n setError(null);\n try {\n const created = await apiPost<T>(options.endpoint, data);\n setItems((prev) => [created, ...prev]);\n setIsCreateModalOpen(false);\n options.onSuccess?.(\"create\", created);\n return created;\n} catch (e: unknown) {\n const message = e instanceof Error ? e.message : \"Failed to create resource\";\n setError(message);\n options.onError?.(\"create\", e as Error);\n throw e;\n }\n }, [options.endpoint]);\n\n const update = useCallback(async (id: string, data: unknown) => {\n setError(null);\n try {\n const updated = await apiPatch<T>(`${options.endpoint}/${id}`, data);\n setItems((prev) => prev.map((item) => (item.id === id ? updated : item)));\n options.onSuccess?.(\"update\", updated);\n return updated;\n} catch (e: unknown) {\n const message = e instanceof Error ? e.message : \"Failed to update resource\";\n setError(message);\n options.onError?.(\"update\", e as Error);\n throw e;\n }\n }, [options.endpoint]);\n\n return {\n items,\n setItems,\n loading,\n error,\n load,\n remove,\n create,\n update,\n isCreateModalOpen,\n setIsCreateModalOpen,\n };\n}\n","import React, { useState, useEffect } from \"react\";\nimport { apiGet, apiPost, apiPatch, apiDelete } from \"../lib/api\";\nimport { useResourceManager } from \"../lib/useResourceManager\";\n\nimport {\n Webhook,\n Plus,\n Trash2,\n Play,\n Pause,\n Send,\n AlertTriangle,\n CheckCircle2,\n Clock,\n RefreshCw,\n Info,\n ExternalLink,\n Zap,\n Shield,\n} from \"./ui/icons\";\nimport { useUIStore, toast } from \"../lib/stores\";\nimport { Modal, ModalContent, ModalActions } from \"./ui/Modal\";\nimport { Badge } from \"./ui/Badge\";\nimport { PageHeader } from \"./ui/PageHeader\";\n\n\ninterface WebhookItem {\n id: string;\n name: string;\n url: string;\n events: string[];\n secret?: string;\n status: \"active\" | \"paused\";\n lastTriggered?: string;\n createdAt: string;\n}\n\nexport function WebhookManager() {\n const {\n items: webhooks,\n loading,\n create,\n remove,\n update,\n isCreateModalOpen: showCreateModal,\n setIsCreateModalOpen: setShowCreateModal,\n } = useResourceManager<WebhookItem>({\n endpoint: \"/api/webhooks\",\n });\n\n const { confirm } = useUIStore();\n const [showTestModal, setShowTestModal] = useState(false);\n const [showHelpModal, setShowHelpModal] = useState(false);\n const [testResult, setTestResult] = useState<{\n success: boolean;\n message: string;\n } | null>(null);\n const [testId, setTestId] = useState<string | null>(null);\n const [formData, setFormData] = useState({\n name: \"\",\n url: \"\",\n events: [] as string[],\n secret: \"\",\n });\n const [createError, setCreateError] = useState(\"\");\n\n const handleCreate = async () => {\n if (!formData.name.trim() || !formData.url.trim()) {\n setCreateError(\"Name and URL are required\");\n return;\n }\n\n try {\n await create(formData);\n setFormData({ name: \"\", url: \"\", events: [], secret: \"\" });\n toast.success(`Webhook established: ${formData.name}`);\n } catch (e) {\n setCreateError(\"Failed to create webhook\");\n toast.error(\"Failed to create webhook\");\n }\n };\n\n\n const handleTest = async (id: string) => {\n setTestId(id);\n setTestResult(null);\n setShowTestModal(true);\n try {\n const data = await apiPost<any>(`/api/webhooks/${id}/test`);\n setTestResult({\n success: true,\n message: data.message || \"Webhook triggered successfully\",\n });\n toast.success(\"Dispatch verified: Remote endpoint responded\");\n } catch (e) {\n setTestResult({ success: false, message: \"Failed to trigger webhook\" });\n }\n };\n\n const toggleStatus = async (id: string, currentStatus: string) => {\n try {\n const newStatus = currentStatus === \"active\" ? \"paused\" : \"active\";\n await update(id, {\n status: newStatus,\n });\n toast.success(newStatus === \"active\" ? \"Signals resumed\" : \"Dispatcher paused\");\n } catch (e) {\n console.error(e);\n toast.error(\"Failed to toggle webhook status\");\n }\n };\n\n const eventOptions = [\n {\n label: \"Create\",\n value: \"create\",\n description: \"When a new document is created\",\n },\n {\n label: \"Update\",\n value: \"update\",\n description: \"When a document is updated\",\n },\n {\n label: \"Delete\",\n value: \"delete\",\n description: \"When a document is deleted\",\n },\n { label: \"Auth\", value: \"auth\", description: \"User login/logout events\" },\n ];\n\n return (\n <div className=\"w-full space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-700 pb-32\">\n <PageHeader\n title=\"Webhooks\"\n description=\"Receive real-time notifications when your content changes.\"\n icon={Webhook}\n actions={[\n {\n label: \"Create Webhook\",\n onClick: () => {\n setFormData({\n name: \"\",\n url: \"\",\n events: [\"collection.create\", \"collection.update\", \"collection.delete\"],\n secret: \"\",\n });\n setCreateError(\"\");\n setShowCreateModal(true);\n },\n icon: Plus,\n },\n {\n label: \"Guide\",\n onClick: () => setShowHelpModal(true),\n icon: Info,\n variant: \"outline\"\n }\n ]}\n />\n\n {/* Info Banner - Modernized */}\n <div className=\"relative overflow-hidden rounded-[2rem] border border-[var(--kyro-border)] bg-gradient-to-br from-[var(--kyro-surface)] to-[var(--kyro-surface-accent)] p-8\">\n <div className=\"absolute top-0 right-0 p-8 opacity-[0.03] pointer-events-none\">\n <Zap className=\"w-64 h-64 rotate-12\" />\n </div>\n <div className=\"flex flex-col md:flex-row items-center gap-8 relative z-10\">\n <div className=\"p-5 bg-gradient-to-br from-[var(--kyro-primary)] to-[var(--kyro-primary)]/50 rounded-[1.5rem] shadow-xl shadow-[var(--kyro-primary)]/20\">\n <Zap className=\"w-8 h-8 text-white\" />\n </div>\n <div className=\"flex-1 text-center md:text-left\">\n <h3 className=\"text-xl font-bold mb-2\">Real-time Event Synchronization</h3>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] opacity-70 max-w-2xl leading-relaxed\">\n Webhooks allow your application to receive instant HTTP notifications when events happen in your CMS.\n Eliminate polling and build responsive, event-driven architectures with ease.\n </p>\n </div>\n <div className=\"flex gap-4\">\n <div className=\"flex flex-col items-center px-4 py-2 bg-[var(--kyro-surface)]/50 border border-[var(--kyro-border)] rounded-2xl\">\n <span className=\"text-[10px] font-bold opacity-40 uppercase tracking-tighter\">Collections</span>\n <span className=\"text-sm font-bold text-[var(--kyro-primary)]\">Triggered</span>\n </div>\n <div className=\"flex flex-col items-center px-4 py-2 bg-[var(--kyro-surface)]/50 border border-[var(--kyro-border)] rounded-2xl\">\n <span className=\"text-[10px] font-bold opacity-40 uppercase tracking-tighter\">Latency</span>\n <span className=\"text-sm font-bold text-[var(--kyro-primary)]\">&lt;200ms</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Webhooks List */}\n <section className=\"space-y-6\">\n <div className=\"flex items-center justify-between px-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-1 h-4 bg-[var(--kyro-primary)] rounded-full\" />\n <h2 className=\"text-sm font-medium tracking-[0.2em] opacity-40\">ACTIVE ENDPOINTS</h2>\n </div>\n <div className=\"text-[10px] font-bold opacity-40 uppercase\">\n {webhooks.length} Hook{webhooks.length !== 1 && \"s\"}\n </div>\n </div>\n\n {loading ? (\n <div className=\"flex items-center justify-center p-20 surface-tile rounded-3xl opacity-50 italic\">\n Connecting to dispatcher...\n </div>\n ) : webhooks.length === 0 ? (\n <div className=\"p-16 text-center rounded-[3rem] border-2 border-dashed border-[var(--kyro-border)] bg-[var(--kyro-surface-accent)]/30\">\n <div className=\"w-20 h-20 mx-auto mb-6 bg-gradient-to-tr from-[var(--kyro-surface)] to-[var(--kyro-surface-accent)] rounded-3xl flex items-center justify-center shadow-xl border border-[var(--kyro-border)]\">\n <Webhook className=\"w-10 h-10 text-[var(--kyro-primary)]\" />\n </div>\n <h3 className=\"text-2xl font-bold mb-3\">No Webhooks Found</h3>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] opacity-60 mb-8 max-w-sm mx-auto\">\n Your CMS is currently silent. Create a webhook to start broadcasting events to your external services.\n </p>\n <button\n type=\"button\"\n onClick={() => setShowCreateModal(true)}\n className=\"kyro-btn kyro-btn-primary inline-flex items-center gap-3 px-8 py-4 rounded-2xl font-bold hover:scale-[1.05] transition-all shadow-xl shadow-[var(--kyro-primary)]/10\"\n >\n <Plus className=\"w-5 h-5\" />\n Configure Webhook\n </button>\n </div>\n ) : (\n <div className=\"grid gap-4\">\n {webhooks.map((webhook) => (\n <div\n key={webhook.id}\n className=\"group relative overflow-hidden bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-3xl p-6 hover:border-[var(--kyro-primary)]/50 transition-all duration-300\"\n >\n <div className=\"flex flex-col lg:flex-row lg:items-center justify-between gap-6 relative z-10\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-3 mb-4\">\n <div className=\"p-2.5 bg-[var(--kyro-surface-accent)] rounded-xl group-hover:bg-[var(--kyro-primary)]/10 transition-colors\">\n <Webhook className=\"w-5 h-5 text-[var(--kyro-text-secondary)] group-hover:text-[var(--kyro-primary)] transition-colors\" />\n </div>\n <div>\n <h3 className=\"text-lg font-bold group-hover:text-[var(--kyro-primary)] transition-colors\">{webhook.name}</h3>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <span className={`w-2 h-2 rounded-full ${webhook.status === \"active\" ? \"bg-green-500 animate-pulse\" : \"bg-amber-500\"}`} />\n <span className={`text-[10px] font-bold uppercase tracking-wider ${webhook.status === \"active\" ? \"text-green-500\" : \"text-amber-500\"}`}>\n {webhook.status}\n </span>\n </div>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-6 pt-2\">\n <div className=\"space-y-1\">\n <span className=\"text-[9px] font-bold uppercase tracking-widest opacity-30\">Destination</span>\n <div className=\"font-mono text-xs opacity-60 truncate max-w-[200px]\" title={webhook.url}>\n {webhook.url}\n </div>\n </div>\n <div className=\"space-y-1 sm:border-l border-t sm:border-t-0 border-[var(--kyro-border)] pt-4 sm:pt-0 sm:pl-6 mt-4 sm:mt-0\">\n <span className=\"text-[9px] font-bold uppercase tracking-widest opacity-30\">Events</span>\n <div className=\"flex flex-wrap gap-1\">\n {webhook.events.slice(0, 2).map((event) => (\n <Badge key={event} variant=\"outline\" className=\"text-[8px] font-bold px-1.5 opacity-60\">\n {event}\n </Badge>\n ))}\n {webhook.events.length > 2 && (\n <span className=\"text-[8px] font-bold opacity-30\">+{webhook.events.length - 2} more</span>\n )}\n </div>\n </div>\n <div className=\"space-y-1 sm:border-l border-t sm:border-t-0 border-[var(--kyro-border)] pt-4 sm:pt-0 sm:pl-6 mt-4 sm:mt-0\">\n <span className=\"text-[9px] font-bold uppercase tracking-widest opacity-30\">Activity</span>\n <div className=\"text-[10px] font-bold opacity-60 flex items-center gap-1.5\">\n <Clock className=\"w-3 h-3\" />\n {webhook.lastTriggered\n ? `Last triggered: ${new Date(webhook.lastTriggered).toLocaleDateString()}`\n : \"Never triggered\"}\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 lg:bg-[var(--kyro-surface-accent)]/50 lg:p-2 lg:rounded-2xl lg:opacity-0 group-hover:opacity-100 transition-all duration-300 lg:translate-x-4 group-hover:translate-x-0\">\n <button\n type=\"button\"\n onClick={() => handleTest(webhook.id)}\n className=\"flex-1 lg:flex-none p-3 bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-xl hover:border-[var(--kyro-primary)] transition-all flex items-center justify-center gap-2\"\n title=\"Send test request\"\n >\n <Send className=\"w-4 h-4\" />\n <span className=\"text-xs font-bold\">Test</span>\n </button>\n\n <div className=\"w-px h-6 bg-[var(--kyro-border)] mx-1 hidden lg:block\" />\n\n <button\n type=\"button\"\n onClick={() => toggleStatus(webhook.id, webhook.status)}\n className={`p-3 bg-[var(--kyro-surface)] border border-[var(--kyro-border)] rounded-xl hover:border-[var(--kyro-primary)] transition-all group/toggle ${webhook.status === \"active\" ? \"text-amber-500/50 hover:text-amber-500\" : \"text-green-500/50 hover:text-green-500\"}`}\n title={webhook.status === \"active\" ? \"Pause webhook\" : \"Activate webhook\"}\n >\n {webhook.status === \"active\" ? <Pause className=\"w-4 h-4\" /> : <Play className=\"w-4 h-4\" />}\n </button>\n\n <button\n type=\"button\"\n onClick={() => remove(webhook.id, \"Webhook\")}\n className=\"p-3 bg-red-500/5 border border-red-500/10 rounded-xl hover:bg-red-500/10 hover:border-red-500/30 transition-all group/delete\"\n title=\"Delete webhook\"\n >\n <Trash2 className=\"w-4 h-4 text-red-500/50 group-hover/delete:text-red-500\" />\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </section>\n\n {/* Create Modal */}\n <Modal\n open={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n title=\"Register Webhook\"\n size=\"lg\"\n >\n <ModalContent>\n <div className=\"space-y-6\">\n <div className=\"flex flex-col gap-6\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Webhook Name</label>\n <input\n type=\"text\"\n value={formData.name}\n onChange={(e) =>\n setFormData({ ...formData, name: e.target.value })\n }\n placeholder=\"e.g., Slack Notifications\"\n className=\"w-full px-4 py-3 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)]\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Payload URL</label>\n <input\n type=\"url\"\n value={formData.url}\n onChange={(e) =>\n setFormData({ ...formData, url: e.target.value })\n }\n placeholder=\"https://your-server.com/webhook\"\n className=\"w-full px-4 py-3 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)]\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Signing Secret</label>\n <input\n type=\"text\"\n value={formData.secret}\n onChange={(e) =>\n setFormData({ ...formData, secret: e.target.value })\n }\n placeholder=\"Optional secret for verification\"\n className=\"w-full px-4 py-3 bg-[var(--kyro-bg)] border border-[var(--kyro-border)] rounded-xl text-[var(--kyro-text-primary)] focus:outline-none focus:border-[var(--kyro-primary)]\"\n />\n </div>\n </div>\n\n <div className=\"space-y-4\">\n <label className=\"block text-xs font-bold mb-1.5 text-[var(--kyro-text-secondary)] uppercase tracking-wider\">Subscribed Events</label>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {eventOptions.map((opt) => (\n <button\n type=\"button\"\n key={opt.value}\n onClick={() => {\n const events = formData.events.includes(opt.value)\n ? formData.events.filter((e) => e !== opt.value)\n : [...formData.events, opt.value];\n setFormData({ ...formData, events });\n }}\n className={`flex items-center gap-3 p-3 rounded-lg border transition-all text-left ${formData.events.includes(opt.value)\n ? \"bg-[var(--kyro-primary)]/5 border-[var(--kyro-primary)]/30 text-[var(--kyro-primary)]\"\n : \"bg-[var(--kyro-surface-accent)]/50 border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/30\"\n }`}\n >\n <div className={`w-4 h-4 rounded flex items-center justify-center border transition-all ${formData.events.includes(opt.value) ? \"bg-[var(--kyro-primary)] border-[var(--kyro-primary)]\" : \"border-[var(--kyro-border)]\"}`}>\n {formData.events.includes(opt.value) && <CheckCircle2 className=\"w-3 h-3 text-white\" />}\n </div>\n <div>\n <div className=\"text-xs font-bold\">{opt.label}</div>\n <div className=\"text-[10px] opacity-50\">{opt.description}</div>\n </div>\n </button>\n ))}\n </div>\n </div>\n </div>\n\n {createError && (\n <div className=\"p-3 bg-red-500/10 border border-red-500/20 rounded-xl flex items-center gap-2 text-red-500 text-xs font-bold\">\n <AlertTriangle className=\"w-4 h-4\" />\n {createError}\n </div>\n )}\n </div>\n </ModalContent>\n <ModalActions>\n <button\n type=\"button\"\n onClick={() => setShowCreateModal(false)}\n className=\"px-6 py-2.5 rounded-xl font-bold text-sm border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleCreate}\n className=\"kyro-btn kyro-btn-primary px-6 py-2.5 rounded-xl font-bold text-sm hover:opacity-90 transition-all shadow-lg shadow-[var(--kyro-primary)]/10\"\n >\n Create Webhook\n </button>\n </ModalActions>\n </Modal>\n\n {/* Test Webhook Modal */}\n <Modal\n open={showTestModal}\n onClose={() => setShowTestModal(false)}\n title=\"Webhook Test Dispatcher\"\n >\n <ModalContent>\n <div className=\"p-8 rounded-[2rem] bg-[var(--kyro-surface-accent)]/30 border border-[var(--kyro-border)] text-center\">\n {testResult ? (\n <div className=\"space-y-6\">\n <div className={`w-16 h-16 mx-auto rounded-2xl flex items-center justify-center shadow-xl ${testResult.success ? \"bg-green-500/10 text-green-500\" : \"bg-red-500/10 text-red-500\"}`}>\n {testResult.success ? <CheckCircle2 className=\"w-8 h-8\" /> : <AlertTriangle className=\"w-8 h-8\" />}\n </div>\n <div>\n <h4 className=\"text-xl font-bold mb-2\">{testResult.success ? \"Dispatch Successful\" : \"Dispatch Failed\"}</h4>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] opacity-70\">\n {testResult.message}\n </p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-6 py-4\">\n <RefreshCw className=\"w-12 h-12 text-[var(--kyro-primary)] animate-spin mx-auto opacity-50\" />\n <div>\n <h4 className=\"text-xl font-bold mb-1\">Synthesizing Payload</h4>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] opacity-50 italic\">Dispatching to remote endpoint...</p>\n </div>\n </div>\n )}\n </div>\n </ModalContent>\n <ModalActions>\n <button\n type=\"button\"\n onClick={() => setShowTestModal(false)}\n className=\"w-full py-3 rounded-xl font-bold text-sm bg-[var(--kyro-surface-accent)] border border-[var(--kyro-border)] hover:bg-[var(--kyro-surface)] transition-all\"\n >\n Acknowledge\n </button>\n </ModalActions>\n </Modal>\n\n {/* Help Modal */}\n <Modal\n open={showHelpModal}\n onClose={() => setShowHelpModal(false)}\n title=\"Webhook Integration Guide\"\n size=\"lg\"\n >\n <ModalContent>\n <div className=\"space-y-8\">\n <div className=\"grid grid-cols-1 gap-6\">\n <div className=\"p-6 rounded-3xl bg-[var(--kyro-surface-accent)]/50 border border-[var(--kyro-border)]\">\n <h4 className=\"font-bold mb-3 flex items-center gap-2\">\n <ExternalLink className=\"w-4 h-4 text-[var(--kyro-primary)]\" />\n Request Context\n </h4>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] leading-relaxed\">\n When an event triggers, Kyro sends a standard <span className=\"font-bold text-[var(--kyro-text-primary)]\">POST</span> request\n to your endpoint with a JSON payload containing document metadata and operation details.\n </p>\n </div>\n <div className=\"p-6 rounded-3xl bg-[var(--kyro-surface-accent)]/50 border border-[var(--kyro-border)]\">\n <h4 className=\"font-bold mb-3 flex items-center gap-2\">\n <Shield className=\"w-4 h-4 text-[var(--kyro-primary)]\" />\n Security Verification\n </h4>\n <p className=\"text-sm text-[var(--kyro-text-secondary)] leading-relaxed\">\n If a secret is provided, each request includes an <span className=\"font-mono text-[var(--kyro-primary)]\">X-Kyro-Signature</span> header.\n Always verify this signature in production environments.\n </p>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <h4 className=\"text-xs font-bold uppercase tracking-widest opacity-40 px-1\">Payload Architecture</h4>\n <div className=\"relative group\">\n <div className=\"absolute -inset-1 bg-gradient-to-r from-[var(--kyro-primary)]/20 to-transparent rounded-2xl blur opacity-25 group-hover:opacity-50 transition-all\"></div>\n <div className=\"relative bg-[var(--kyro-bg)] rounded-2xl border border-[var(--kyro-border)] p-6 font-mono text-sm overflow-hidden\">\n <div className=\"flex items-center gap-2 mb-4 border-b border-[var(--kyro-border)] pb-4 opacity-30\">\n <div className=\"w-2 h-2 rounded-full bg-red-500/50\" />\n <div className=\"w-2 h-2 rounded-full bg-amber-500/50\" />\n <div className=\"w-2 h-2 rounded-full bg-green-500/50\" />\n <span className=\"text-[10px] ml-2 tracking-tighter\">payload.json</span>\n </div>\n <div className=\"space-y-1\">\n <div className=\"text-[var(--kyro-text-secondary)]\">{\"{\"}</div>\n <div className=\"pl-4\"><span className=\"text-[var(--kyro-primary)]\">\"event\"</span>: <span className=\"text-green-500\">\"collection.create\"</span>,</div>\n <div className=\"pl-4\"><span className=\"text-[var(--kyro-primary)]\">\"collection\"</span>: <span className=\"text-green-500\">\"products\"</span>,</div>\n <div className=\"pl-4\"><span className=\"text-[var(--kyro-primary)]\">\"id\"</span>: <span className=\"text-green-500\">\"prod_8273\"</span>,</div>\n <div className=\"pl-4\"><span className=\"text-[var(--kyro-primary)]\">\"timestamp\"</span>: <span className=\"text-green-500\">\"2026-05-14T02:53:22Z\"</span></div>\n <div className=\"text-[var(--kyro-text-secondary)]\">{\"}\"}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ModalContent>\n <ModalActions>\n <button\n type=\"button\"\n onClick={() => setShowHelpModal(false)}\n className=\"kyro-btn kyro-btn-primary w-full py-3 rounded-xl font-bold text-sm hover:opacity-90 transition-all shadow-lg shadow-[var(--kyro-primary)]/20\"\n >\n I Understand\n </button>\n </ModalActions>\n </Modal>\n </div>\n );\n}\n","import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport { apiGet, resolveApi } from \"../../lib/api\";\nimport {\n Search,\n FileText,\n Image as ImageIcon,\n Settings,\n Plus,\n ArrowRight,\n Clock,\n Loader2,\n File,\n Moon,\n Sun,\n LogOut,\n Shield,\n Code,\n Database,\n Network as NetworkIcon,\n Hexagon,\n} from \"./icons\";\nimport { useAuthStore } from \"../../lib/stores\";\n\ninterface SearchResult {\n collection: string;\n label: string;\n id: string;\n title: string;\n doc?: Record<string, unknown>;\n}\n\ninterface CommandPaletteProps {\n isOpen: boolean;\n onClose: () => void;\n collections: Record<string, unknown>;\n globals: Record<string, unknown>;\n onNavigate: (view: string, collection?: string, id?: string) => void;\n}\n\nexport function CommandPalette({\n isOpen,\n onClose,\n collections,\n globals,\n onNavigate,\n}: CommandPaletteProps) {\n const { user, permissions } = useAuthStore();\n const [query, setQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [loading, setLoading] = useState(false);\n const [searchResults, setSearchResults] = useState<SearchResult[]>([]);\n const inputRef = useRef<HTMLInputElement>(null);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n if (isOpen) {\n setQuery(\"\");\n setSelectedIndex(0);\n setSearchResults([]);\n setLoading(false);\n setTimeout(() => inputRef.current?.focus(), 100);\n }\n }, [isOpen]);\n\n const performSearch = useCallback(async (searchQuery: string) => {\n if (!searchQuery || searchQuery.length < 2) {\n setSearchResults([]);\n return;\n }\n\n setLoading(true);\n try {\n const response = await fetch(\n resolveApi(`/api/search?q=${encodeURIComponent(searchQuery)}&limit=15`),\n );\n const data = await response.json();\n if (data.results) {\n setSearchResults(data.results);\n }\n } catch (err) {\n console.error(\"Search error:\", err);\n setSearchResults([]);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n if (query.length >= 2) {\n debounceRef.current = setTimeout(() => performSearch(query), 300);\n } else {\n setSearchResults([]);\n }\n\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, [query, performSearch]);\n\n if (!isOpen) return null;\n\n const collectionItems = Object.entries(collections)\n .filter(([slug]) => permissions?.collections?.[slug]?.read !== false)\n .map(([slug, config]: [string, Record<string, unknown>]) => ({\n id: `col-${slug}`,\n label: config.label || slug,\n type: \"collection\",\n slug,\n icon: FileText,\n }));\n\n const globalItems = Object.entries(globals)\n .filter(([slug]) => permissions?.globals?.[slug]?.read !== false)\n .map(([slug, config]: [string, Record<string, unknown>]) => ({\n id: `global-${slug}`,\n label: config.label || slug,\n type: \"global\",\n slug,\n icon: Settings,\n }));\n\n const isDark =\n typeof document !== \"undefined\" &&\n document.documentElement.classList.contains(\"dark\");\n\n const isAdmin = user?.role === \"admin\";\n\n const actionItems = [\n {\n id: \"action-media\",\n label: \"Media Gallery\",\n type: \"action\",\n view: \"media\",\n icon: ImageIcon,\n visible: permissions?.collections?.media?.read !== false,\n },\n {\n id: \"action-users\",\n label: \"Team Management\",\n type: \"action\",\n view: \"users\",\n icon: Clock,\n visible: isAdmin,\n },\n {\n id: \"action-audit\",\n label: \"Audit Logs\",\n type: \"action\",\n view: \"audit\",\n icon: File,\n visible: isAdmin,\n },\n {\n id: \"action-roles\",\n label: \"Roles & Permissions\",\n type: \"action\",\n view: \"roles\",\n icon: Shield,\n visible: isAdmin,\n },\n {\n id: \"action-api\",\n label: \"REST API Explorer\",\n type: \"action\",\n view: \"api-explorer\",\n icon: Database,\n visible: isAdmin,\n },\n {\n id: \"action-graphql\",\n label: \"GraphQL Playground\",\n type: \"action\",\n view: \"graphql\",\n icon: Hexagon,\n visible: isAdmin,\n },\n {\n id: \"action-rest\",\n label: \"REST Playground\",\n type: \"action\",\n view: \"rest\",\n icon: NetworkIcon,\n visible: isAdmin,\n },\n {\n id: \"action-theme\",\n label: isDark ? \"Switch to Light Mode\" : \"Switch to Dark Mode\",\n type: \"action\",\n view: \"theme\",\n icon: isDark ? Sun : Moon,\n visible: true,\n },\n {\n id: \"action-logout\",\n label: \"Sign Out\",\n type: \"action\",\n view: \"logout\",\n icon: LogOut,\n visible: true,\n },\n ].filter((a) => a.visible);\n\n const docResultItems: { id: string; label: string; type: string; collection: string; label2?: string; docId: string; icon: typeof File; doc?: Record<string, unknown> }[] = searchResults.map((result, idx) => ({\n id: `doc-${result.collection}-${result.id}`,\n label: result.title,\n type: \"document\",\n collection: result.collection,\n label2: result.label,\n docId: result.id,\n icon: File,\n doc: result.doc,\n }));\n\n const allItems =\n query.length >= 2\n ? [...actionItems, ...collectionItems, ...globalItems, ...docResultItems]\n : [...actionItems, ...collectionItems, ...globalItems];\n\n const filteredItems =\n query === \"\"\n ? allItems\n : allItems.filter((item) =>\n item.label.toLowerCase().includes(query.toLowerCase()),\n );\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((i) => (i + 1) % filteredItems.length);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex(\n (i) => (i - 1 + filteredItems.length) % filteredItems.length,\n );\n } else if (e.key === \"Enter\") {\n const item = filteredItems[selectedIndex];\n if (item) handleSelect(item);\n } else if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n const handleSelect = (item: { type: string; slug?: string; view?: string; collection?: string; docId?: string }) => {\n if (item.type === \"collection\") {\n if (item.slug === \"users\") {\n onNavigate(item.slug, item.slug);\n } else {\n onNavigate(\"list\", item.slug);\n }\n } else if (item.type === \"global\") {\n onNavigate(\"settings\", item.slug);\n } else if (item.type === \"document\") {\n if (item.collection === \"users\") {\n onNavigate(\"users\", \"users\", item.docId);\n } else {\n onNavigate(\"edit\", item.collection, item.docId);\n }\n } else if (item.type === \"action\") {\n if (item.view === \"users\") {\n onNavigate(\"users\", \"users\");\n } else if (item.view === \"media\") {\n onNavigate(\"media\", \"media\");\n } else {\n onNavigate(item.view, item.view);\n }\n }\n onClose();\n };\n\n const getSectionLabel = () => {\n if (query === \"\") return \"Quick Actions & Collections\";\n if (searchResults.length > 0) return \"Documents\";\n if (loading) return \"Searching...\";\n return \"Search Results\";\n };\n\n return (\n <div className=\"fixed inset-0 z-[1000] flex items-start justify-center pt-[15vh] px-4\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-black/60 backdrop-blur-sm animate-in fade-in duration-300\"\n onClick={onClose}\n />\n\n {/* Palette Body */}\n <div className=\"relative w-full max-w-2xl bg-[var(--kyro-surface)] rounded-3xl shadow-2xl overflow-hidden animate-in zoom-in-95 fade-in duration-300 ring-1 ring-white/10 border border-white/5\">\n <div className=\"flex items-center px-6 py-5 border-b border-[var(--kyro-border)]\">\n {loading ? (\n <Loader2 className=\"w-5 h-5 text-[var(--kyro-text-secondary)] opacity-50 mr-4 animate-spin\" />\n ) : (\n <Search className=\"w-5 h-5 text-[var(--kyro-text-secondary)] opacity-50 mr-4\" />\n )}\n <input\n ref={inputRef}\n placeholder=\"Search anything...\"\n className=\"flex-1 bg-transparent border-none focus:outline-none text-lg font-medium text-[var(--kyro-text-primary)] placeholder:text-[var(--kyro-text-muted)]\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n />\n <div className=\"flex items-center gap-2 px-2 py-1 bg-[var(--kyro-bg-secondary)] rounded-lg border border-[var(--kyro-border)]\">\n <span className=\"text-[10px] font-bold opacity-40 tracking-widest\">\n ESC\n </span>\n </div>\n </div>\n\n <div className=\"max-h-[400px] overflow-y-auto py-4\">\n {filteredItems.length > 0 ? (\n <div className=\"space-y-1 px-4\">\n <p className=\"px-4 text-[10px] font-bold tracking-[0.2em] opacity-40 mb-4\">\n {getSectionLabel()}\n </p>\n {filteredItems.map((item, index) => (\n <div\n key={item.id}\n onClick={() => handleSelect(item)}\n onMouseEnter={() => setSelectedIndex(index)}\n className={`flex items-center justify-between px-4 py-4 rounded-2xl cursor-pointer ${index === selectedIndex\n ? \"bg-[var(--kyro-primary)] text-[var(--kyro-sidebar-text-active)] shadow-xl shadow-[var(--kyro-primary)]\"\n : \"hover:bg-[var(--kyro-bg-secondary)] text-[var(--kyro-text-secondary)]\"\n }`}\n >\n <div className=\"flex items-center gap-4\">\n <div\n className={`p-2 rounded-xl ${index === selectedIndex ? \"bg-white/20\" : \"bg-[var(--kyro-bg-secondary)] border border-[var(--kyro-border)]\"}`}\n >\n <item.icon className=\"w-4 h-4\" />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"font-bold text-sm\">{item.label}</span>\n {item.type === \"document\" && item.label2 && (\n <span\n className={`text-[10px] font-bold tracking-widest ${index === selectedIndex ? \"text-[var(--kyro-sidebar-text-active)]/60\" : \"opacity-40\"}`}\n >\n {item.label2}\n </span>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span\n className={`text-[10px] font-bold tracking-widest opacity-40 ${index === selectedIndex ? \"text-[var(--kyro-sidebar-text-active)] p-1\" : \"\"}`}\n >\n {item.type}\n </span>\n {index === selectedIndex && (\n <ArrowRight className=\"w-4 h-4 mr-2\" />\n )}\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"py-12 text-center\">\n <p className=\"text-[var(--kyro-text-secondary)] italic opacity-60\">\n {query.length >= 2 && !loading\n ? `No results found for \"${query}\"`\n : \"Start typing to search...\"}\n </p>\n </div>\n )}\n </div>\n\n <div className=\"px-8 py-4 bg-[var(--kyro-bg-secondary)] border-t border-[var(--kyro-border)] flex items-center justify-between text-[10px] font-bold tracking-widest text-[var(--kyro-text-secondary)] opacity-60\">\n <div className=\"flex gap-6\">\n <span className=\"flex items-center gap-2 underline underline-offset-4 decoration-2 decoration-[var(--kyro-primary)]\">\n ↑↓ Navigate\n </span>\n <span className=\"flex items-center gap-2 underline underline-offset-4 decoration-2 decoration-[var(--kyro-primary)]\">\n ⏎ Select\n </span>\n </div>\n <div>Kyro Universal Search</div>\n </div>\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { useUIStore } from \"../../lib/stores\";\nimport { ConfirmModal } from \"./Modal\";\n\nexport function GlobalModal() {\n const { modal, closeModal } = useUIStore();\n const [loading, setLoading] = useState(false);\n\n if (!modal.open || !modal.config) return null;\n\n const { config } = modal;\n\n const handleConfirm = async () => {\n if (config.onConfirm) {\n try {\n setLoading(true);\n await config.onConfirm();\n } catch (error) {\n console.error(\"Modal confirm action failed:\", error);\n } finally {\n setLoading(false);\n closeModal();\n }\n } else {\n closeModal();\n }\n };\n\n const handleClose = () => {\n if (config.onCancel) {\n config.onCancel();\n }\n closeModal();\n };\n\n return (\n <ConfirmModal\n open={modal.open}\n onClose={handleClose}\n onConfirm={handleConfirm}\n title={config.title}\n message={config.message}\n confirmLabel={config.confirmLabel}\n cancelLabel={config.cancelLabel}\n variant={config.variant === \"danger\" ? \"danger\" : \"default\"}\n loading={loading}\n />\n );\n}\n","import { useState, useEffect, useMemo } from \"react\";\nimport { apiPost } from \"../lib/api\";\nimport { toast, useAuthStore, type AuthUser } from \"../lib/stores\";\nimport type { CollectionConfig, GlobalConfig } from \"@kyro-cms/core/client\";\nimport { ListView } from \"./ListView\";\nimport { DetailView } from \"./DetailView\";\nimport { CreateView } from \"./CreateView\";\nimport { LoginPage } from \"./LoginPage\";\nimport { Dashboard } from \"./Dashboard\";\nimport { UserManagement } from \"./UserManagement\";\nimport { BrandingHub } from \"./BrandingHub\";\nimport { DeveloperCenter } from \"./DeveloperCenter\";\nimport { WebhookManager } from \"./WebhookManager\";\nimport { MediaGallery } from \"./MediaGallery\";\nimport { CommandPalette } from \"./ui/CommandPalette\";\nimport { GlobalModal } from \"./ui/GlobalModal\";\nimport { Toaster } from \"./ui/Toaster\";\nimport { ThemeProvider, type ThemeMode } from \"./ThemeProvider\";\nimport { toArray, toCollectionMap, toGlobalMap } from \"../lib/config\";\nimport \"../styles/main.css\";\n\ntype View =\n | \"list\"\n | \"detail\"\n | \"create\"\n | \"settings\"\n | \"users\"\n | \"roles\"\n | \"audit\"\n | \"media\"\n | \"branding\"\n | \"developer\"\n | \"webhooks\";\n\nexport interface KyroAdminConfig {\n collections?: CollectionConfig[] | Record<string, CollectionConfig>;\n globals?: GlobalConfig[] | Record<string, GlobalConfig>;\n adapter?: unknown;\n name?: string;\n}\n\ninterface AdminProps {\n config: KyroAdminConfig;\n theme?: ThemeMode;\n onThemeChange?: (mode: ThemeMode) => void;\n}\n\nexport function Admin({ config, theme = \"light\", onThemeChange }: AdminProps) {\n const [authenticated, setAuthenticated] = useState(false);\n const [currentUser, setCurrentUser] = useState<AuthUser | null>(null);\n\n const collections = useMemo(\n () => toCollectionMap(toArray(config.collections)),\n [config.collections],\n );\n\n const globals = useMemo(\n () => toGlobalMap(toArray(config.globals)),\n [config.globals],\n );\n\n const [activeCollection, setActiveCollection] = useState<string | null>(null);\n const [activeGlobal, setActiveGlobal] = useState<string | null>(null);\n const [currentView, setCurrentView] = useState<View>(\"list\");\n const [activeDocumentId, setActiveDocumentId] = useState<string | null>(null);\n const [isCommandPaletteOpen, setIsCommandPaletteOpen] = useState(false);\n\n useEffect(() => {\n // Basic session check\n const checkAuth = async () => {\n try {\n const response = await fetch(\"/api/users/me\");\n if (response.ok) {\n const user = await response.json();\n setCurrentUser(user);\n setAuthenticated(true);\n }\n } catch (err) {\n console.error(\"Auth check failed\", err);\n }\n };\n checkAuth();\n }, []);\n\n useEffect(() => {\n if (authenticated && !activeCollection) {\n const firstCol = Object.keys(collections)[0];\n if (firstCol) setActiveCollection(firstCol);\n }\n }, [authenticated, collections, activeCollection]);\n\n const handleNavigate = (view: View, collection: string | null = null, id: string | null = null) => {\n setCurrentView(view);\n if (collection) setActiveCollection(collection);\n if (id) setActiveDocumentId(id);\n setIsCommandPaletteOpen(false);\n };\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n setIsCommandPaletteOpen((prev) => !prev);\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n\n (window as { openCommandPalette?: () => void }).openCommandPalette = () => setIsCommandPaletteOpen(true);\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n delete (window as { openCommandPalette?: () => void }).openCommandPalette;\n };\n }, []);\n\n const handleLogin = async (data: Record<string, unknown>) => {\n try {\n const response = await apiPost<any>(\"/api/users/login\", data);\n if (response.user) {\n setCurrentUser(response.user);\n setAuthenticated(true);\n toast.success(\"Welcome back!\");\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : \"Login failed\";\n toast.error(message || \"Login failed\");\n }\n };\n\n if (!authenticated) {\n return (\n <LoginPage\n onAuth={(token, user) => {\n setCurrentUser(user as any);\n setAuthenticated(true);\n }}\n theme={theme as any}\n />\n );\n }\n\n const renderContent = () => {\n const collection = activeCollection ? collections[activeCollection] : null;\n\n switch (currentView) {\n case \"create\":\n return collection ? (\n <CreateView\n config={config as any}\n collection={collection}\n onSuccess={() => setCurrentView(\"list\")}\n onCancel={() => setCurrentView(\"list\")}\n onError={(msg) => toast.error(msg)}\n />\n ) : null;\n\n case \"detail\":\n return collection && activeDocumentId ? (\n <DetailView\n config={config as any}\n collection={collection}\n documentId={activeDocumentId}\n onBack={() => setCurrentView(\"list\")}\n onSave={() => {}}\n onError={(msg) => toast.error(msg)}\n />\n ) : null;\n\n case \"users\":\n return <UserManagement />;\n\n case \"media\":\n return <MediaGallery />;\n\n case \"branding\":\n return <BrandingHub />;\n\n case \"developer\":\n return <DeveloperCenter collections={collections as any} />;\n\n case \"webhooks\":\n return <WebhookManager />;\n\n case \"list\":\n default:\n return collection ? (\n <ListView\n config={config as any}\n collection={collection}\n onCreate={() => setCurrentView(\"create\")}\n onEdit={(id: string) => handleNavigate(\"detail\", activeCollection, id)}\n />\n ) : (\n <Dashboard \n onNavigate={handleNavigate as any} \n collections={collections as any}\n user={currentUser as any}\n />\n );\n }\n };\n\n return (\n <ThemeProvider {...({ mode: theme, onChange: onThemeChange } as any)}>\n <div className=\"kyro-admin min-h-screen bg-[var(--kyro-bg)] text-[var(--kyro-text-primary)]\">\n <div className=\"flex h-screen overflow-hidden\">\n <main className=\"flex-1 flex flex-col min-w-0 overflow-hidden\">\n <div className=\"flex-1 overflow-y-auto\">\n <CommandPalette \n isOpen={isCommandPaletteOpen}\n onClose={() => setIsCommandPaletteOpen(false)}\n collections={collections as any}\n globals={globals as any}\n onNavigate={handleNavigate as any} \n />\n {renderContent()}\n </div>\n </main>\n </div>\n <GlobalModal />\n <Toaster />\n </div>\n </ThemeProvider>\n );\n}\n","import React from \"react\";\nimport { Dropdown, DropdownItem, DropdownSeparator } from \"./ui/Dropdown\";\nimport { CountBadge } from \"./ui/Badge\";\n\ninterface BulkAction {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n danger?: boolean;\n}\n\ninterface BulkActionsBarProps {\n selectedCount: number;\n onClearSelection: () => void;\n actions: BulkAction[];\n onSelectAll?: () => void;\n}\n\nexport function BulkActionsBar({\n selectedCount,\n onClearSelection,\n actions,\n onSelectAll,\n}: BulkActionsBarProps) {\n if (selectedCount === 0) return null;\n\n return (\n <div className=\"flex items-center justify-between py-2 px-4 bg-gray-50 border-b border-gray-200\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n <CountBadge count={selectedCount} />\n <span className=\"text-sm text-gray-600\">selected</span>\n </div>\n <button type=\"button\"\n onClick={onClearSelection}\n className=\"text-sm text-gray-500 hover:text-gray-700\"\n >\n Clear selection\n </button>\n {onSelectAll && (\n <button type=\"button\"\n onClick={onSelectAll}\n className=\"text-sm text-gray-500 hover:text-gray-700\"\n >\n Select all\n </button>\n )}\n </div>\n\n <Dropdown\n trigger={\n <button type=\"button\" className=\"kyro-btn kyro-btn-secondary kyro-btn-sm\">\n Actions\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n }\n >\n {actions.map((action, index) => (\n <DropdownItem\n key={index}\n onClick={action.onClick}\n icon={action.icon as React.ReactElement}\n danger={action.danger}\n >\n {action.label}\n </DropdownItem>\n ))}\n </Dropdown>\n </div>\n );\n}\n","import React from \"react\";\nimport { SlidePanel } from \"./ui/SlidePanel\";\nimport { Spinner } from \"./ui/Spinner\";\nimport { History, Eye, GitCompare, Undo2, CheckCircle2, Clock, User } from \"lucide-react\";\n\ninterface Version {\n id: string;\n version: number;\n createdAt: string;\n updatedAt: string;\n createdBy?: {\n id: string;\n name: string;\n email?: string;\n };\n status: \"draft\" | \"published\";\n changelog?: string;\n}\n\ninterface VersionHistoryPanelProps {\n open: boolean;\n onClose: () => void;\n versions: Version[];\n currentVersionId?: string;\n onPreview: (version: Version) => void;\n onRestore: (version: Version) => void;\n onCompare?: (v1: Version, v2: Version) => void;\n loading?: boolean;\n}\n\nexport function VersionHistoryPanel({\n open,\n onClose,\n versions,\n currentVersionId,\n onPreview,\n onRestore,\n onCompare,\n loading = false,\n}: VersionHistoryPanelProps) {\n const formatDate = (dateValue: any) => {\n if (!dateValue) return \"Unknown date\";\n const date = new Date(dateValue);\n if (isNaN(date.getTime())) {\n // Sometimes strings from DB like SQLite might need parsing\n const parsed = Date.parse(dateValue);\n if (!isNaN(parsed)) return new Date(parsed).toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\", hour: \"2-digit\", minute: \"2-digit\" });\n return \"Invalid date\";\n }\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n };\n\n const formatTimeAgo = (dateValue: any) => {\n if (!dateValue) return \"Unknown date\";\n const date = new Date(dateValue);\n if (isNaN(date.getTime())) return formatDate(dateValue);\n\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n \n // If it's in the future (e.g. server clock skew), just say \"Just now\"\n if (diffMs < 0) return \"Just now\";\n\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return \"Just now\";\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return formatDate(dateValue);\n };\n\n return (\n <SlidePanel\n open={open}\n onClose={onClose}\n title=\"Version History\"\n width=\"md\"\n >\n {loading ? (\n <div className=\"flex items-center justify-center py-12\">\n <Spinner />\n </div>\n ) : versions.length === 0 ? (\n <div className=\"text-center flex flex-col items-center justify-center py-16 text-[var(--kyro-text-muted)]\">\n <History className=\"w-12 h-12 mb-4 opacity-20\" />\n <p className=\"font-medium text-[var(--kyro-text)]\">No version history yet</p>\n <p className=\"text-sm mt-1\">Versions are automatically saved as you work.</p>\n </div>\n ) : (\n <div className=\"space-y-3 px-1 pb-4 pt-1\">\n {versions.map((version) => {\n const isCurrent = version.id === currentVersionId;\n return (\n <div\n key={version.id}\n className={`p-4 rounded-xl border transition-all duration-200 group relative overflow-hidden ${\n isCurrent\n ? \"border-[var(--kyro-primary)] bg-[var(--kyro-primary)]/5 shadow-sm\"\n : \"border-[var(--kyro-border)] hover:border-[var(--kyro-primary)]/30 hover:bg-[var(--kyro-surface-accent)] hover:shadow-sm bg-[var(--kyro-surface)]\"\n }`}\n >\n {isCurrent && (\n <div className=\"absolute top-0 left-0 w-1 h-full bg-[var(--kyro-primary)] shadow-[0_0_8px_var(--kyro-primary)]\" />\n )}\n \n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-2\">\n <span\n className={`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-bold tracking-wide uppercase ${\n version.status === \"published\"\n ? \"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400\"\n : \"bg-zinc-500/10 text-zinc-600 dark:text-zinc-400\"\n }`}\n >\n {version.status === \"published\" && <CheckCircle2 className=\"w-3 h-3\" />}\n {version.status === \"published\" ? \"Published\" : \"Draft\"}\n </span>\n <span className=\"text-xs font-semibold text-[var(--kyro-text)] px-2 py-0.5 rounded-md bg-[var(--kyro-surface-accent)]\">\n v{version.version}\n </span>\n {isCurrent && (\n <span className=\"text-[10px] font-medium text-[var(--kyro-primary)] flex items-center gap-1\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-[var(--kyro-primary)] animate-pulse\" />\n Current\n </span>\n )}\n </div>\n \n <div className=\"flex items-center gap-1.5 text-sm font-medium text-[var(--kyro-text)] truncate mb-1\">\n <Clock className=\"w-3.5 h-3.5 text-[var(--kyro-text-muted)]\" />\n {formatTimeAgo(version.createdAt)}\n </div>\n \n {version.createdBy && (\n <div className=\"flex items-center gap-1.5 text-xs text-[var(--kyro-text-muted)] mt-1.5\">\n <User className=\"w-3.5 h-3.5\" />\n <span>{version.createdBy.name || version.createdBy.email}</span>\n </div>\n )}\n \n {version.changelog && (\n <p className=\"text-xs text-[var(--kyro-text-secondary)] mt-2 italic border-l-2 border-[var(--kyro-border)] pl-2\">\n \"{version.changelog}\"\n </p>\n )}\n </div>\n \n <div className=\"flex flex-col sm:flex-row items-center gap-1.5 opacity-100 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity\">\n <button type=\"button\"\n onClick={() => onPreview(version)}\n className=\"p-2 text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-primary)] hover:bg-[var(--kyro-primary)]/10 rounded-md transition-colors\"\n title=\"Preview this version\"\n >\n <Eye className=\"w-4 h-4\" />\n </button>\n {onCompare && (\n <button type=\"button\"\n onClick={() =>\n onCompare(\n version,\n versions.find((v) => v.id === currentVersionId) || version,\n )\n }\n className=\"p-2 text-[var(--kyro-text-secondary)] hover:text-[var(--kyro-primary)] hover:bg-[var(--kyro-primary)]/10 rounded-md transition-colors\"\n title=\"Compare with current\"\n >\n <GitCompare className=\"w-4 h-4\" />\n </button>\n )}\n {!isCurrent && (\n <button type=\"button\"\n onClick={() => onRestore(version)}\n className=\"p-2 text-amber-600 hover:bg-amber-500/10 rounded-md transition-colors\"\n title=\"Restore this version\"\n >\n <Undo2 className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </SlidePanel>\n );\n}\n","import type { ReactNode } from 'react';\n\ninterface HeaderProps {\n title: string;\n onMenuClick: () => void;\n actions?: ReactNode;\n}\n\nexport function Header({ title, onMenuClick, actions }: HeaderProps) {\n return (\n <header className=\"kyro-header\">\n <div className=\"kyro-header-left\">\n <button type=\"button\"\n className=\"kyro-header-menu\"\n onClick={onMenuClick}\n aria-label=\"Toggle menu\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M3 12h18M3 6h18M3 18h18\" />\n </svg>\n </button>\n <h1 className=\"kyro-header-title\">{title}</h1>\n </div>\n <div className=\"kyro-header-right\">\n {actions}\n <div className=\"kyro-header-user\">\n <button type=\"button\" className=\"kyro-header-user-btn\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 20c0-4 4-6 8-6s8 2 8 6\" />\n </svg>\n </button>\n </div>\n </div>\n </header>\n );\n}\n","import type { AdminContext, HookResult, LifecycleHook } from \"./types.ts\";\n\ntype HookRegistry = {\n ready: LifecycleHook[];\n beforeDeploy: LifecycleHook[];\n afterDeploy: ((ctx: AdminContext, result: HookResult) => void)[];\n};\n\nconst registry: HookRegistry = {\n ready: [],\n beforeDeploy: [],\n afterDeploy: [],\n};\n\nexport function onAdminReady(hook: LifecycleHook) {\n registry.ready.push(hook);\n return () => {\n registry.ready = registry.ready.filter((h) => h !== hook);\n };\n}\n\nexport function beforeDeploy(hook: LifecycleHook) {\n registry.beforeDeploy.push(hook);\n return () => {\n registry.beforeDeploy = registry.beforeDeploy.filter((h) => h !== hook);\n };\n}\n\nexport function afterDeploy(\n hook: (ctx: AdminContext, result: HookResult) => void,\n) {\n registry.afterDeploy.push(hook);\n return () => {\n registry.afterDeploy = registry.afterDeploy.filter((h) => h !== hook);\n };\n}\n\nexport async function emitAdminReady(ctx: AdminContext): Promise<HookResult[]> {\n const results: HookResult[] = [];\n for (const hook of registry.ready) {\n try {\n const result = await hook(ctx);\n if (result && typeof result === \"object\" && \"success\" in result) {\n results.push(result);\n }\n } catch (error) {\n results.push({ success: false, error: String(error) });\n }\n }\n return results;\n}\n\nexport async function emitBeforeDeploy(\n ctx: AdminContext,\n): Promise<HookResult[]> {\n const results: HookResult[] = [];\n for (const hook of registry.beforeDeploy) {\n try {\n const result = await hook(ctx);\n if (result && typeof result === \"object\" && \"success\" in result) {\n results.push(result);\n }\n } catch (error) {\n results.push({ success: false, error: String(error) });\n }\n }\n return results;\n}\n\nexport async function emitAfterDeploy(\n ctx: AdminContext,\n result: HookResult,\n): Promise<void> {\n for (const hook of registry.afterDeploy) {\n try {\n await hook(ctx, result);\n } catch {\n // Silently ignore afterDeploy hook errors\n }\n }\n}\n","import { useState, useEffect, useCallback } from \"react\";\n\nexport interface QueryOptions {\n page?: number;\n limit?: number;\n filter?: Record<string, unknown>;\n sort?: string;\n order?: \"asc\" | \"desc\";\n}\n\nexport interface QueryResult<T> {\n data: T | null;\n loading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\nexport interface MutationResult {\n mutate: (\n data?: Record<string, unknown>,\n ) => Promise<Record<string, unknown> | null>;\n loading: boolean;\n error: string | null;\n}\n\nfunction getApiUrl(path: string): string {\n const base = typeof window !== \"undefined\" ? window.location.origin : \"\";\n return `${base}${path}`;\n}\n\nexport function useKyroQuery<T = Record<string, unknown>>(\n slug: string,\n options: QueryOptions = {},\n): QueryResult<T> {\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const params = new URLSearchParams();\n if (options.page) params.set(\"page\", String(options.page));\n if (options.limit) params.set(\"limit\", String(options.limit));\n if (options.sort) params.set(\"sort\", options.sort);\n if (options.order) params.set(\"order\", options.order);\n\n const url = `${getApiUrl(`/api/${slug}`)}?${params.toString()}`;\n const res = await fetch(url, {\n credentials: \"include\",\n });\n\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n const json = await res.json();\n setData(json.data ?? json);\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setLoading(false);\n }\n }, [slug, options.page, options.limit, options.sort, options.order]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n return { data, loading, error, refetch: fetchData };\n}\n\nexport function useKyroMutation(\n slug: string,\n method: \"POST\" | \"PATCH\" | \"DELETE\" = \"POST\",\n): MutationResult {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const mutate = useCallback(\n async (\n data?: Record<string, unknown>,\n ): Promise<Record<string, unknown> | null> => {\n setLoading(true);\n setError(null);\n try {\n const url = getApiUrl(`/api/${slug}`);\n const res = await fetch(url, {\n method,\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: data ? JSON.stringify(data) : undefined,\n });\n\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n const json = await res.json();\n return json.data ?? json;\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n return null;\n } finally {\n setLoading(false);\n }\n },\n [slug, method],\n );\n\n return { mutate, loading, error };\n}\n","import type { KyroPlugin } from \"./types.ts\";\n\nconst plugins: Map<string, KyroPlugin> = new Map();\n\nexport function registerPlugin(plugin: KyroPlugin): void {\n if (!plugin.name || typeof plugin.name !== \"string\") {\n throw new Error(\"Plugin must have a valid name\");\n }\n if (plugins.has(plugin.name)) {\n console.warn(`Plugin \"${plugin.name}\" is already registered. Overwriting.`);\n }\n plugins.set(plugin.name, plugin);\n if (plugin.apply) {\n plugin.apply({});\n }\n}\n\nexport function unregisterPlugin(name: string): void {\n plugins.delete(name);\n}\n\nexport function getPlugin(name: string): KyroPlugin | undefined {\n return plugins.get(name);\n}\n\nexport function getPlugins(): KyroPlugin[] {\n return Array.from(plugins.values());\n}\n\nexport function getPluginsWithHook<\n K extends keyof NonNullable<KyroPlugin[\"hooks\"]>,\n>(hookName: K): KyroPlugin[] {\n return Array.from(plugins.values()).filter(\n (p) => p.hooks && typeof p.hooks[hookName] === \"function\",\n );\n}\n","import type { KyroPlugin } from \"../types.js\";\nimport { registerPlugin } from \"../registry.js\";\n\n// Simple MVP plugin demonstrating registration and an onAdminReady hook\nconst samplePlugin: KyroPlugin = {\n name: \"sample-plugin\",\n version: \"0.1.0\",\n description: \"A tiny sample plugin to demonstrate the extensibility surface\",\n hooks: {\n onAdminReady: () => {\n // Lightweight side-effect; in real plugins this could mount UI or register editors\n return;\n },\n },\n};\n\nregisterPlugin(samplePlugin);\n\nexport default samplePlugin;\n","import type { KyroPlugin } from \"../types.js\";\nimport { registerPlugin } from \"../registry.js\";\n\n// Second MVP plugin demonstrating beforeDeploy hook usage\nconst samplePlugin2: KyroPlugin = {\n name: \"sample-plugin-2\",\n version: \"0.1.0\",\n description: \"Second MVP plugin demonstrating beforeDeploy hook\",\n hooks: {\n beforeDeploy: (ctx) => {\n // Lightweight side-effect; in real plugins, you could validate config, migrations, etc.\n void ctx;\n return { success: true };\n },\n },\n};\n\nregisterPlugin(samplePlugin2);\n\nexport default samplePlugin2;\n","import type { KyroBlock } from \"./types.ts\";\n\nconst blocks: Map<string, KyroBlock> = new Map();\n\nexport function registerBlock(block: KyroBlock): void {\n if (!block.id || typeof block.id !== \"string\") {\n throw new Error(\"Block must have a valid id\");\n }\n if (!block.label) {\n throw new Error(\"Block must have a label\");\n }\n blocks.set(block.id, block);\n}\n\nexport function unregisterBlock(id: string): void {\n blocks.delete(id);\n}\n\nexport function getBlock(id: string): KyroBlock | undefined {\n return blocks.get(id);\n}\n\nexport function getBlocks(): KyroBlock[] {\n return Array.from(blocks.values());\n}\n\nexport function getBlocksByCategory(category: string): KyroBlock[] {\n return Array.from(blocks.values()).filter((b) => b.category === category);\n}\n\nexport function useBlockRenderer(id: string) {\n const block = blocks.get(id);\n if (!block) {\n console.warn(`Block \"${id}\" not found in registry`);\n return null;\n }\n return block.render;\n}\n","import React from \"react\";\nimport type { KyroBlock } from \"../types.ts\";\nimport { registerBlock } from \"../registry.ts\";\n\nconst SampleBlockRenderer: KyroBlock[\"render\"] = (props) => {\n const { data } = props;\n return (\n <div style={{ border: \"1px solid #ccc\", padding: 8, borderRadius: 6 }}>\n <strong>Sample Block</strong>\n <pre style={{ marginTop: 6 }}>{JSON.stringify(data ?? {}, null, 2)}</pre>\n </div>\n );\n};\n\nconst block: KyroBlock = {\n id: \"sample-block\",\n label: \"Sample Block\",\n category: \"demo\",\n schema: [{ name: \"title\", label: \"Title\", type: \"text\", required: true }],\n render: SampleBlockRenderer,\n};\n\nregisterBlock(block);\n\nexport default block;\nexport { block as sampleBlock };\n","import React from \"react\";\nimport type { KyroBlock } from \"../types.ts\";\nimport { registerBlock } from \"../registry.ts\";\n\nconst SampleBlock2Renderer: KyroBlock[\"render\"] = (props) => {\n const { data } = props;\n return (\n <div style={{ border: \"2px dashed #888\", padding: 10, borderRadius: 8 }}>\n <strong>Sample Block 2</strong>\n <pre style={{ marginTop: 6 }}>{JSON.stringify(data ?? {}, null, 2)}</pre>\n </div>\n );\n};\n\nconst block: KyroBlock = {\n id: \"sample-block-2\",\n label: \"Sample Block 2\",\n category: \"demo\",\n schema: [\n { name: \"subtitle\", label: \"Subtitle\", type: \"text\", required: false },\n ],\n render: SampleBlock2Renderer,\n};\n\nregisterBlock(block);\nexport default block;\nexport { block as sampleBlock2 };\n","import type { ReactNode, ComponentType } from \"react\";\nimport type { FieldType } from \"@kyro-cms/core\";\nimport type { KyroField, FieldEditorProps } from \"./types.ts\";\n\nconst fields: Map<string, KyroField> = new Map();\n\nexport function registerField(field: KyroField): void {\n if (!field.id || typeof field.id !== \"string\") {\n throw new Error(\"Field must have a valid id\");\n }\n if (!field.type || typeof field.type !== \"string\") {\n throw new Error(\"Field must have a valid type\");\n }\n fields.set(field.id, field);\n}\n\nexport function unregisterField(id: string): void {\n fields.delete(id);\n}\n\nexport function getField(id: string): KyroField | undefined {\n return fields.get(id);\n}\n\nexport function getFields(): KyroField[] {\n return Array.from(fields.values());\n}\n\nexport function getFieldByType(type: FieldType): KyroField | undefined {\n return Array.from(fields.values()).find((f) => f.type === type);\n}\n\nexport function useFieldRenderer(\n fieldId: string,\n props: Omit<FieldEditorProps, \"onChange\"> & {\n onChange?: (value: unknown) => void;\n },\n): ReactNode | null {\n const field = fields.get(fieldId);\n if (!field) {\n console.warn(`Field \"${fieldId}\" not found in registry`);\n return null;\n }\n const FieldEditor: ComponentType<FieldEditorProps> = field.editor;\n return <FieldEditor {...(props as FieldEditorProps)} />;\n}\n","import React from \"react\";\nimport type { FieldEditorProps } from \"../types.ts\";\nimport { registerField } from \"../registry.tsx\";\nimport type { KyroField } from \"../types.ts\";\n\nconst SampleTextEditor: React.FC<FieldEditorProps> = ({\n name,\n value,\n onChange,\n}) => {\n return (\n <input\n name={name}\n value={typeof value === \"string\" ? value : \"\"}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder=\"Sample text\"\n />\n );\n};\n\nconst field: KyroField = {\n id: \"sample-text\",\n type: \"text\",\n label: \"Sample Text\",\n editor: SampleTextEditor,\n};\n\nregisterField(field);\nexport default field;\nexport { field as sampleField };\n","import React from \"react\";\nimport type { FieldEditorProps } from \"../types.ts\";\nimport { registerField } from \"../registry.tsx\";\nimport type { KyroField } from \"../types.ts\";\n\nconst SampleTextareaEditor: React.FC<FieldEditorProps> = ({\n name,\n value,\n onChange,\n}) => {\n return (\n <textarea\n name={name}\n value={typeof value === \"string\" ? value : \"\"}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder=\"Sample textarea\"\n />\n );\n};\n\nconst field: KyroField = {\n id: \"sample-textarea\",\n type: \"textarea\",\n label: \"Sample Textarea\",\n editor: SampleTextareaEditor,\n};\n\nregisterField(field);\nexport default field;\nexport { field as sampleField2 };\n","import type { AstroIntegration } from \"astro\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { pathToFileURL } from \"url\";\nimport { build } from \"esbuild\";\nimport { config as loadDotEnv } from \"dotenv\";\nimport { Worker } from \"worker_threads\";\n\nconst _shimDir = path.resolve(new URL(\".\", import.meta.url).pathname, \"lib/shim\");\nconst _shimUses = path.join(_shimDir, \"use-sync-external-store.js\");\nconst _shimUsesWs = path.join(_shimDir, \"use-sync-external-store-with-selector.js\");\n\nexport interface KyroAdminOptions {\n basePath?: string;\n apiPath?: string;\n configPath?: string;\n}\n\nexport function kyroAdmin(options: KyroAdminOptions = {}): AstroIntegration {\n const {\n basePath = \"/admin\",\n apiPath = \"/api\",\n configPath = \"kyro.config.ts\",\n } = options;\n\n return {\n name: \"@kyro-cms/admin\",\n hooks: {\n \"astro:config:setup\": async ({ config, updateConfig, injectRoute, logger }) => {\n logger.info(`Kyro Admin mounted at ${basePath} (API: ${apiPath})`);\n\n const fallbackConfig = path.resolve(\n new URL(\".\", import.meta.url).pathname,\n \"lib/default-kyro-config.ts\",\n );\n\n // Try to resolve config from root first, then admin local\n const rootConfig = path.resolve(config.root.pathname, \"..\", configPath);\n const localConfig = path.resolve(config.root.pathname, configPath);\n\n const resolvedConfig = fs.existsSync(rootConfig)\n ? rootConfig\n : fs.existsSync(localConfig)\n ? localConfig\n : fallbackConfig;\n\n if (resolvedConfig !== fallbackConfig) {\n logger.info(`Loaded config from ${resolvedConfig}`);\n } else {\n logger.warn(`Config file not found. Using defaults.`);\n }\n\n // Transpile the user's config and write a serialized JSON copy.\n // The JSON path is injected via Vite's define so the admin can read it reliably.\n const configFile = path.join(path.dirname(resolvedConfig), \".kyro-admin-config.json\");\n let tmpFile = \"\";\n try {\n const envPath = path.join(path.dirname(resolvedConfig), \".env\");\n if (fs.existsSync(envPath)) {\n loadDotEnv({ path: envPath });\n }\n const result = await build({\n entryPoints: [resolvedConfig],\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"es2022\",\n write: false,\n sourcemap: false,\n loader: { '.ts': 'ts', '.tsx': 'tsx' },\n resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.json'],\n external: ['@kyro-cms/*'],\n });\n tmpFile = resolvedConfig.replace(/\\.ts$/, \".admin.mjs\");\n fs.writeFileSync(tmpFile, result.outputFiles[0].text, \"utf8\");\n\n // Use a Worker thread to load the config in an isolated context.\n const workerCode = `\n import { parentPort } from 'worker_threads';\n import('${pathToFileURL(tmpFile).href}').then(mod => {\n const cfg = mod.default || mod;\n const serialize = (obj) => {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === 'function') return undefined;\n if (Array.isArray(obj)) return obj.map(serialize);\n if (typeof obj === 'object') {\n const result = {};\n for (const [k, v] of Object.entries(obj)) {\n const sv = serialize(v);\n if (sv !== undefined) result[k] = sv;\n }\n return result;\n }\n return obj;\n };\n parentPort.postMessage({\n collections: serialize(cfg?.collections) || [],\n globals: serialize(cfg?.globals) || [],\n collectionOverrides: serialize(cfg?.admin?.collectionOverrides) || {},\n });\n }).catch(err => {\n parentPort.postMessage({ error: err.message });\n });\n `;\n const worker = new Worker(workerCode, { eval: true, env: { ...process.env, NODE_OPTIONS: '' } });\n const configResult = await new Promise<any>((resolve, reject) => {\n worker.on(\"message\", resolve);\n worker.on(\"error\", reject);\n const timer = setTimeout(() => {\n worker.terminate();\n reject(new Error(\"Config loading timed out\"));\n }, 30000);\n });\n worker.terminate();\n\n if (configResult.error) {\n throw new Error(configResult.error);\n }\n fs.writeFileSync(configFile, JSON.stringify(configResult, null, 2), \"utf8\");\n logger.info(\"Project config loaded for admin\");\n } catch (e: any) {\n logger.error(`Could not load project config: ${e.message}`);\n } finally {\n if (tmpFile && fs.existsSync(tmpFile)) { try { fs.unlinkSync(tmpFile); } catch { /* ignore */ } }\n }\n\n // Set up Vite aliases, defines, and plugins for runtime use\n updateConfig({\n vite: {\n plugins: [\n {\n name: \"kyro-admin-tsx-loader\",\n enforce: \"pre\" as const,\n config(_config: any) {\n const existingEsbuild = _config.esbuild;\n const existingExclude = existingEsbuild?.exclude;\n const adminInclude = /\\/node_modules\\/(?!.*@kyro-cms\\/(admin|core))/;\n return {\n esbuild: {\n ...(existingEsbuild || {}),\n exclude: existingExclude\n ? Array.isArray(existingExclude)\n ? [...existingExclude, adminInclude]\n : [existingExclude, adminInclude]\n : adminInclude,\n },\n };\n },\n },\n {\n name: \"kyro-cjs-shim\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n if (id.includes('react/compiler-runtime')) {\n return \"\\0react-compiler-runtime\";\n }\n if (id === 'debug' || id.includes('debug/src/browser.js')) {\n return \"\\0debug-browser\";\n }\n },\n load(id: string) {\n if (id === \"\\0react-compiler-runtime\") {\n return `\nimport React from \"react\";\nexport function c(size) {\n const internals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n if (!internals || !internals.H) {\n return new Array(size);\n }\n return internals.H.useMemoCache(size);\n}\n`;\n }\n if (id === \"\\0debug-browser\") {\n return `\nfunction debug(namespace) {\n function d(...args) {\n if (typeof localStorage !== \"undefined\" && localStorage.getItem(\"DEBUG\")) {\n }\n }\n d.enabled = false;\n return d;\n}\ndebug.enable = function() {};\ndebug.disable = function() {};\ndebug.enabled = function() { return false; };\nexport default debug;\n`;\n }\n },\n },\n ],\n resolve: {\n alias: {\n \"kyro:config\": resolvedConfig,\n },\n },\n optimizeDeps: {\n include: [\n '@kyro-cms/admin',\n 'use-sync-external-store',\n ],\n exclude: ['debug', 'react/compiler-runtime'],\n },\n define: {\n __KYRO_ADMIN_PATH__: JSON.stringify(basePath),\n __KYRO_API_PATH__: JSON.stringify(apiPath),\n __KYRO_ADMIN_CONFIG_FILE__: JSON.stringify(configFile),\n },\n ssr: {\n noExternal: [\n '@kyro-cms/admin', '@kyro-cms/core',\n '@tiptap/core', '@tiptap/react', '@tiptap/pm', '@tiptap/starter-kit',\n '@tiptap/extension-link', '@tiptap/extension-image', '@tiptap/extension-text-align',\n '@tiptap/extension-underline', '@tiptap/extension-highlight',\n '@tiptap/extension-task-list', '@tiptap/extension-task-item',\n '@tiptap/extension-text-style', '@tiptap/extension-color',\n 'prosemirror-model', 'prosemirror-state', 'prosemirror-view',\n 'prosemirror-schema-list', 'prosemirror-commands', 'prosemirror-keymap',\n 'prosemirror-transform', 'prosemirror-inputrules',\n ],\n },\n },\n });\n\n // Load the user's config at runtime via the kyro:config alias.\n // We set a placeholder here; the actual config is loaded by\n // admin/lib/config.ts via dynamic import of kyro:config.\n (globalThis as any).__KYRO_ADMIN_PROJECT_CONFIG__ = {\n collections: [],\n globals: [],\n adapter: null,\n };\n\n // Inject Admin UI Routes\n const pages = [\n { pattern: \"\", entrypoint: \"./pages/index.astro\" },\n { pattern: \"/login\", entrypoint: \"./pages/auth/login.astro\" },\n { pattern: \"/register\", entrypoint: \"./pages/auth/register.astro\" },\n { pattern: \"/media\", entrypoint: \"./pages/media.astro\" },\n { pattern: \"/users\", entrypoint: \"./pages/users/index.astro\" },\n { pattern: \"/users/new\", entrypoint: \"./pages/users/new.astro\" },\n { pattern: \"/users/[id]\", entrypoint: \"./pages/users/[id].astro\" },\n { pattern: \"/roles\", entrypoint: \"./pages/roles/index.astro\" },\n { pattern: \"/settings\", entrypoint: \"./pages/settings/index.astro\" },\n {\n pattern: \"/settings/[slug]\",\n entrypoint: \"./pages/settings/[slug].astro\",\n },\n { pattern: \"/audit\", entrypoint: \"./pages/audit/index.astro\" },\n { pattern: \"/sessions\", entrypoint: \"./pages/sessions.astro\" },\n { pattern: \"/keys\", entrypoint: \"./pages/keys.astro\" },\n { pattern: \"/webhooks\", entrypoint: \"./pages/webhooks.astro\" },\n { pattern: \"/plugins\", entrypoint: \"./pages/plugins.astro\" },\n { pattern: \"/marketplace\", entrypoint: \"./pages/marketplace.astro\" },\n { pattern: \"/graphql\", entrypoint: \"./pages/graphql.astro\" },\n {\n pattern: \"/rest-playground\",\n entrypoint: \"./pages/rest-playground.astro\",\n },\n {\n pattern: \"/[collection]\",\n entrypoint: \"./pages/[collection]/index.astro\",\n },\n {\n pattern: \"/[collection]/[id]\",\n entrypoint: \"./pages/[collection]/[id].astro\",\n },\n ];\n\n for (const page of pages) {\n const pattern = `${basePath}${page.pattern}`.replace(/\\/$/, \"\");\n injectRoute({\n pattern: pattern || \"/\",\n entrypoint: path.resolve(\n new URL(\".\", import.meta.url).pathname,\n page.entrypoint,\n ),\n });\n }\n },\n \"astro:build:done\": ({ logger }) => {\n logger.info(\"Kyro Admin build complete\");\n },\n },\n };\n}\n"]}