@mdxui/do 3.0.0 → 4.0.0
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/README.md +80 -275
- package/dist/app/index.d.ts +125 -125
- package/dist/app/index.js +8 -7
- package/dist/breadcrumbs-C9Qn3S7d.d.ts +81 -0
- package/dist/capnweb-client-Bq78FtEA.d.ts +229 -0
- package/dist/chunk-3XKYQRXY.js +192 -0
- package/dist/chunk-3XKYQRXY.js.map +1 -0
- package/dist/{chunk-JWKIONEO.js → chunk-5SHZZC7L.js} +3 -3
- package/dist/{chunk-JWKIONEO.js.map → chunk-5SHZZC7L.js.map} +1 -1
- package/dist/{chunk-YGIBMNRH.js → chunk-7UFINK3Q.js} +30 -27
- package/dist/chunk-7UFINK3Q.js.map +1 -0
- package/dist/{chunk-5AWTQDRF.js → chunk-JJLAES6W.js} +2 -2
- package/dist/{chunk-5AWTQDRF.js.map → chunk-JJLAES6W.js.map} +1 -1
- package/dist/{chunk-NTSEARBC.js → chunk-KT52UU3U.js} +473 -203
- package/dist/chunk-KT52UU3U.js.map +1 -0
- package/dist/{chunk-EQVOEEQO.js → chunk-LJIWB7KE.js} +2 -2
- package/dist/{chunk-EQVOEEQO.js.map → chunk-LJIWB7KE.js.map} +1 -1
- package/dist/{chunk-IESVTECE.js → chunk-NA652ART.js} +64 -4
- package/dist/chunk-NA652ART.js.map +1 -0
- package/dist/chunk-OVLO7UOH.js +1071 -0
- package/dist/chunk-OVLO7UOH.js.map +1 -0
- package/dist/chunk-WMNT4OIE.js +249 -0
- package/dist/chunk-WMNT4OIE.js.map +1 -0
- package/dist/components/index.d.ts +20 -1
- package/dist/components/index.js +2 -1
- package/dist/{config-CmZBQQaT.d.ts → config-CxvpD8Y6.d.ts} +2 -13
- package/dist/{do-C-t9UgjT.d.ts → do-D27i5bU0.d.ts} +2 -1
- package/dist/{errors-B4Oyyj4Z.d.ts → errors-DratdVIz.d.ts} +1 -1
- package/dist/hooks/index.d.ts +30 -3
- package/dist/hooks/index.js +4 -4
- package/dist/hooks/things/index.d.ts +2 -2
- package/dist/hooks/things/index.js +3 -3
- package/dist/index.d.ts +76 -14
- package/dist/index.js +9 -8
- package/dist/lib/index.d.ts +703 -5
- package/dist/lib/index.js +2 -2
- package/dist/providers/index.d.ts +7 -123
- package/dist/providers/index.js +2 -2
- package/dist/{query-keys-BC901wog.d.ts → query-keys-CZNFikIi.d.ts} +3 -3
- package/dist/schemas/index.d.ts +5 -5
- package/dist/{thing-BVhCTzOi.d.ts → thing-BF25aUtJ.d.ts} +68 -68
- package/dist/types/index.d.ts +445 -445
- package/dist/views/index.d.ts +1 -1
- package/dist/views/index.js +6 -6
- package/package.json +2 -2
- package/dist/chunk-FO3N7SXV.js +0 -469
- package/dist/chunk-FO3N7SXV.js.map +0 -1
- package/dist/chunk-IESVTECE.js.map +0 -1
- package/dist/chunk-NTSEARBC.js.map +0 -1
- package/dist/chunk-OWEAW4U6.js +0 -116
- package/dist/chunk-OWEAW4U6.js.map +0 -1
- package/dist/chunk-YGIBMNRH.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/views/data-browser/CreateDialog.tsx","../src/views/utils/date-formatting.ts","../src/views/utils/export.ts","../src/views/data-browser/DetailSheet.tsx","../src/views/DataBrowserView.tsx","../src/views/DataGridView.tsx","../src/views/DocumentEditorView.tsx","../src/views/FunctionEditorView.tsx"],"names":["React","React2","jsx","jsxs","Input","Textarea","Button","React3","Badge","Tooltip","TooltipTrigger","TooltipContent","Fragment","schema","React5","TooltipProvider","React6","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","Toaster"],"mappings":"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","file":"chunk-7UFINK3Q.js","sourcesContent":["'use client'\n\n/**\n * CreateDialog Component\n *\n * Dialog for creating new Things.\n */\n\nimport * as React from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n} from '@mdxui/primitives'\nimport { useCreateThing } from '../../hooks'\nimport type { CreateDialogProps } from './types'\n\nexport function CreateDialog({\n open,\n onOpenChange,\n namespace,\n defaultType,\n types,\n onCreated,\n}: CreateDialogProps) {\n const [selectedType, setSelectedType] = React.useState(defaultType ?? '')\n const [name, setName] = React.useState('')\n const [dataJson, setDataJson] = React.useState('{}')\n const [jsonError, setJsonError] = React.useState<string | null>(null)\n\n const createMutation = useCreateThing()\n\n // Reset form when dialog opens\n React.useEffect(() => {\n if (open) {\n setSelectedType(defaultType ?? '')\n setName('')\n setDataJson('{}')\n setJsonError(null)\n }\n }, [open, defaultType])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setJsonError(null)\n\n // Validate JSON\n let parsedData: Record<string, unknown>\n try {\n parsedData = JSON.parse(dataJson)\n } catch {\n setJsonError('Invalid JSON format')\n return\n }\n\n try {\n const result = await createMutation.mutateAsync({\n ns: namespace,\n type: selectedType,\n name: name.trim(),\n data: parsedData,\n })\n\n onCreated?.(result)\n onOpenChange(false)\n } catch (error) {\n console.error('Failed to create thing:', error)\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Create New Thing</DialogTitle>\n <DialogDescription>\n Create a new thing in namespace \"{namespace}\"\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"type\">Type</Label>\n <Select value={selectedType} onValueChange={setSelectedType}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select a type\" />\n </SelectTrigger>\n <SelectContent>\n {types.map((type) => (\n <SelectItem key={type.id} value={type.name}>\n {type.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"name\">Name</Label>\n <Input\n id=\"name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Enter a name\"\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"data\">Data (JSON)</Label>\n <Textarea\n id=\"data\"\n value={dataJson}\n onChange={(e) => {\n setDataJson(e.target.value)\n setJsonError(null)\n }}\n placeholder='{\"key\": \"value\"}'\n className=\"font-mono text-sm min-h-[100px]\"\n />\n {jsonError && <p className=\"text-sm text-destructive\">{jsonError}</p>}\n </div>\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={!selectedType || !name.trim() || createMutation.isLoading}\n >\n {createMutation.isLoading ? 'Creating...' : 'Create'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","/**\n * Date Formatting Utilities\n */\n\n/**\n * Check if a string is an ISO date string\n */\nexport function isISODateString(value: string): boolean {\n if (typeof value !== 'string') return false\n const date = new Date(value)\n return !isNaN(date.getTime()) && value.includes('T')\n}\n\n/**\n * Format a date value for display\n */\nexport function formatDate(dateValue: Date | string): {\n date: string\n time: string\n relative: string\n} {\n const date = typeof dateValue === 'string' ? new Date(dateValue) : dateValue\n const now = new Date()\n const diffMs = now.getTime() - date.getTime()\n const diffMins = Math.floor(diffMs / 60000)\n const diffHours = Math.floor(diffMins / 60)\n const diffDays = Math.floor(diffHours / 24)\n\n let relative: string\n if (diffMins < 1) relative = 'Just now'\n else if (diffMins < 60) relative = `${diffMins} minute${diffMins !== 1 ? 's' : ''} ago`\n else if (diffHours < 24) relative = `${diffHours} hour${diffHours !== 1 ? 's' : ''} ago`\n else if (diffDays < 7) relative = `${diffDays} day${diffDays !== 1 ? 's' : ''} ago`\n else\n relative = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n\n return {\n date: date.toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }),\n time: date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n }),\n relative,\n }\n}\n\n/**\n * Format a field name for display (camelCase/snake_case to Title Case)\n */\nexport function formatFieldName(key: string): string {\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/_/g, ' ')\n .replace(/^./, (str) => str.toUpperCase())\n .trim()\n}\n","/**\n * Export Utilities\n */\n\n/**\n * Export data as a JSON file download\n */\nexport function exportToJSON(data: Record<string, unknown>[], filename: string): void {\n const json = JSON.stringify(data, null, 2)\n const blob = new Blob([json], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = `${filename}.json`\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n}\n","'use client'\n\n/**\n * DetailSheet Component\n *\n * Sheet panel for viewing and editing Thing details.\n */\n\nimport * as React from 'react'\nimport {\n Badge,\n Button,\n Input,\n ScrollArea,\n Sheet,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n Textarea,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@mdxui/primitives'\nimport { Calendar, Clock, Copy, ExternalLink, Hash, Pencil, Save } from 'lucide-react'\nimport type { DetailSheetProps } from './types'\nimport type { ThingUpdateInput } from '../../types'\nimport { formatDate, formatFieldName, isISODateString } from '../utils'\n\nexport function DetailSheet({ open, onOpenChange, thing, onEdit, onSave }: DetailSheetProps) {\n const [isEditing, setIsEditing] = React.useState(false)\n const [editedName, setEditedName] = React.useState('')\n const [editedDataJson, setEditedDataJson] = React.useState('')\n const [jsonError, setJsonError] = React.useState<string | null>(null)\n const [isSaving, setIsSaving] = React.useState(false)\n\n // Reset edit state when thing changes or dialog closes\n React.useEffect(() => {\n if (thing && open) {\n setEditedName(thing.name)\n setEditedDataJson(JSON.stringify(thing.data ?? {}, null, 2))\n setJsonError(null)\n }\n if (!open) {\n setIsEditing(false)\n }\n }, [thing, open])\n\n const handleStartEdit = () => {\n if (thing) {\n setEditedName(thing.name)\n setEditedDataJson(JSON.stringify(thing.data ?? {}, null, 2))\n setJsonError(null)\n setIsEditing(true)\n }\n }\n\n const handleCancelEdit = () => {\n if (thing) {\n setEditedName(thing.name)\n setEditedDataJson(JSON.stringify(thing.data ?? {}, null, 2))\n setJsonError(null)\n }\n setIsEditing(false)\n }\n\n const handleSave = async () => {\n if (!thing || !onSave) return\n\n setJsonError(null)\n let parsedData: Record<string, unknown>\n try {\n parsedData = JSON.parse(editedDataJson)\n } catch {\n setJsonError('Invalid JSON format')\n return\n }\n\n const updates: ThingUpdateInput = {}\n if (editedName !== thing.name) {\n updates.name = editedName\n }\n if (JSON.stringify(parsedData) !== JSON.stringify(thing.data)) {\n updates.data = parsedData\n }\n\n if (Object.keys(updates).length === 0) {\n setIsEditing(false)\n return\n }\n\n setIsSaving(true)\n try {\n await onSave(thing, updates)\n setIsEditing(false)\n } catch (error) {\n console.error('Failed to save:', error)\n } finally {\n setIsSaving(false)\n }\n }\n\n if (!thing) return null\n\n const renderValue = (_key: string, value: unknown): React.ReactNode => {\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground italic text-sm\">null</span>\n }\n\n if (typeof value === 'boolean') {\n return <Badge variant={value ? 'default' : 'secondary'}>{value ? 'Yes' : 'No'}</Badge>\n }\n\n if (Array.isArray(value)) {\n return (\n <div className=\"flex flex-wrap gap-1.5\">\n {value.map((v, i) => (\n <Badge key={String(i)} variant=\"outline\" className=\"text-xs font-normal\">\n {String(v)}\n </Badge>\n ))}\n </div>\n )\n }\n\n if (typeof value === 'object') {\n return (\n <pre className=\"text-xs bg-muted/50 p-3 rounded-[var(--radius)] overflow-auto max-h-48 font-mono\">\n {JSON.stringify(value, null, 2)}\n </pre>\n )\n }\n\n if (\n typeof value === 'string' &&\n (value.startsWith('http://') || value.startsWith('https://'))\n ) {\n return (\n <a\n href={value}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline inline-flex items-center gap-1.5 break-all\"\n >\n {value}\n <ExternalLink className=\"h-3 w-3 shrink-0\" />\n </a>\n )\n }\n\n if (typeof value === 'string' && isISODateString(value)) {\n const formatted = formatDate(value)\n return (\n <div className=\"flex flex-col gap-0.5\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Calendar className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <span>{formatted.date}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Clock className=\"h-3.5 w-3.5\" />\n <span>{formatted.time}</span>\n <span className=\"text-xs\">({formatted.relative})</span>\n </div>\n </div>\n )\n }\n\n if (value instanceof Date) {\n const formatted = formatDate(value)\n return (\n <div className=\"flex flex-col gap-0.5\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Calendar className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <span>{formatted.date}</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Clock className=\"h-3.5 w-3.5\" />\n <span>{formatted.time}</span>\n <span className=\"text-xs\">({formatted.relative})</span>\n </div>\n </div>\n )\n }\n\n if (typeof value === 'number') {\n return <span className=\"tabular-nums\">{value.toLocaleString()}</span>\n }\n\n return <span className=\"break-all\">{String(value)}</span>\n }\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-lg flex flex-col p-0\">\n <SheetHeader className=\"px-6 py-4 border-b bg-muted/30\">\n <div className=\"flex items-start justify-between gap-4 pr-8\">\n <div className=\"space-y-1 min-w-0\">\n {isEditing ? (\n <Input\n value={editedName}\n onChange={(e) => setEditedName(e.target.value)}\n className=\"text-lg font-semibold h-auto py-1\"\n />\n ) : (\n <SheetTitle className=\"text-lg truncate\">{thing.name}</SheetTitle>\n )}\n <SheetDescription className=\"flex items-center gap-2\">\n <Hash className=\"h-3.5 w-3.5\" />\n <span className=\"font-mono text-xs\">{thing.id}</span>\n </SheetDescription>\n </div>\n <div className=\"flex items-center gap-2\">\n {isEditing && (\n <Badge variant=\"secondary\" className=\"shrink-0\">\n Editing\n </Badge>\n )}\n <Badge variant=\"outline\" className=\"capitalize shrink-0\">\n {thing.type}\n </Badge>\n </div>\n </div>\n </SheetHeader>\n\n <ScrollArea className=\"flex-1\">\n <div className=\"p-4 space-y-4\">\n {/* Core fields (read-only) */}\n <div className=\"flex flex-col gap-1.5 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Namespace\n </span>\n {renderValue('ns', thing.ns)}\n </div>\n <div className=\"flex flex-col gap-1.5 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Type\n </span>\n {renderValue('type', thing.type)}\n </div>\n <div className=\"flex flex-col gap-1.5 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Created\n </span>\n {renderValue('createdAt', thing.createdAt)}\n </div>\n <div className=\"flex flex-col gap-1.5 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Updated\n </span>\n {renderValue('updatedAt', thing.updatedAt)}\n </div>\n\n {/* Data fields */}\n {isEditing ? (\n <div className=\"flex flex-col gap-1.5 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Data (JSON)\n </span>\n <Textarea\n value={editedDataJson}\n onChange={(e) => {\n setEditedDataJson(e.target.value)\n setJsonError(null)\n }}\n className=\"font-mono text-sm min-h-[200px]\"\n />\n {jsonError && <p className=\"text-sm text-destructive\">{jsonError}</p>}\n </div>\n ) : (\n thing.data &&\n Object.entries(thing.data)\n .filter(([key]) => !key.startsWith('@'))\n .map(([key, value]) => (\n <div key={key} className=\"flex flex-col gap-1.5 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {formatFieldName(key)}\n </span>\n {renderValue(key, value)}\n </div>\n ))\n )}\n </div>\n </ScrollArea>\n\n <SheetFooter className=\"border-t px-6 py-4 bg-muted/30\">\n <div className=\"flex w-full items-center justify-between gap-3\">\n {isEditing ? (\n <>\n <Button variant=\"outline\" size=\"sm\" onClick={handleCancelEdit} disabled={isSaving}>\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleSave}\n disabled={isSaving || !editedName.trim()}\n className=\"gap-2\"\n >\n {isSaving ? (\n <>Saving...</>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save\n </>\n )}\n </Button>\n </>\n ) : (\n <>\n <div className=\"flex items-center gap-2\">\n {onSave && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-2\"\n onClick={handleStartEdit}\n >\n <Pencil className=\"h-4 w-4\" />\n Edit\n </Button>\n )}\n {onEdit && !onSave && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-2\"\n onClick={() => onEdit(thing)}\n >\n <Pencil className=\"h-4 w-4\" />\n Edit\n </Button>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n navigator.clipboard.writeText(JSON.stringify(thing, null, 2))\n }}\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Copy as JSON</TooltipContent>\n </Tooltip>\n </div>\n <Button variant=\"secondary\" size=\"sm\" onClick={() => onOpenChange(false)}>\n Close\n </Button>\n </>\n )}\n </div>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n )\n}\n","\"use client\";\n\n/**\n * DataBrowserView\n *\n * Browse and search Things with multiple view options (list, table, card, code).\n * Uses @mdxui/admin data-browser and data-views components.\n *\n * Matches the full-experience pattern from @mdxui/admin stories.\n */\n\nimport * as React from \"react\";\nimport {\n\tQuerySearch,\n\tparseQuery,\n\tapplyQueryFilter,\n\tViewSwitcher,\n\tDatabaseListView,\n\tDatabaseTableView,\n\tDatabaseCardView,\n\tDatabaseCodeView,\n\tDataSidebar,\n\tDataSidebarTrigger,\n\tDataFilterPopover,\n\ttype ViewType,\n\ttype DatabaseFieldConfig,\n\ttype DataSidebarItem,\n\ttype DataFilterCondition,\n} from \"@mdxui/admin\";\nimport {\n\tButton,\n\tBadge,\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n\tTooltipProvider,\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n\tAlertDialogTrigger,\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from \"@mdxui/primitives\";\nimport {\n\tRefreshCw,\n\tTrash2,\n\tX,\n\tPlus,\n\tDownload,\n\tColumns3,\n\tMoreVertical,\n\tShapes,\n} from \"lucide-react\";\nimport { cn } from \"../lib\";\nimport { useDO } from \"../providers/do-provider\";\nimport { useThings, useTypes, useNamespaces } from \"../hooks\";\nimport type { Thing, ThingFilter, ThingUpdateInput } from \"../types\";\n\n// Extracted components (domain-specific, kept local)\nimport {\n\tCreateDialog,\n\tDetailSheet,\n} from \"./data-browser\";\nimport { exportToJSON } from \"./utils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DataBrowserViewProps {\n\t/** Initial namespace */\n\tinitialNamespace?: string;\n\t/** Initial type filter */\n\tinitialType?: string;\n\t/** Callback when a Thing is selected */\n\tonSelect?: (thing: Thing) => void;\n\t/** Callback when a Thing is double-clicked (e.g., to edit) */\n\tonOpen?: (thing: Thing) => void;\n\t/** Custom className */\n\tclassName?: string;\n}\n\n// ============================================================================\n// View Configurations\n// ============================================================================\n\nfunction getTableColumns(): DatabaseFieldConfig[] {\n\treturn [\n\t\t{ accessorKey: \"name\", header: \"Name\", type: \"text\" },\n\t\t{ accessorKey: \"type\", header: \"Type\", type: \"text\" },\n\t\t{ accessorKey: \"createdAt\", header: \"Created\", type: \"date\" },\n\t\t{ accessorKey: \"updatedAt\", header: \"Updated\", type: \"date\" },\n\t];\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function DataBrowserView({\n\tinitialNamespace,\n\tinitialType,\n\tonSelect,\n\tonOpen,\n\tclassName,\n}: DataBrowserViewProps) {\n\tconst { namespace: contextNamespace, client } = useDO();\n\n\t// State\n\tconst selectedNamespace = initialNamespace ?? contextNamespace;\n\tconst [selectedType, setSelectedType] = React.useState<string | undefined>(\n\t\tinitialType,\n\t);\n\tconst [viewType, setViewType] = React.useState<ViewType>(\"table\");\n\tconst [searchQuery, setSearchQuery] = React.useState(\"\");\n\tconst [selectedIds, setSelectedIds] = React.useState<string[]>([]);\n\tconst [sidebarCollapsed, setSidebarCollapsed] = React.useState(false);\n\tconst [detailThing, setDetailThing] = React.useState<Thing | null>(null);\n\tconst [detailOpen, setDetailOpen] = React.useState(false);\n\tconst [recentQueries, setRecentQueries] = React.useState<string[]>([]);\n\n\t// New feature state\n\tconst [createDialogOpen, setCreateDialogOpen] = React.useState(false);\n\tconst [filterPopoverOpen, setFilterPopoverOpen] = React.useState(false);\n\tconst [filterConditions, setFilterConditions] = React.useState<\n\t\tDataFilterCondition[]\n\t>([]);\n\tconst [hiddenColumns, setHiddenColumns] = React.useState<Set<string>>(\n\t\tnew Set(),\n\t);\n\n\t// Data fetching\n\tconst { error: namespacesError } = useNamespaces();\n\tconst { data: types, error: typesError } = useTypes({ ns: selectedNamespace });\n\n\t// Build filter from state\n\tconst filter: ThingFilter = React.useMemo(() => {\n\t\tconst f: ThingFilter = { ns: selectedNamespace };\n\t\tif (selectedType) f.type = selectedType;\n\t\tif (searchQuery) f.nameSearch = searchQuery;\n\t\treturn f;\n\t}, [selectedNamespace, selectedType, searchQuery]);\n\n\tconst { data: thingsResult, isLoading, error: thingsError, refetch } = useThings(filter);\n\n\t// Combine errors for display\n\tconst connectionError = namespacesError || typesError || thingsError;\n\n\t// Parse query and apply filter\n\tconst queryConditions = React.useMemo(() => {\n\t\treturn parseQuery(searchQuery);\n\t}, [searchQuery]);\n\n\t// Convert Things to generic record format for views\n\tconst data: Record<string, unknown>[] = React.useMemo(() => {\n\t\tif (!thingsResult?.data) return [];\n\n\t\tlet filtered = thingsResult.data.map((thing) => ({\n\t\t\tid: thing.id,\n\t\t\tns: thing.ns,\n\t\t\ttype: thing.type,\n\t\t\tname: thing.name,\n\t\t\tcreatedAt: thing.createdAt,\n\t\t\tupdatedAt: thing.updatedAt,\n\t\t\t...thing.data,\n\t\t}));\n\n\t\t// Apply query conditions\n\t\tif (queryConditions.length > 0) {\n\t\t\tfiltered = applyQueryFilter(filtered, queryConditions) as typeof filtered;\n\t\t}\n\n\t\t// Apply filter conditions\n\t\tif (filterConditions.length > 0) {\n\t\t\tfiltered = filtered.filter((item) => {\n\t\t\t\treturn filterConditions.every((condition) => {\n\t\t\t\t\tconst fieldValue = item[condition.field as keyof typeof item];\n\t\t\t\t\tconst strValue = String(fieldValue ?? \"\").toLowerCase();\n\t\t\t\t\tconst conditionValue = condition.value.toLowerCase();\n\n\t\t\t\t\tswitch (condition.operator) {\n\t\t\t\t\t\tcase \"equals\":\n\t\t\t\t\t\t\treturn strValue === conditionValue;\n\t\t\t\t\t\tcase \"contains\":\n\t\t\t\t\t\t\treturn strValue.includes(conditionValue);\n\t\t\t\t\t\tcase \"startsWith\":\n\t\t\t\t\t\t\treturn strValue.startsWith(conditionValue);\n\t\t\t\t\t\tcase \"endsWith\":\n\t\t\t\t\t\t\treturn strValue.endsWith(conditionValue);\n\t\t\t\t\t\tcase \"isEmpty\":\n\t\t\t\t\t\t\treturn !fieldValue || strValue === \"\";\n\t\t\t\t\t\tcase \"isNotEmpty\":\n\t\t\t\t\t\t\treturn !!fieldValue && strValue !== \"\";\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn filtered;\n\t}, [thingsResult, queryConditions, filterConditions]);\n\n\t// Table columns with visibility support\n\tconst allTableColumns = React.useMemo(() => getTableColumns(), []);\n\tconst tableColumns = React.useMemo(\n\t\t() => allTableColumns.filter((col) => !hiddenColumns.has(col.accessorKey)),\n\t\t[allTableColumns, hiddenColumns],\n\t);\n\n\t// Queryable fields\n\tconst queryFields = React.useMemo(() => {\n\t\treturn [\"name\", \"type\", \"ns\", \"createdAt\", \"updatedAt\"];\n\t}, []);\n\n\t// Export handlers\n\tconst handleExportSelected = React.useCallback(() => {\n\t\tif (selectedIds.length === 0) return;\n\t\tconst exportData = data.filter((d) => selectedIds.includes(d.id as string));\n\t\tconst filename = `${selectedNamespace}-${selectedType ?? \"all\"}-selected-${new Date().toISOString().split(\"T\")[0]}`;\n\t\texportToJSON(exportData, filename);\n\t}, [data, selectedIds, selectedNamespace, selectedType]);\n\n\tconst handleExportAll = React.useCallback(() => {\n\t\tconst filename = `${selectedNamespace}-${selectedType ?? \"all\"}-${new Date().toISOString().split(\"T\")[0]}`;\n\t\texportToJSON(data, filename);\n\t}, [data, selectedNamespace, selectedType]);\n\n\t// Save handler for detail sheet edit\n\tconst handleSaveThing = React.useCallback(\n\t\tasync (thing: Thing, updates: ThingUpdateInput) => {\n\t\t\t// Call the DO client directly since useUpdateThing requires params at hook time\n\t\t\tawait (client as unknown as { Thing: { update: (params: unknown) => Promise<unknown> } }).Thing.update({\n\t\t\t\tns: thing.ns,\n\t\t\t\ttype: thing.type,\n\t\t\t\tid: thing.id,\n\t\t\t\t...updates,\n\t\t\t});\n\t\t\t// Refresh the data\n\t\t\tawait refetch();\n\t\t\t// Update the detail thing if it's still the same\n\t\t\tif (detailThing?.id === thing.id) {\n\t\t\t\tconst updated = thingsResult?.data?.find((t) => t.id === thing.id);\n\t\t\t\tif (updated) {\n\t\t\t\t\tsetDetailThing(updated);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[client, refetch, detailThing, thingsResult],\n\t);\n\n\t// Handlers\n\tconst handleItemClick = React.useCallback(\n\t\t(item: Record<string, unknown>) => {\n\t\t\tconst thing = thingsResult?.data?.find((t) => t.id === item.id);\n\t\t\tif (thing) {\n\t\t\t\tsetDetailThing(thing);\n\t\t\t\tsetDetailOpen(true);\n\t\t\t\tonSelect?.(thing);\n\t\t\t}\n\t\t},\n\t\t[thingsResult, onSelect],\n\t);\n\n\tconst handleClearSelection = React.useCallback(() => {\n\t\tsetSelectedIds([]);\n\t}, []);\n\n\tconst handleSelectRecentQuery = React.useCallback((query: string) => {\n\t\tsetRecentQueries((prev) => {\n\t\t\tconst filtered = prev.filter((q) => q !== query);\n\t\t\treturn [query, ...filtered].slice(0, 10);\n\t\t});\n\t\tsetSearchQuery(query);\n\t}, []);\n\n\t// Auto-collapse sidebar on medium screens\n\tReact.useEffect(() => {\n\t\tconst mediaQuery = window.matchMedia(\"(max-width: 768px)\");\n\t\tconst handleMediaChange = (e: MediaQueryListEvent | MediaQueryList) => {\n\t\t\tif (e.matches) {\n\t\t\t\tsetSidebarCollapsed(true);\n\t\t\t}\n\t\t};\n\t\thandleMediaChange(mediaQuery);\n\t\tmediaQuery.addEventListener(\"change\", handleMediaChange);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", handleMediaChange);\n\t}, []);\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<div className={cn(\"flex h-full bg-background\", className)}>\n\t\t\t\t{/* Type Sidebar */}\n\t\t\t\t<DataSidebar\n\t\t\t\t\ttitle=\"Types\"\n\t\t\t\t\titems={types?.map(\n\t\t\t\t\t\t(t): DataSidebarItem => ({\n\t\t\t\t\t\t\tid: t.id,\n\t\t\t\t\t\t\tname: t.name,\n\t\t\t\t\t\t\tlabel: t.label,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)}\n\t\t\t\t\tselectedItem={selectedType}\n\t\t\t\t\tonSelectItem={setSelectedType}\n\t\t\t\t\tcollapsed={sidebarCollapsed}\n\t\t\t\t\tonCollapsedChange={setSidebarCollapsed}\n\t\t\t\t\tallItemsLabel=\"All Types\"\n\t\t\t\t\temptyMessage=\"No types found\"\n\t\t\t\t/>\n\n\t\t\t\t{/* Main Content */}\n\t\t\t\t<div className=\"flex flex-1 flex-col overflow-hidden\">\n\t\t\t\t\t{/* Header Toolbar */}\n\t\t\t\t\t<header className=\"flex h-12 shrink-0 items-center gap-3 border-b px-4\">\n\t\t\t\t\t\t{/* Left: Sidebar toggle + Source Info */}\n\t\t\t\t\t\t<div className=\"flex items-center gap-2 shrink-0\">\n\t\t\t\t\t\t\t<DataSidebarTrigger\n\t\t\t\t\t\t\t\tcollapsed={sidebarCollapsed}\n\t\t\t\t\t\t\t\tonToggle={() => setSidebarCollapsed(!sidebarCollapsed)}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<Shapes className=\"h-4 w-4 text-muted-foreground hidden sm:block\" />\n\t\t\t\t\t\t\t<span className=\"text-sm font-semibold hidden sm:inline\">\n\t\t\t\t\t\t\t\t{selectedType ?? \"All Things\"}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Spacer */}\n\t\t\t\t\t\t<div className=\"hidden sm:flex flex-1\" />\n\n\t\t\t\t\t\t{/* Center: QuerySearch */}\n\t\t\t\t\t\t<QuerySearch\n\t\t\t\t\t\t\tquery={searchQuery}\n\t\t\t\t\t\t\tonQueryChange={setSearchQuery}\n\t\t\t\t\t\t\tconditions={queryConditions}\n\t\t\t\t\t\t\tfields={queryFields}\n\t\t\t\t\t\t\trecentQueries={recentQueries}\n\t\t\t\t\t\t\tonSelectRecentQuery={handleSelectRecentQuery}\n\t\t\t\t\t\t\tplaceholder=\"Search... (e.g., type: User)\"\n\t\t\t\t\t\t\tclassName=\"flex-1 min-w-0 sm:w-64 sm:flex-none md:w-80 lg:w-[480px]\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Spacer */}\n\t\t\t\t\t\t<div className=\"hidden sm:flex flex-1\" />\n\n\t\t\t\t\t\t{/* Selection Info */}\n\t\t\t\t\t\t{selectedIds.length > 0 && (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-2 animate-in fade-in-0 slide-in-from-left-2 duration-200 shrink-0\">\n\t\t\t\t\t\t\t\t<Badge variant=\"secondary\" className=\"gap-1 pl-2 pr-1\">\n\t\t\t\t\t\t\t\t\t<span className=\"tabular-nums\">{selectedIds.length}</span>\n\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">selected</span>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleClearSelection}\n\t\t\t\t\t\t\t\t\t\tclassName=\"ml-0.5 rounded-sm p-0.5 hover:bg-muted-foreground/20 transition-colors\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</Badge>\n\n\t\t\t\t\t\t\t\t{/* Bulk Delete */}\n\t\t\t\t\t\t\t\t<AlertDialog>\n\t\t\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t\t\t\t<AlertDialogTrigger asChild>\n\t\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" className=\"h-7 w-7\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"h-4 w-4 text-destructive\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t</AlertDialogTrigger>\n\t\t\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t\t\t<TooltipContent>Delete selected</TooltipContent>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t<AlertDialogContent>\n\t\t\t\t\t\t\t\t\t\t<AlertDialogHeader>\n\t\t\t\t\t\t\t\t\t\t\t<AlertDialogTitle>\n\t\t\t\t\t\t\t\t\t\t\t\tDelete {selectedIds.length} item\n\t\t\t\t\t\t\t\t\t\t\t\t{selectedIds.length !== 1 ? \"s\" : \"\"}?\n\t\t\t\t\t\t\t\t\t\t\t</AlertDialogTitle>\n\t\t\t\t\t\t\t\t\t\t\t<AlertDialogDescription>\n\t\t\t\t\t\t\t\t\t\t\t\tThis action cannot be undone. The selected items will be\n\t\t\t\t\t\t\t\t\t\t\t\tpermanently removed.\n\t\t\t\t\t\t\t\t\t\t\t</AlertDialogDescription>\n\t\t\t\t\t\t\t\t\t\t</AlertDialogHeader>\n\t\t\t\t\t\t\t\t\t\t<AlertDialogFooter>\n\t\t\t\t\t\t\t\t\t\t\t<AlertDialogCancel>Cancel</AlertDialogCancel>\n\t\t\t\t\t\t\t\t\t\t\t<AlertDialogAction\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst thingsToDelete =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthingsResult?.data?.filter((t) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectedIds.includes(t.id),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) ?? [];\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthingsToDelete.map((thing) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclient as unknown as {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tThing: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdelete: (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tparams: unknown,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) => Promise<unknown>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).Thing.delete({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tns: thing.ns,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: thing.type,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: thing.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetSelectedIds([]);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tawait refetch();\n\t\t\t\t\t\t\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.error(\"Failed to delete:\", err);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t\t\t\t\t\t</AlertDialogAction>\n\t\t\t\t\t\t\t\t\t\t</AlertDialogFooter>\n\t\t\t\t\t\t\t\t\t</AlertDialogContent>\n\t\t\t\t\t\t\t\t</AlertDialog>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* View Switcher */}\n\t\t\t\t\t\t<ViewSwitcher\n\t\t\t\t\t\t\tcurrentView={viewType}\n\t\t\t\t\t\t\tonViewChange={setViewType}\n\t\t\t\t\t\t\tavailableViews={[\"list\", \"table\", \"card\", \"code\"]}\n\t\t\t\t\t\t\tclassName=\"hidden sm:inline-flex\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Divider */}\n\t\t\t\t\t\t<div className=\"hidden sm:block h-4 w-px bg-border\" />\n\n\t\t\t\t\t\t{/* Filter Popover (icon-only with badge) */}\n\t\t\t\t\t\t<DataFilterPopover\n\t\t\t\t\t\t\topen={filterPopoverOpen}\n\t\t\t\t\t\t\tonOpenChange={setFilterPopoverOpen}\n\t\t\t\t\t\t\tconditions={filterConditions}\n\t\t\t\t\t\t\tonConditionsChange={setFilterConditions}\n\t\t\t\t\t\t\tavailableFields={queryFields}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Column Visibility (table view only, icon-only with badge) */}\n\t\t\t\t\t\t{viewType === \"table\" && (\n\t\t\t\t\t\t\t<DropdownMenu>\n\t\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-7 w-7 relative\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Columns3 className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t{hiddenColumns.size > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"absolute -right-1 -top-1 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-[10px] text-primary-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{hiddenColumns.size}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t\t<TooltipContent>Columns</TooltipContent>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t<DropdownMenuContent align=\"end\" className=\"w-48\">\n\t\t\t\t\t\t\t\t\t<DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n\t\t\t\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t\t\t\t{allTableColumns.map((column) => (\n\t\t\t\t\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\t\t\t\t\tkey={column.accessorKey}\n\t\t\t\t\t\t\t\t\t\t\tchecked={!hiddenColumns.has(column.accessorKey)}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetHiddenColumns((prev) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (checked) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnext.delete(column.accessorKey);\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnext.add(column.accessorKey);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.header}\n\t\t\t\t\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t\t\t\t</DropdownMenu>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Add Button */}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tclassName=\"gap-1.5 px-3 hidden sm:inline-flex\"\n\t\t\t\t\t\t\tonClick={() => setCreateDialogOpen(true)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Plus className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t<span>Add</span>\n\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t{/* More Actions (Export, Refresh) */}\n\t\t\t\t\t\t<DropdownMenu>\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" className=\"h-7 w-7\">\n\t\t\t\t\t\t\t\t\t\t\t<MoreVertical className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t<TooltipContent>More actions</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<DropdownMenuContent align=\"end\">\n\t\t\t\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\t\t\t\tdisabled={selectedIds.length === 0}\n\t\t\t\t\t\t\t\t\tonClick={handleExportSelected}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Download className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t\t\t\tExport selected ({selectedIds.length})\n\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t<DropdownMenuItem onClick={handleExportAll}>\n\t\t\t\t\t\t\t\t\t<Download className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t\t\t\tExport all ({data.length})\n\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t\t\t<DropdownMenuItem onClick={() => refetch()}>\n\t\t\t\t\t\t\t\t\t<RefreshCw className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t\t\t\tRefresh data\n\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t\t\t</DropdownMenu>\n\t\t\t\t\t</header>\n\n\t\t\t\t\t{/* View Content */}\n\t\t\t\t\t<div className=\"flex min-h-0 flex-1 flex-col overflow-hidden p-2\">\n\t\t\t\t\t\t{connectionError ? (\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-center h-full\">\n\t\t\t\t\t\t\t\t<div className=\"text-center max-w-md p-6\">\n\t\t\t\t\t\t\t\t\t<div className=\"mx-auto mb-4 h-12 w-12 rounded-full bg-destructive/10 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t\t\t<X className=\"h-6 w-6 text-destructive\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<h3 className=\"font-semibold text-lg mb-2\">\n\t\t\t\t\t\t\t\t\t\tConnection Error\n\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm mb-4\">\n\t\t\t\t\t\t\t\t\t\t{connectionError.message}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => refetch()}\n\t\t\t\t\t\t\t\t\t\tclassName=\"gap-2\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RefreshCw className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\tRetry\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : isLoading ? (\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-center h-full\">\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\tLoading...\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : data.length === 0 ? (\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-center h-full\">\n\t\t\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground\">No things found</p>\n\t\t\t\t\t\t\t\t\t{searchQuery && (\n\t\t\t\t\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground mt-1\">\n\t\t\t\t\t\t\t\t\t\t\tTry adjusting your search query\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{viewType === \"list\" && (\n\t\t\t\t\t\t\t\t\t<DatabaseListView\n\t\t\t\t\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\t\t\t\t\tdisplayFields={[\"name\", \"type\", \"ns\"]}\n\t\t\t\t\t\t\t\t\t\tprimaryField=\"name\"\n\t\t\t\t\t\t\t\t\t\tsecondaryField=\"type\"\n\t\t\t\t\t\t\t\t\t\tselectedIds={selectedIds}\n\t\t\t\t\t\t\t\t\t\tonSelectionChange={setSelectedIds}\n\t\t\t\t\t\t\t\t\t\tonRecordClick={handleItemClick}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{viewType === \"table\" && (\n\t\t\t\t\t\t\t\t\t<DatabaseTableView\n\t\t\t\t\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\t\t\t\t\tcolumns={tableColumns}\n\t\t\t\t\t\t\t\t\t\tonSelectionChange={setSelectedIds}\n\t\t\t\t\t\t\t\t\t\tonRowClick={handleItemClick}\n\t\t\t\t\t\t\t\t\t\tenableRowSelection\n\t\t\t\t\t\t\t\t\t\tenablePagination={false}\n\t\t\t\t\t\t\t\t\t\tenableColumnVisibility={false}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{viewType === \"card\" && (\n\t\t\t\t\t\t\t\t\t<div className=\"h-full overflow-auto p-2\">\n\t\t\t\t\t\t\t\t\t\t<DatabaseCardView\n\t\t\t\t\t\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\t\t\t\t\t\ttitleField=\"name\"\n\t\t\t\t\t\t\t\t\t\t\tdescriptionField=\"type\"\n\t\t\t\t\t\t\t\t\t\t\tbadgeFields={[\"ns\"]}\n\t\t\t\t\t\t\t\t\t\t\tonItemClick={handleItemClick}\n\t\t\t\t\t\t\t\t\t\t\tcolumns={3}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{viewType === \"code\" && (\n\t\t\t\t\t\t\t\t\t<DatabaseCodeView data={data} height=\"100%\" format=\"json\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Status bar */}\n\t\t\t\t\t<div className=\"flex items-center justify-between px-4 py-2 border-t border-border bg-muted/50 text-sm text-muted-foreground\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{thingsResult?.total ?? 0} items\n\t\t\t\t\t\t\t{selectedType && ` • Type: ${selectedType}`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\tPage {thingsResult?.page ?? 1} of {thingsResult?.totalPages ?? 1}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Detail Sheet */}\n\t\t\t\t<DetailSheet\n\t\t\t\t\topen={detailOpen}\n\t\t\t\t\tonOpenChange={setDetailOpen}\n\t\t\t\t\tthing={detailThing}\n\t\t\t\t\tonEdit={onOpen}\n\t\t\t\t\tonSave={handleSaveThing}\n\t\t\t\t/>\n\n\t\t\t\t{/* Create Dialog */}\n\t\t\t\t<CreateDialog\n\t\t\t\t\topen={createDialogOpen}\n\t\t\t\t\tonOpenChange={setCreateDialogOpen}\n\t\t\t\t\tnamespace={selectedNamespace}\n\t\t\t\t\tdefaultType={selectedType}\n\t\t\t\t\ttypes={types ?? []}\n\t\t\t\t\tonCreated={(thing) => {\n\t\t\t\t\t\trefetch();\n\t\t\t\t\t\tsetDetailThing(thing);\n\t\t\t\t\t\tsetDetailOpen(true);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</TooltipProvider>\n\t);\n}\n","'use client'\n\n/**\n * DataGridView\n *\n * Spreadsheet-style editing with schema-driven columns.\n * Uses @mdxui/admin database-editor components.\n *\n * Matches the full-experience pattern from @mdxui/admin stories.\n */\n\nimport * as React from 'react'\nimport {\n DatabaseGrid,\n DatabaseSidebar,\n TableEditorToolbar,\n QueryView,\n FormatView,\n useEditHistory,\n applyFilters,\n ColumnEditorPanel,\n TableCreatorPanel,\n type TableColumn,\n type NewTableDefinition,\n type DatabaseColumnDef,\n type DatabaseSchema,\n type DataGridViewMode,\n type RefreshStatus,\n type RefreshInterval,\n type ExportFormat,\n type FilterCondition,\n type ViewFormat,\n} from '@mdxui/admin'\nimport { Toaster } from '@mdxui/primitives'\nimport { toast } from 'sonner'\nimport { cn } from '../lib'\nimport { useDO } from '../providers/do-provider'\nimport { useThings, useTypes, useNamespaces } from '../hooks'\nimport type { Thing, ThingFilter } from '../types'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DataGridViewProps {\n /** Initial namespace */\n initialNamespace?: string\n /** Initial type */\n initialType?: string\n /** Read-only mode */\n readOnly?: boolean\n /** Callback when a row is selected */\n onRowSelect?: (thing: Thing | null) => void\n /** Custom className */\n className?: string\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Infer column data type from value\n */\nfunction inferDataType(value: unknown): DatabaseColumnDef['dataType'] {\n if (value === null || value === undefined) return 'text'\n if (typeof value === 'boolean') return 'boolean'\n if (typeof value === 'number') return 'number'\n if (value instanceof Date) return 'date'\n if (typeof value === 'string') {\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) return 'date'\n if (value.includes('@')) return 'email'\n }\n if (typeof value === 'object') return 'json'\n return 'text'\n}\n\n/**\n * Generate columns from Thing data\n */\nfunction generateColumns(things: Thing[]): DatabaseColumnDef[] {\n const columns: DatabaseColumnDef[] = [\n { accessorKey: 'id', header: 'ID', dataType: 'text', isPrimaryKey: true, editable: false },\n { accessorKey: 'name', header: 'Name', dataType: 'text' },\n { accessorKey: 'createdAt', header: 'Created', dataType: 'date', editable: false },\n { accessorKey: 'updatedAt', header: 'Updated', dataType: 'date', editable: false },\n ]\n\n // Collect all data keys from things with their types\n const dataKeys = new Map<string, DatabaseColumnDef['dataType']>()\n things.forEach((thing) => {\n if (thing.data && typeof thing.data === 'object') {\n Object.entries(thing.data).forEach(([key, value]) => {\n if (!key.startsWith('@') && !dataKeys.has(key)) {\n dataKeys.set(key, inferDataType(value))\n }\n })\n }\n })\n\n // Add data columns\n dataKeys.forEach((dataType, key) => {\n columns.push({\n accessorKey: key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n dataType,\n })\n })\n\n return columns\n}\n\n/**\n * Convert Thing to grid row format\n */\nfunction thingToRow(thing: Thing): Record<string, unknown> {\n return {\n id: thing.id,\n _ns: thing.ns,\n _type: thing.type,\n name: thing.name,\n createdAt: thing.createdAt,\n updatedAt: thing.updatedAt,\n ...thing.data,\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function DataGridView({\n initialNamespace,\n initialType,\n readOnly = false,\n onRowSelect: _onRowSelect,\n className,\n}: DataGridViewProps) {\n const { namespace: contextNamespace, client } = useDO()\n\n // State\n const [selectedNamespace, setSelectedNamespace] = React.useState(\n initialNamespace ?? contextNamespace\n )\n const [selectedType, setSelectedType] = React.useState<string | undefined>(initialType)\n const [selectedTable, setSelectedTable] = React.useState<string>(\n `${selectedNamespace}.${initialType ?? ''}`\n )\n const [sidebarCollapsed, setSidebarCollapsed] = React.useState(false)\n const [viewMode, setViewMode] = React.useState<DataGridViewMode>('table')\n const [formatViewFormat, _setFormatViewFormat] = React.useState<ViewFormat>('json')\n const [selectedRows, setSelectedRows] = React.useState<string[]>([])\n const [filters, setFilters] = React.useState<FilterCondition[]>([])\n const [hiddenColumns, setHiddenColumns] = React.useState<Set<string>>(new Set())\n\n // Refresh state\n const [refreshStatus, setRefreshStatus] = React.useState<RefreshStatus>('idle')\n const [autoRefreshEnabled, setAutoRefreshEnabled] = React.useState(false)\n const [autoRefreshInterval, setAutoRefreshInterval] = React.useState<RefreshInterval>(30)\n const [lastRefreshTime, setLastRefreshTime] = React.useState<Date | null>(null)\n\n // Panel states\n const [columnEditorOpen, setColumnEditorOpen] = React.useState(false)\n const [tableCreatorOpen, setTableCreatorOpen] = React.useState(false)\n const [editingColumn, setEditingColumn] = React.useState<TableColumn | undefined>()\n\n // Grid actions ref for triggering row insertion from toolbar\n const gridActionsRef = React.useRef<{ startNewRow: () => void } | null>(null)\n\n // Data state for editing\n const [localData, setLocalData] = React.useState<Record<string, unknown>[]>([])\n\n // Data fetching\n const { data: namespaces } = useNamespaces()\n const { data: types } = useTypes({ ns: selectedNamespace })\n\n // Build filter\n const filter: ThingFilter = React.useMemo(() => {\n const f: ThingFilter = { ns: selectedNamespace }\n if (selectedType) f.type = selectedType\n return f\n }, [selectedNamespace, selectedType])\n\n const { data: thingsResult, isLoading, refetch } = useThings(filter)\n\n // Sync local data with fetched data\n React.useEffect(() => {\n if (thingsResult?.data) {\n setLocalData(thingsResult.data.map(thingToRow))\n }\n }, [thingsResult])\n\n // Build schema structure for sidebar\n const schemas: DatabaseSchema[] = React.useMemo(() => {\n if (!namespaces || !types) return []\n\n return namespaces.map((ns) => ({\n name: ns.name,\n tables: types\n .filter((t) => t.namespace === ns.name)\n .map((t) => ({\n name: t.name,\n schema: ns.name,\n rowCount: 0, // We don't have row counts per type from the hook\n })),\n }))\n }, [namespaces, types])\n\n // Generate columns from data\n const columns = React.useMemo(() => {\n if (!thingsResult?.data || thingsResult.data.length === 0) {\n return [\n { accessorKey: 'id', header: 'ID', dataType: 'text' as const, isPrimaryKey: true, editable: false },\n { accessorKey: 'name', header: 'Name', dataType: 'text' as const },\n { accessorKey: 'createdAt', header: 'Created', dataType: 'date' as const },\n { accessorKey: 'updatedAt', header: 'Updated', dataType: 'date' as const },\n ]\n }\n return generateColumns(thingsResult.data)\n }, [thingsResult])\n\n // Visible columns (not hidden)\n const visibleColumns = React.useMemo(\n () => columns.filter((col) => !hiddenColumns.has(col.accessorKey)),\n [columns, hiddenColumns]\n )\n\n // Apply filters\n const filteredData = React.useMemo(\n () => applyFilters(localData, filters, columns),\n [localData, filters, columns]\n )\n\n // Edit history for undo/redo\n const {\n pushOperation,\n undo,\n redo,\n canUndo,\n canRedo,\n undoCount,\n redoCount,\n } = useEditHistory({\n onRedo: (operation) => {\n const { rowIndex, columnId, newValue } = operation\n setLocalData((prev) => {\n const newData = [...prev]\n newData[rowIndex] = { ...newData[rowIndex], [columnId]: newValue }\n return newData\n })\n },\n onUndo: (operation) => {\n const { rowIndex, columnId, oldValue } = operation\n setLocalData((prev) => {\n const newData = [...prev]\n newData[rowIndex] = { ...newData[rowIndex], [columnId]: oldValue }\n return newData\n })\n },\n })\n\n // Handlers\n const handleSelectTable = React.useCallback((schema: string, table: string) => {\n setSelectedNamespace(schema)\n setSelectedType(table)\n setSelectedTable(`${schema}.${table}`)\n setSelectedRows([])\n setFilters([])\n }, [])\n\n // Column editor handlers\n const handleAddColumn = React.useCallback(() => {\n setEditingColumn(undefined)\n setColumnEditorOpen(true)\n }, [])\n\n const handleSaveColumn = React.useCallback(\n async (column: TableColumn) => {\n if (!selectedType) return\n\n try {\n // Build SQL DDL\n const nullable = column.isNullable ? '' : 'NOT NULL'\n const defaultVal = column.defaultValue\n ? `DEFAULT ${column.isDefaultExpression ? column.defaultValue : `'${column.defaultValue}'`}`\n : ''\n const unique = column.isUnique ? 'UNIQUE' : ''\n\n const sql = editingColumn\n ? `ALTER TABLE ${selectedType} RENAME COLUMN ${editingColumn.name} TO ${column.name}`\n : `ALTER TABLE ${selectedType} ADD COLUMN ${column.name} ${column.dataType} ${nullable} ${defaultVal} ${unique}`\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).SQL.execute({ query: sql.trim() })\n\n setColumnEditorOpen(false)\n toast.success(`Column \"${column.name}\" ${editingColumn ? 'updated' : 'created'}`)\n await refetch()\n } catch (err) {\n toast.error(`Failed to save column: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n },\n [selectedType, editingColumn, client, refetch]\n )\n\n const handleDeleteColumn = React.useCallback(async () => {\n if (!selectedType || !editingColumn) return\n\n try {\n // SQLite doesn't support DROP COLUMN easily, but we can try\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).SQL.execute({\n query: `ALTER TABLE ${selectedType} DROP COLUMN ${editingColumn.name}`,\n })\n setColumnEditorOpen(false)\n toast.success(`Column \"${editingColumn.name}\" deleted`)\n await refetch()\n } catch (err) {\n toast.error(`Failed to delete column: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n }, [selectedType, editingColumn, client, refetch])\n\n // Table creator handler\n const handleCreateTable = React.useCallback(\n async (table: NewTableDefinition) => {\n try {\n // Build column definitions\n const columnDefs = table.columns\n .map((col) => {\n const nullable = col.isNullable ? '' : 'NOT NULL'\n const pk = col.isPrimaryKey ? 'PRIMARY KEY' : ''\n const defaultVal = col.defaultValue ? `DEFAULT '${col.defaultValue}'` : ''\n return `${col.name} ${col.dataType} ${pk} ${nullable} ${defaultVal}`.trim()\n })\n .join(', ')\n\n const sql = `CREATE TABLE ${table.name} (${columnDefs})`\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).SQL.execute({ query: sql })\n\n setTableCreatorOpen(false)\n toast.success(`Table \"${table.name}\" created`)\n // Refresh types list\n await refetch()\n } catch (err) {\n toast.error(`Failed to create table: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n },\n [client, refetch]\n )\n\n const handleCellUpdate = React.useCallback(\n async (rowIndex: number, columnId: string, value: unknown) => {\n if (readOnly || !selectedType) return\n\n const row = localData[rowIndex]\n const oldValue = row?.[columnId]\n const rowId = row?.id as string\n\n // Optimistic local update\n pushOperation({ rowIndex, columnId, oldValue, newValue: value, type: 'cell_update' })\n\n try {\n // Persist via Thing.update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).Thing.update({\n ns: selectedNamespace,\n type: selectedType,\n id: rowId,\n data: { [columnId]: value },\n })\n toast.success('Cell updated')\n } catch (err) {\n // Rollback on failure\n undo()\n toast.error(`Failed to save cell: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n },\n [readOnly, selectedType, selectedNamespace, localData, pushOperation, undo, client]\n )\n\n const handleInsert = React.useCallback(\n async (newRow: Record<string, unknown>) => {\n if (readOnly || !selectedType) return\n\n try {\n // Extract name from row data, or generate a default\n const name = (newRow.name as string) || `New ${selectedType}`\n\n // Clean up data - remove null/undefined values and system fields\n // The backend will auto-generate id, createdAt, updatedAt\n const cleanData: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(newRow)) {\n // Skip system fields and null/undefined values\n if (['id', 'createdAt', 'updatedAt', '_ns', '_type'].includes(key)) continue\n if (value === null || value === undefined) continue\n cleanData[key] = value\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).Thing.create({\n ns: selectedNamespace,\n type: selectedType,\n name,\n data: cleanData,\n })\n await refetch()\n toast.success('Row added successfully')\n } catch (err) {\n console.error('[@mdxui/do] Failed to create row:', err)\n toast.error(`Failed to create row: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n },\n [readOnly, selectedType, selectedNamespace, client, refetch]\n )\n\n const handleDeleteRows = React.useCallback(\n async (rowIds: string[]) => {\n if (readOnly || !selectedType) return\n\n try {\n await Promise.all(\n rowIds.map((id) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (client as any).Thing.delete({\n ns: selectedNamespace,\n type: selectedType,\n id,\n })\n )\n )\n setLocalData((prev) => prev.filter((row) => !rowIds.includes(String(row.id))))\n setSelectedRows([])\n toast.success(`${rowIds.length} row${rowIds.length > 1 ? 's' : ''} deleted`)\n } catch (err) {\n toast.error(`Failed to delete rows: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n },\n [readOnly, selectedType, selectedNamespace, client]\n )\n\n const handleRefresh = React.useCallback(async () => {\n setRefreshStatus('refreshing')\n try {\n await refetch()\n setRefreshStatus('success')\n setLastRefreshTime(new Date())\n setTimeout(() => setRefreshStatus('idle'), 2000)\n } catch {\n setRefreshStatus('error')\n setTimeout(() => setRefreshStatus('idle'), 3000)\n }\n }, [refetch])\n\n const handleToggleColumnVisibility = React.useCallback((accessorKey: string) => {\n setHiddenColumns((prev) => {\n const next = new Set(prev)\n if (next.has(accessorKey)) {\n next.delete(accessorKey)\n } else {\n next.add(accessorKey)\n }\n return next\n })\n }, [])\n\n const handleExport = React.useCallback(\n (scope: 'visible' | 'filtered' | 'all', format: ExportFormat) => {\n const dataToExport =\n scope === 'all' ? localData : scope === 'filtered' ? filteredData : filteredData\n\n let content: string\n let mimeType: string\n let extension: string\n\n switch (format) {\n case 'json':\n content = JSON.stringify(dataToExport, null, 2)\n mimeType = 'application/json'\n extension = 'json'\n break\n case 'csv': {\n const headers = visibleColumns.map((c) => c.header).join(',')\n const rows = dataToExport.map((row) =>\n visibleColumns.map((c) => JSON.stringify(row[c.accessorKey] ?? '')).join(',')\n )\n content = [headers, ...rows].join('\\n')\n mimeType = 'text/csv'\n extension = 'csv'\n break\n }\n default:\n content = JSON.stringify(dataToExport, null, 2)\n mimeType = 'application/json'\n extension = 'json'\n }\n\n const blob = new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = `${selectedType ?? 'data'}-${scope}.${extension}`\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n },\n [localData, filteredData, visibleColumns, selectedType]\n )\n\n const handleQueryExecute = React.useCallback(\n async (query: string) => {\n const startTime = Date.now()\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await (client as any).SQL.execute({ query })\n\n return {\n rows: result.rows,\n columns: result.columns.map((col: { name: string; type: string }) => ({\n name: col.name,\n type: col.type,\n })),\n rowsAffected: result.rowsAffected,\n executionTime: result.executionTimeMs ?? Date.now() - startTime,\n }\n } catch (err) {\n throw new Error(err instanceof Error ? err.message : 'Query execution failed')\n }\n },\n [client]\n )\n\n // Auto-collapse sidebar on medium screens\n React.useEffect(() => {\n const mediaQuery = window.matchMedia('(max-width: 768px)')\n const handleMediaChange = (e: MediaQueryListEvent | MediaQueryList) => {\n if (e.matches) {\n setSidebarCollapsed(true)\n }\n }\n handleMediaChange(mediaQuery)\n mediaQuery.addEventListener('change', handleMediaChange)\n return () => mediaQuery.removeEventListener('change', handleMediaChange)\n }, [])\n\n // Keyboard shortcuts for undo/redo\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'z') {\n if (e.shiftKey) {\n e.preventDefault()\n redo()\n } else {\n e.preventDefault()\n undo()\n }\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [undo, redo])\n\n // Auto-refresh effect\n React.useEffect(() => {\n if (!autoRefreshEnabled) return\n\n const intervalMs = autoRefreshInterval * 1000\n const timer = setInterval(handleRefresh, intervalMs)\n\n return () => clearInterval(timer)\n }, [autoRefreshEnabled, autoRefreshInterval, handleRefresh])\n\n // Parse selected table\n const [schema, tableName] = selectedTable.split('.')\n\n return (\n <>\n <div className={cn('flex h-full overflow-x-auto bg-background', className)}>\n {/* Sidebar */}\n <DatabaseSidebar\n schemas={schemas}\n selectedTable={selectedTable}\n onSelectTable={handleSelectTable}\n onViewTable={(schema, table) => handleSelectTable(schema, table)}\n onDuplicateTable={async (_schema, table) => {\n try {\n // SQLite doesn't have DUPLICATE TABLE, need to do it manually\n const sql = `CREATE TABLE ${table}_copy AS SELECT * FROM ${table}`\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).SQL.execute({ query: sql })\n toast.success(`Table \"${table}\" duplicated as \"${table}_copy\"`)\n await refetch()\n } catch (err) {\n toast.error(`Failed to duplicate table: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n }}\n onDeleteTable={async (_schema, table) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).SQL.execute({ query: `DROP TABLE ${table}` })\n toast.success(`Table \"${table}\" deleted`)\n await refetch()\n } catch (err) {\n toast.error(`Failed to delete table: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n }}\n onCreateTable={() => setTableCreatorOpen(true)}\n collapsed={sidebarCollapsed}\n onCollapsedChange={setSidebarCollapsed}\n className=\"shrink-0\"\n />\n\n {/* Main Content */}\n <div className=\"flex flex-1 flex-col overflow-hidden min-w-[320px]\">\n {/* Toolbar */}\n <TableEditorToolbar\n schema={schema}\n tableName={tableName || 'Select a type'}\n columns={columns}\n totalRowCount={localData.length}\n filteredRowCount={filteredData.length}\n visibleRowCount={filteredData.length}\n selectedRowIds={selectedRows}\n onClearSelection={() => setSelectedRows([])}\n onDeleteSelectedRows={handleDeleteRows}\n sidebarCollapsed={sidebarCollapsed}\n onSidebarCollapsedChange={setSidebarCollapsed}\n viewMode={viewMode}\n onViewModeChange={setViewMode}\n canUndo={canUndo}\n canRedo={canRedo}\n undoCount={undoCount}\n redoCount={redoCount}\n onUndo={undo}\n onRedo={redo}\n refreshStatus={refreshStatus}\n onRefresh={handleRefresh}\n autoRefreshEnabled={autoRefreshEnabled}\n onAutoRefreshEnabledChange={setAutoRefreshEnabled}\n autoRefreshInterval={autoRefreshInterval}\n onAutoRefreshIntervalChange={setAutoRefreshInterval}\n lastRefreshTime={lastRefreshTime}\n filters={filters}\n onFiltersChange={setFilters}\n hiddenColumns={hiddenColumns}\n onToggleColumnVisibility={handleToggleColumnVisibility}\n onInsertRow={() => gridActionsRef.current?.startNewRow()}\n onAddColumn={handleAddColumn}\n onExport={handleExport}\n />\n\n {/* Content Area */}\n {viewMode === 'table' ? (\n <div className=\"flex min-h-0 flex-1 flex-col p-2\">\n {isLoading ? (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n <span className=\"text-sm text-muted-foreground\">Loading...</span>\n </div>\n </div>\n ) : !selectedType ? (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n Select a type from the sidebar to view data\n </div>\n ) : (\n <DatabaseGrid\n data={filteredData}\n columns={visibleColumns}\n onCellUpdate={handleCellUpdate}\n onInsert={handleInsert}\n onDeleteRows={handleDeleteRows}\n onViewRow={(rowId) => {\n // Cells are inline-editable, so just show row ID for reference\n toast.info(`Row ID: ${rowId}`)\n }}\n onDuplicateRow={async (_rowId, row) => {\n if (!selectedType) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { id, _ns, _type, name, ...data } = row\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (client as any).Thing.create({\n ns: selectedNamespace,\n type: selectedType,\n name: `${name || selectedType} (copy)`,\n data,\n })\n await refetch()\n toast.success('Row duplicated')\n } catch (err) {\n console.error('[@mdxui/do] Failed to duplicate row:', err)\n toast.error(`Failed to duplicate row: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n }}\n onSelectionChange={setSelectedRows}\n onColumnReorder={(order) => {\n if (selectedType) {\n localStorage.setItem(\n `do-column-order-${selectedNamespace}-${selectedType}`,\n JSON.stringify(order)\n )\n }\n }}\n actionsRef={gridActionsRef}\n emptyMessage=\"No data matches the current filters\"\n className=\"h-full\"\n />\n )}\n </div>\n ) : viewMode === 'query' ? (\n <QueryView\n currentTable={tableName || ''}\n schema={schema}\n onExecute={handleQueryExecute}\n className=\"flex-1\"\n />\n ) : (\n <FormatView\n data={filteredData}\n columns={columns}\n format={formatViewFormat}\n className=\"flex-1\"\n />\n )}\n </div>\n </div>\n\n {/* Column Editor Panel */}\n <ColumnEditorPanel\n open={columnEditorOpen}\n onOpenChange={setColumnEditorOpen}\n column={editingColumn}\n referenceTables={\n types?.map((t) => ({\n name: t.name,\n columns: ['id', 'name', 'createdAt', 'updatedAt'],\n })) ?? []\n }\n onSave={handleSaveColumn}\n onDelete={editingColumn ? handleDeleteColumn : undefined}\n />\n\n {/* Table Creator Panel */}\n <TableCreatorPanel\n open={tableCreatorOpen}\n onOpenChange={setTableCreatorOpen}\n schemas={namespaces?.map((ns) => ns.name) ?? ['default']}\n onCreate={handleCreateTable}\n />\n\n <Toaster closeButton position=\"top-right\" />\n </>\n )\n}\n\nDataGridView.displayName = 'DataGridView'\n","'use client'\n\n/**\n * DocumentEditorView\n *\n * Edit individual Things with a document-based interface.\n * Uses @mdxui/admin DocumentEditor component for tree view + format editing.\n *\n * Matches the composable pattern from DataGridView.\n */\n\nimport * as React from 'react'\nimport {\n DocumentEditor,\n DocumentSidebar,\n DocumentViewToolbar,\n type DocumentItem,\n type DocumentType as DocumentTypeComponent,\n type DocumentTypeOption,\n} from '@mdxui/admin'\nimport { Database } from 'lucide-react'\nimport { TooltipProvider } from '@mdxui/primitives'\nimport { cn } from '../lib'\nimport { useDO } from '../providers/do-provider'\nimport { useThing, useThings, useTypes, useUpdateThing, useDeleteThing } from '../hooks'\nimport type { Thing, SemanticType } from '../types'\n\n// JSON types (local definition matching @mdxui/admin/editors/types)\ntype JsonPrimitive = string | number | boolean | null\ntype JsonArray = JsonValue[]\ntype JsonObject = { [key: string]: JsonValue }\ntype JsonValue = JsonPrimitive | JsonArray | JsonObject\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DocumentEditorViewProps {\n /** Initial namespace */\n initialNamespace?: string\n /** Initial type */\n initialType?: string\n /** Initial thing ID */\n initialId?: string\n /** Callback when save completes */\n onSave?: (thing: Thing) => void\n /** Callback when delete completes */\n onDelete?: () => void\n /** Callback when back is clicked */\n onBack?: () => void\n /** Custom className */\n className?: string\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Convert SemanticType to DocumentType for sidebar */\nfunction toDocumentType(type: SemanticType): DocumentTypeComponent {\n return {\n id: type.id,\n name: type.name,\n label: type.label,\n }\n}\n\n/** Convert SemanticType to DocumentTypeOption for toolbar */\nfunction toDocumentTypeOption(type: SemanticType): DocumentTypeOption {\n return {\n id: type.id,\n name: type.name,\n label: type.label,\n }\n}\n\n/** Convert Thing to DocumentItem for sidebar */\nfunction toDocumentItem(thing: Thing): DocumentItem {\n return {\n id: thing.id,\n name: thing.name,\n type: thing.type,\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function DocumentEditorView({\n initialNamespace,\n initialType,\n initialId,\n onSave,\n onDelete,\n onBack: _onBack,\n className,\n}: DocumentEditorViewProps) {\n const { namespace: contextNamespace } = useDO()\n\n // State\n const [selectedNamespace] = React.useState(initialNamespace ?? contextNamespace)\n const [selectedType, setSelectedType] = React.useState<string | undefined>(initialType)\n const [selectedThingId, setSelectedThingId] = React.useState<string | undefined>(initialId)\n const [sidebarCollapsed, setSidebarCollapsed] = React.useState(false)\n const [hasUnsavedChanges, setHasUnsavedChanges] = React.useState(false)\n const [isSaving, setIsSaving] = React.useState(false)\n const [localDocument, setLocalDocument] = React.useState<JsonObject | null>(null)\n const fileInputRef = React.useRef<HTMLInputElement>(null)\n\n // Data fetching\n const { data: types } = useTypes({ ns: selectedNamespace })\n const { data: thingsResult, refetch: refetchThings } = useThings({\n ns: selectedNamespace,\n type: selectedType,\n })\n\n // Fetch selected thing\n const thingParams = selectedType && selectedThingId\n ? { ns: selectedNamespace, type: selectedType, id: selectedThingId }\n : { ns: '', type: '', id: '' }\n const { data: currentThing, isLoading: isLoadingThing } = useThing(thingParams)\n\n // Mutations\n const updateThing = useUpdateThing(\n selectedType && selectedThingId\n ? { ns: selectedNamespace, type: selectedType, id: selectedThingId }\n : { ns: 'temp', type: 'temp', id: 'temp' }\n )\n const deleteThing = useDeleteThing(\n selectedType && selectedThingId\n ? { ns: selectedNamespace, type: selectedType, id: selectedThingId }\n : { ns: 'temp', type: 'temp', id: 'temp' }\n )\n\n // Convert types for components\n const documentTypes = React.useMemo(\n () => types?.map(toDocumentType) ?? [],\n [types]\n )\n\n const documentTypeOptions = React.useMemo(\n () => types?.map(toDocumentTypeOption) ?? [],\n [types]\n )\n\n const documentItems = React.useMemo(\n () => thingsResult?.data?.map(toDocumentItem) ?? [],\n [thingsResult]\n )\n\n // Sync local document with fetched thing\n React.useEffect(() => {\n if (currentThing) {\n setLocalDocument({\n _id: currentThing.id,\n _ns: currentThing.ns,\n _type: currentThing.type,\n name: currentThing.name,\n createdAt: currentThing.createdAt instanceof Date\n ? currentThing.createdAt.toISOString()\n : currentThing.createdAt,\n updatedAt: currentThing.updatedAt instanceof Date\n ? currentThing.updatedAt.toISOString()\n : currentThing.updatedAt,\n ...(currentThing.data as JsonObject),\n })\n setHasUnsavedChanges(false)\n } else {\n setLocalDocument(null)\n }\n }, [currentThing])\n\n // Handlers\n const handleSelectDocument = React.useCallback((type: string, documentId: string) => {\n setSelectedType(type)\n setSelectedThingId(documentId)\n setHasUnsavedChanges(false)\n }, [])\n\n const handleDocumentChange = React.useCallback((updatedDoc: JsonObject) => {\n setLocalDocument(updatedDoc)\n setHasUnsavedChanges(true)\n }, [])\n\n const handleCreateDocument = React.useCallback((type: string) => {\n const newId = `${Date.now()}`\n setSelectedType(type)\n setSelectedThingId(newId)\n setLocalDocument({\n _id: newId,\n _type: type,\n _ns: selectedNamespace,\n name: 'New Thing',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n })\n setHasUnsavedChanges(true)\n }, [selectedNamespace])\n\n const handleSave = React.useCallback(async () => {\n if (!localDocument || !selectedType || !selectedThingId) return\n\n setIsSaving(true)\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _id, _ns, _type, createdAt, updatedAt, name, ...data } = localDocument\n await updateThing.mutateAsync({\n name: name as string,\n data,\n })\n setHasUnsavedChanges(false)\n await refetchThings()\n if (onSave && currentThing) {\n onSave({ ...currentThing, name: name as string, data })\n }\n } catch (err) {\n console.error('Failed to save:', err)\n } finally {\n setIsSaving(false)\n }\n }, [localDocument, selectedType, selectedThingId, updateThing, refetchThings, onSave, currentThing])\n\n const handleDelete = React.useCallback(async () => {\n if (!selectedType || !selectedThingId) return\n\n try {\n await deleteThing.mutateAsync()\n\n // Select another thing or clear selection\n const remainingThings = thingsResult?.data?.filter((t) => t.id !== selectedThingId) ?? []\n if (remainingThings.length > 0) {\n setSelectedThingId(remainingThings[0].id)\n setSelectedType(remainingThings[0].type)\n } else {\n setSelectedThingId(undefined)\n }\n\n setHasUnsavedChanges(false)\n await refetchThings()\n onDelete?.()\n } catch (err) {\n console.error('Failed to delete:', err)\n }\n }, [selectedType, selectedThingId, deleteThing, thingsResult, refetchThings, onDelete])\n\n const handleExport = React.useCallback(() => {\n if (!localDocument) return\n\n const json = JSON.stringify(localDocument, null, 2)\n const blob = new Blob([json], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = `${selectedThingId}.json`\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n }, [localDocument, selectedThingId])\n\n const handleImport = React.useCallback(() => {\n fileInputRef.current?.click()\n }, [])\n\n const handleFileChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0]\n if (!file || !selectedType) return\n\n const reader = new FileReader()\n reader.onload = (e) => {\n try {\n const content = e.target?.result as string\n const parsed = JSON.parse(content)\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('Invalid JSON: root must be an object')\n }\n\n const newId = `${Date.now()}`\n setSelectedThingId(newId)\n setLocalDocument({\n ...parsed,\n _id: newId,\n _type: selectedType,\n _ns: selectedNamespace,\n })\n setHasUnsavedChanges(true)\n } catch (err) {\n console.error('Failed to import document:', err)\n }\n }\n reader.readAsText(file)\n event.target.value = ''\n },\n [selectedType, selectedNamespace]\n )\n\n const handleRefresh = React.useCallback(async () => {\n await refetchThings()\n setHasUnsavedChanges(false)\n }, [refetchThings])\n\n // Auto-collapse sidebar on medium screens\n React.useEffect(() => {\n const mediaQuery = window.matchMedia('(max-width: 768px)')\n const handleMediaChange = (e: MediaQueryListEvent | MediaQueryList) => {\n if (e.matches) {\n setSidebarCollapsed(true)\n }\n }\n handleMediaChange(mediaQuery)\n mediaQuery.addEventListener('change', handleMediaChange)\n return () => mediaQuery.removeEventListener('change', handleMediaChange)\n }, [])\n\n return (\n <TooltipProvider>\n <div className={cn('flex h-full overflow-x-auto bg-background', className)}>\n {/* Hidden file input for import */}\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".json,application/json\"\n className=\"hidden\"\n onChange={handleFileChange}\n />\n\n {/* Sidebar */}\n <DocumentSidebar\n types={documentTypes}\n documents={documentItems}\n selectedType={selectedType}\n selectedDocumentId={selectedThingId}\n onSelectDocument={handleSelectDocument}\n onCreateDocument={handleCreateDocument}\n collapsed={sidebarCollapsed}\n />\n\n {/* Main Content */}\n <div className=\"flex flex-1 flex-col overflow-hidden min-w-[320px]\">\n {/* Toolbar */}\n <DocumentViewToolbar\n typeName={selectedType}\n documentName={localDocument ? (localDocument.name as string) : undefined}\n documentId={selectedThingId}\n hasUnsavedChanges={hasUnsavedChanges}\n isSaving={isSaving}\n hasDocument={!!localDocument}\n types={documentTypeOptions}\n sidebarCollapsed={sidebarCollapsed}\n onSidebarToggle={() => setSidebarCollapsed(!sidebarCollapsed)}\n onSave={handleSave}\n onRefresh={handleRefresh}\n onImport={handleImport}\n onExport={handleExport}\n onDelete={handleDelete}\n onCreateNew={handleCreateDocument}\n />\n\n {/* Editor */}\n <div className=\"flex min-h-0 flex-1 flex-col\">\n {isLoadingThing ? (\n <div className=\"flex h-full items-center justify-center\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n <span className=\"text-sm text-muted-foreground\">Loading...</span>\n </div>\n </div>\n ) : localDocument ? (\n <DocumentEditor\n document={localDocument}\n onChange={handleDocumentChange}\n className=\"h-full\"\n />\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center text-muted-foreground\">\n <Database className=\"mb-4 h-12 w-12 opacity-20\" />\n <p className=\"text-sm\">No document selected</p>\n <p className=\"mt-1 text-xs\">\n Select a document from the sidebar or create a new one\n </p>\n </div>\n )}\n </div>\n\n {/* Footer */}\n <footer className=\"flex h-10 shrink-0 items-center justify-between border-t bg-muted/30 px-2 sm:px-4 gap-4\">\n <div className=\"text-xs text-muted-foreground whitespace-nowrap shrink-0\">\n {selectedType && (\n <>\n <span className=\"font-medium text-foreground\">\n {thingsResult?.data?.filter((t) => t.type === selectedType).length ?? 0}\n </span>{' '}\n documents in {selectedType}\n </>\n )}\n </div>\n <div className=\"text-xs text-muted-foreground truncate\">\n {localDocument && (\n <>\n ID:{' '}\n <span className=\"font-mono text-foreground\">\n {selectedThingId}\n </span>\n </>\n )}\n </div>\n </footer>\n </div>\n </div>\n </TooltipProvider>\n )\n}\n\nDocumentEditorView.displayName = 'DocumentEditorView'\n","'use client'\n\n/**\n * FunctionEditorView\n *\n * Execute code against the Durable Object with SDK support.\n * Uses @mdxui/admin SDKEditor component for Monaco editor + results panel.\n *\n * Matches the composable pattern from DocumentEditorView.\n */\n\nimport * as React from 'react'\nimport {\n SDKEditor,\n FunctionSidebar,\n FunctionViewToolbar,\n type SDKEditorControls,\n type SDKResult,\n type QueryHistoryItem,\n type SavedQuery,\n type StarterTemplate,\n} from '@mdxui/admin'\nimport {\n Input,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Button,\n TooltipProvider,\n Toaster,\n} from '@mdxui/primitives'\nimport { cn } from '../lib'\nimport { useDO } from '../providers/do-provider'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FunctionEditorViewProps {\n /** Initial code */\n initialCode?: string\n /** Callback when code changes */\n onCodeChange?: (code: string) => void\n /** Custom className */\n className?: string\n}\n\n// ============================================================================\n// Starter Templates\n// ============================================================================\n\nconst STARTER_TEMPLATES: StarterTemplate[] = [\n {\n id: 'list-things',\n name: 'List all Things',\n description: 'List all Things in the namespace',\n code: `// List all Things\nconst things = await client.things.list({\n limit: 100,\n})\n\nreturn { things, relationships: [] }`,\n },\n {\n id: 'list-by-type',\n name: 'List Things by type',\n description: 'Filter Things by their semantic type',\n code: `// List Things by type\nconst type = 'User' // Change this to your type\n\nconst things = await client.things.list({\n type,\n limit: 100,\n})\n\nreturn { things, relationships: [] }`,\n },\n {\n id: 'get-thing',\n name: 'Get single Thing',\n description: 'Fetch a specific Thing by ID',\n code: `// Get a single Thing by ID\nconst id = 'thing-id' // Replace with actual ID\n\nconst thing = await client.things.get(id)\n\nreturn { things: [thing], relationships: [] }`,\n },\n {\n id: 'create-thing',\n name: 'Create new Thing',\n description: 'Create a new Thing in the namespace',\n code: `// Create a new Thing\nconst newThing = await client.things.create({\n type: 'User',\n name: 'New User',\n data: {\n email: 'user@example.com',\n role: 'member',\n },\n})\n\nreturn { things: [newThing], relationships: [] }`,\n },\n {\n id: 'update-thing',\n name: 'Update a Thing',\n description: 'Update an existing Thing',\n code: `// Update a Thing\nconst id = 'thing-id' // Replace with actual ID\n\nconst updatedThing = await client.things.update(id, {\n name: 'Updated Name',\n data: {\n email: 'updated@example.com',\n },\n})\n\nreturn { things: [updatedThing], relationships: [] }`,\n },\n {\n id: 'query-things',\n name: 'Query with filters',\n description: 'Complex query with multiple filters',\n code: `// Query Things with filters\nconst things = await client.things.list({\n type: 'User',\n filter: {\n 'data.role': 'admin',\n },\n sort: '-createdAt',\n limit: 50,\n})\n\nreturn { things, relationships: [] }`,\n },\n]\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function FunctionEditorView({\n initialCode,\n onCodeChange,\n className,\n}: FunctionEditorViewProps) {\n const { client, namespace } = useDO()\n\n // SDK Editor controls ref\n const editorControlsRef = React.useRef<SDKEditorControls | null>(null)\n const [, forceUpdate] = React.useReducer((x) => x + 1, 0)\n\n // Sidebar state\n const [sidebarCollapsed, setSidebarCollapsed] = React.useState(false)\n\n // Query state\n const [currentCode, setCurrentCode] = React.useState(initialCode ?? STARTER_TEMPLATES[0].code)\n const [history, setHistory] = React.useState<QueryHistoryItem[]>([])\n const [savedQueries, setSavedQueries] = React.useState<SavedQuery[]>([])\n\n // Dialog state\n const [saveDialogOpen, setSaveDialogOpen] = React.useState(false)\n const [queryName, setQueryName] = React.useState('')\n\n // Force update when controls change\n React.useEffect(() => {\n const interval = setInterval(() => {\n if (editorControlsRef.current) {\n forceUpdate()\n }\n }, 100)\n return () => clearInterval(interval)\n }, [])\n\n // Execute code against the DO client\n const handleExecute = React.useCallback(\n async (code: string): Promise<SDKResult> => {\n const startTime = performance.now()\n\n try {\n // Create a function that has access to `client` and executes the code\n // In a real implementation, this would use the actual DO client\n const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\n const fn = new AsyncFunction('client', 'namespace', code)\n\n const result = await fn(client, namespace)\n\n const executionTime = Math.round(performance.now() - startTime)\n\n // Track history\n const historyItem: QueryHistoryItem = {\n id: `hist_${Date.now()}`,\n code,\n timestamp: new Date(),\n executionTime,\n resultCount:\n (result?.things?.length ?? 0) + (result?.relationships?.length ?? 0),\n }\n setHistory((prev) => [historyItem, ...prev].slice(0, 20))\n\n // Notify code change\n onCodeChange?.(code)\n\n return {\n things: result?.things ?? [],\n relationships: result?.relationships ?? [],\n executionTime,\n }\n } catch (err) {\n const executionTime = Math.round(performance.now() - startTime)\n\n // Still track in history even on error\n const historyItem: QueryHistoryItem = {\n id: `hist_${Date.now()}`,\n code,\n timestamp: new Date(),\n executionTime,\n resultCount: 0,\n }\n setHistory((prev) => [historyItem, ...prev].slice(0, 20))\n\n throw err\n }\n },\n [client, namespace, onCodeChange]\n )\n\n // Handle selecting from history\n const handleSelectHistory = React.useCallback((code: string) => {\n setCurrentCode(code)\n }, [])\n\n // Handle clearing history\n const handleClearHistory = React.useCallback(() => {\n setHistory([])\n }, [])\n\n // Handle selecting a saved query\n const handleSelectSavedQuery = React.useCallback((query: SavedQuery) => {\n setCurrentCode(query.code)\n }, [])\n\n // Handle deleting a saved query\n const handleDeleteSavedQuery = React.useCallback((id: string) => {\n setSavedQueries((prev) => prev.filter((q) => q.id !== id))\n }, [])\n\n // Handle selecting a template\n const handleSelectTemplate = React.useCallback((template: StarterTemplate) => {\n setCurrentCode(template.code)\n }, [])\n\n // Handle saving current query\n const handleSaveQuery = React.useCallback(() => {\n if (!queryName.trim()) return\n\n const newQuery: SavedQuery = {\n id: `saved_${Date.now()}`,\n name: queryName.trim(),\n code: currentCode,\n createdAt: new Date(),\n updatedAt: new Date(),\n }\n\n setSavedQueries((prev) => [newQuery, ...prev])\n setSaveDialogOpen(false)\n setQueryName('')\n }, [queryName, currentCode])\n\n // Convert QueryHistoryItem[] to QueryHistoryEntry[] for toolbar\n // Recalculates on every render (triggered by forceUpdate interval)\n const toolbarHistory = editorControlsRef.current?.history?.map((item) => ({\n code: item.code,\n timestamp: item.timestamp,\n })) ?? []\n\n return (\n <TooltipProvider>\n <div className={cn('flex h-full bg-background', className)}>\n {/* Sidebar */}\n <FunctionSidebar\n title=\"Function Editor\"\n templates={STARTER_TEMPLATES}\n savedQueries={savedQueries}\n history={history}\n collapsed={sidebarCollapsed}\n onCollapsedChange={setSidebarCollapsed}\n onSelectTemplate={handleSelectTemplate}\n onSelectSavedQuery={handleSelectSavedQuery}\n onDeleteSavedQuery={handleDeleteSavedQuery}\n onSelectHistory={handleSelectHistory}\n onClearHistory={handleClearHistory}\n />\n\n {/* Main Content */}\n <div className=\"flex flex-1 flex-col overflow-hidden min-w-[320px]\">\n {/* Header Toolbar */}\n <FunctionViewToolbar\n sidebarCollapsed={sidebarCollapsed}\n onSidebarToggle={() => setSidebarCollapsed(!sidebarCollapsed)}\n isExecuting={editorControlsRef.current?.isExecuting}\n disabled={editorControlsRef.current?.disabled}\n onRun={() => editorControlsRef.current?.execute()}\n onClear={() => editorControlsRef.current?.clear()}\n history={toolbarHistory}\n onSelectHistory={(code) => editorControlsRef.current?.selectHistory(code)}\n canSave={!!currentCode.trim()}\n onSave={() => setSaveDialogOpen(true)}\n />\n\n {/* SDK Editor */}\n <div className=\"flex-1 h-0 overflow-hidden\">\n <SDKEditor\n initialCode={currentCode}\n onExecute={handleExecute}\n defaultResultTab=\"table\"\n showToolbar={false}\n controlsRef={editorControlsRef}\n className=\"h-full\"\n />\n </div>\n </div>\n\n {/* Save Query Dialog */}\n <Dialog open={saveDialogOpen} onOpenChange={setSaveDialogOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Save Query</DialogTitle>\n <DialogDescription>\n Give your query a name to save it for later use.\n </DialogDescription>\n </DialogHeader>\n <div className=\"py-4\">\n <Input\n placeholder=\"Query name...\"\n value={queryName}\n onChange={(e) => setQueryName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleSaveQuery()\n }\n }}\n autoFocus\n />\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => setSaveDialogOpen(false)}>\n Cancel\n </Button>\n <Button onClick={handleSaveQuery} disabled={!queryName.trim()}>\n Save\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n <Toaster closeButton position=\"top-right\" />\n </div>\n </TooltipProvider>\n )\n}\n\nFunctionEditorView.displayName = 'FunctionEditorView'\n"]}
|
|
@@ -72,5 +72,5 @@ function isSyncError(error) {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
export { APIError, NetworkError, SyncError, ValidationError, isAPIError, isNetworkError, isSyncError, isValidationError };
|
|
75
|
-
//# sourceMappingURL=chunk-
|
|
76
|
-
//# sourceMappingURL=chunk-
|
|
75
|
+
//# sourceMappingURL=chunk-JJLAES6W.js.map
|
|
76
|
+
//# sourceMappingURL=chunk-JJLAES6W.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/errors.ts"],"names":[],"mappings":";AAwCO,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,KAAA,CAAM;AAAA,EAClC,WAAA,CACkB,IAAA,EAChB,OAAA,EACgB,MAAA,EACA,OAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AALG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AAEZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,SAAA,CAAS,SAAS,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,YAAA,CAAa,QAAA,EAAoB,IAAA,EAAyB;AAC/D,IAAA,OAAO,IAAI,SAAA,CAAS,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,IAAI,IAAA,IAAQ,QAAA,CAAS,UAAA,EAAY,QAAA,CAAS,MAAM,CAAA;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,KAAA,EAAmC;AACnD,IAAA,OAAO,KAAA,YAAiB,SAAA;AAAA,EAC1B;AACF;AAWO,IAAM,YAAA,GAAN,MAAM,aAAA,SAAqB,KAAA,CAAM;AAAA,EACtC,WAAA,CACE,SACgB,KAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFG,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,aAAA,CAAa,SAAS,CAAA;AAAA,EACpD;AACF;AAgBO,IAAM,eAAA,GAAN,MAAM,gBAAA,SAAwB,KAAA,CAAM;AAAA,EACzC,WAAA,CACE,SACgB,MAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFG,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,gBAAA,CAAgB,SAAS,CAAA;AAAA,EACvD;AACF;AAkBO,IAAM,SAAA,GAAN,MAAM,UAAA,SAAkB,KAAA,CAAM;AAAA,EACnC,WAAA,CACE,OAAA,EACgB,SAAA,EACA,WAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,UAAA,CAAU,SAAS,CAAA;AAAA,EACjD;AACF;AAKO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OAAO,KAAA,YAAiB,QAAA;AAC1B;AAKO,SAAS,eAAe,KAAA,EAAuC;AACpE,EAAA,OAAO,KAAA,YAAiB,YAAA;AAC1B;AAKO,SAAS,kBAAkB,KAAA,EAA0C;AAC1E,EAAA,OAAO,KAAA,YAAiB,eAAA;AAC1B;AAKO,SAAS,YAAY,KAAA,EAAoC;AAC9D,EAAA,OAAO,KAAA,YAAiB,SAAA;AAC1B","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/lib/errors.ts"],"names":[],"mappings":";AAwCO,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,KAAA,CAAM;AAAA,EAClC,WAAA,CACkB,IAAA,EAChB,OAAA,EACgB,MAAA,EACA,OAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AALG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AAEZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,SAAA,CAAS,SAAS,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,YAAA,CAAa,QAAA,EAAoB,IAAA,EAAyB;AAC/D,IAAA,OAAO,IAAI,SAAA,CAAS,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,IAAI,IAAA,IAAQ,QAAA,CAAS,UAAA,EAAY,QAAA,CAAS,MAAM,CAAA;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,KAAA,EAAmC;AACnD,IAAA,OAAO,KAAA,YAAiB,SAAA;AAAA,EAC1B;AACF;AAWO,IAAM,YAAA,GAAN,MAAM,aAAA,SAAqB,KAAA,CAAM;AAAA,EACtC,WAAA,CACE,SACgB,KAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFG,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,aAAA,CAAa,SAAS,CAAA;AAAA,EACpD;AACF;AAgBO,IAAM,eAAA,GAAN,MAAM,gBAAA,SAAwB,KAAA,CAAM;AAAA,EACzC,WAAA,CACE,SACgB,MAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFG,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,gBAAA,CAAgB,SAAS,CAAA;AAAA,EACvD;AACF;AAkBO,IAAM,SAAA,GAAN,MAAM,UAAA,SAAkB,KAAA,CAAM;AAAA,EACnC,WAAA,CACE,OAAA,EACgB,SAAA,EACA,WAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,UAAA,CAAU,SAAS,CAAA;AAAA,EACjD;AACF;AAKO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OAAO,KAAA,YAAiB,QAAA;AAC1B;AAKO,SAAS,eAAe,KAAA,EAAuC;AACpE,EAAA,OAAO,KAAA,YAAiB,YAAA;AAC1B;AAKO,SAAS,kBAAkB,KAAA,EAA0C;AAC1E,EAAA,OAAO,KAAA,YAAiB,eAAA;AAC1B;AAKO,SAAS,YAAY,KAAA,EAAoC;AAC9D,EAAA,OAAO,KAAA,YAAiB,SAAA;AAC1B","file":"chunk-JJLAES6W.js","sourcesContent":["/**\n * Standardized error classes for @mdxui/do\n *\n * These classes provide consistent error handling across the package:\n * - APIError: HTTP/RPC errors from the backend\n * - NetworkError: Connection/fetch failures\n * - ValidationError: Input validation errors\n * - SyncError: Real-time sync errors\n *\n * @example\n * ```typescript\n * import { APIError, NetworkError, isAPIError } from '@mdxui/do'\n *\n * try {\n * const response = await fetch(url)\n * if (!response.ok) {\n * throw APIError.fromResponse(response)\n * }\n * } catch (error) {\n * if (isAPIError(error)) {\n * console.log(`API error ${error.code}: ${error.message}`)\n * if (error.status === 401) {\n * // Handle auth error\n * }\n * } else if (isNetworkError(error)) {\n * console.log('Network unavailable, will retry...')\n * }\n * }\n * ```\n */\n\n/**\n * API error from HTTP/RPC calls\n *\n * Provides structured error information including:\n * - code: Machine-readable error code (e.g., 'HTTP_404', 'VALIDATION_ERROR')\n * - message: Human-readable error message\n * - status: HTTP status code (when applicable)\n * - details: Additional error details from the server\n */\nexport class APIError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status?: number,\n public readonly details?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'APIError'\n // Maintain proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, APIError.prototype)\n }\n\n /**\n * Create an APIError from a fetch Response\n *\n * @param response - The Response object from fetch\n * @param body - Optional response body text (if already read)\n * @returns An APIError with HTTP status information\n *\n * @example\n * ```typescript\n * const response = await fetch('/api/things')\n * if (!response.ok) {\n * throw APIError.fromResponse(response, await response.text())\n * }\n * ```\n */\n static fromResponse(response: Response, body?: string): APIError {\n return new APIError(`HTTP_${response.status}`, body || response.statusText, response.status)\n }\n\n /**\n * Type guard to check if an error is an APIError\n */\n static isAPIError(error: unknown): error is APIError {\n return error instanceof APIError\n }\n}\n\n/**\n * Network-level error (connection failures, timeouts, etc.)\n *\n * Use for errors that occur before an HTTP response is received:\n * - DNS resolution failures\n * - Connection refused\n * - Request timeouts\n * - CORS errors\n */\nexport class NetworkError extends Error {\n constructor(\n message: string,\n public readonly cause?: Error\n ) {\n super(message)\n this.name = 'NetworkError'\n Object.setPrototypeOf(this, NetworkError.prototype)\n }\n}\n\n/**\n * Validation error with field-level details\n *\n * Use when input data fails validation checks.\n * The fields property maps field names to arrays of error messages.\n *\n * @example\n * ```typescript\n * throw new ValidationError('Invalid input', {\n * email: ['Invalid email format'],\n * name: ['Name is required', 'Name must be at least 2 characters'],\n * })\n * ```\n */\nexport class ValidationError extends Error {\n constructor(\n message: string,\n public readonly fields: Record<string, string[]>\n ) {\n super(message)\n this.name = 'ValidationError'\n Object.setPrototypeOf(this, ValidationError.prototype)\n }\n}\n\n/**\n * Real-time sync error\n *\n * Use for errors in the sync protocol (WebSocket, EventSource, etc.).\n * The operation property indicates what sync operation failed.\n * The recoverable property indicates whether the client should retry.\n *\n * @example\n * ```typescript\n * // Recoverable connection error - client should retry\n * throw new SyncError('WebSocket disconnected', 'connect', true)\n *\n * // Non-recoverable push error - user intervention needed\n * throw new SyncError('Conflict: record modified by another user', 'push', false)\n * ```\n */\nexport class SyncError extends Error {\n constructor(\n message: string,\n public readonly operation: 'push' | 'pull' | 'connect',\n public readonly recoverable: boolean\n ) {\n super(message)\n this.name = 'SyncError'\n Object.setPrototypeOf(this, SyncError.prototype)\n }\n}\n\n/**\n * Type guard to check if an error is an APIError\n */\nexport function isAPIError(error: unknown): error is APIError {\n return error instanceof APIError\n}\n\n/**\n * Type guard to check if an error is a NetworkError\n */\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError\n}\n\n/**\n * Type guard to check if an error is a ValidationError\n */\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError\n}\n\n/**\n * Type guard to check if an error is a SyncError\n */\nexport function isSyncError(error: unknown): error is SyncError {\n return error instanceof SyncError\n}\n"]}
|