@vibecms/core 0.1.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/dist/engine/index.d.mts +4 -0
- package/dist/engine/index.d.ts +4 -0
- package/dist/engine/index.js +1226 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/index.mjs +1184 -0
- package/dist/engine/index.mjs.map +1 -0
- package/dist/hooks/index.d.mts +27 -0
- package/dist/hooks/index.d.ts +27 -0
- package/dist/hooks/index.js +75 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/index.mjs +47 -0
- package/dist/hooks/index.mjs.map +1 -0
- package/dist/index-C3P1J_of.d.ts +339 -0
- package/dist/index-CO4uwTdH.d.mts +339 -0
- package/dist/index.css +2326 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +412 -0
- package/dist/index.d.ts +412 -0
- package/dist/index.js +3715 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3587 -0
- package/dist/index.mjs.map +1 -0
- package/dist/storage/index.d.mts +32 -0
- package/dist/storage/index.d.ts +32 -0
- package/dist/storage/index.js +103 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/index.mjs +75 -0
- package/dist/storage/index.mjs.map +1 -0
- package/dist/types-BkDsDmQJ.d.mts +83 -0
- package/dist/types-BkDsDmQJ.d.ts +83 -0
- package/dist/ui/index.d.mts +127 -0
- package/dist/ui/index.d.ts +127 -0
- package/dist/ui/index.js +1119 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +1030 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/vite-plugin.d.mts +8 -0
- package/dist/vite-plugin.d.ts +8 -0
- package/dist/vite-plugin.js +193 -0
- package/dist/vite-plugin.js.map +1 -0
- package/dist/vite-plugin.mjs +165 -0
- package/dist/vite-plugin.mjs.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/ui/button.tsx","../src/lib/utils.ts","../src/ui/command.tsx","../src/ui/dialog.tsx","../src/ui/input-group.tsx","../src/ui/input.tsx","../src/ui/textarea.tsx","../src/ui/label.tsx","../src/ui/popover.tsx","../src/ui/scroll-area.tsx","../src/ui/sheet.tsx","../src/ui/switch.tsx","../src/ui/tooltip.tsx","../src/ui/SeoHead.tsx","../src/ui/AuthorCard.tsx","../src/config.ts","../src/engine/validation.ts","../src/engine/engine-node.ts","../src/engine/engine-browser.ts","../src/engine/engine-dev.ts","../src/license.ts","../src/engine/index.ts","../src/hooks/use-vibe-content.ts","../src/hooks/use-vibe-document.ts","../src/schema/mixins.ts","../src/schema/blocks.ts","../src/schema/index.ts","../src/events.ts","../src/scheduler.ts","../src/storage/drivers/git.ts","../src/storage/drivers/vercel-blob.ts","../src/components/VibeText.tsx","../src/components/VibeImage.tsx","../src/components/VibeRichText.tsx","../src/components/VibeOverlay.tsx"],"sourcesContent":["import './styles.css';\n\n// Export the CMS\n// export * from './cms';\n\n// Export UI components for internal use or external overriding\nexport * from './ui';\nexport * from './engine';\nexport * from './hooks';\nexport * from './types/auth';\nexport * from './config';\nexport * from './schema';\nexport * from './events';\nexport * from './scheduler';\nexport * from './storage';\nexport * from './components';\nexport type { LicensePayload, VibePlan } from './license';\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n outline:\n \"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\n icon: \"size-8\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n ButtonPrimitive.Props & VariantProps<typeof buttonVariants>\n>(({ className, variant, size, ...props }, ref) => {\n return (\n <ButtonPrimitive\n ref={ref}\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n})\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\nimport {\n InputGroup,\n InputGroupAddon,\n} from \"./input-group\"\nimport { SearchIcon, CheckIcon } from \"lucide-react\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"flex size-full flex-col overflow-hidden rounded-xl! bg-white p-1 text-neutral-900\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit<React.ComponentProps<typeof Dialog>, \"children\"> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n children: React.ReactNode\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\n \"top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0 shadow-2xl border border-neutral-200 bg-white\",\n className\n )}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-neutral-500 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 border-none\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-1 pb-0\">\n <InputGroup className=\"h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n <InputGroupAddon>\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn(\"py-6 text-center text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"overflow-hidden p-1 text-neutral-900 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-neutral-500\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-neutral-100 data-selected:text-neutral-900 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-neutral-900\",\n className\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nconst DialogTrigger = React.forwardRef<\n HTMLButtonElement | HTMLElement,\n DialogPrimitive.Trigger.Props\n>(({ ...props }, ref) => {\n return (\n <DialogPrimitive.Trigger\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n data-slot=\"dialog-trigger\"\n {...props}\n />\n )\n})\nDialogTrigger.displayName = \"DialogTrigger\"\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nconst DialogClose = React.forwardRef<\n HTMLButtonElement,\n DialogPrimitive.Close.Props\n>(({ ...props }, ref) => {\n return (\n <DialogPrimitive.Close\n ref={ref}\n data-slot=\"dialog-close\"\n {...props}\n />\n )\n})\nDialogClose.displayName = \"DialogClose\"\n\nconst DialogOverlay = React.forwardRef<\n HTMLDivElement,\n DialogPrimitive.Backdrop.Props\n>(({ className, ...props }, ref) => {\n return (\n <DialogPrimitive.Backdrop\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n})\nDialogOverlay.displayName = \"DialogOverlay\"\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-white p-4 text-sm text-neutral-900 ring-1 ring-neutral-200 shadow-xl duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-2 right-2\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>\n Close\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\n \"font-heading text-base leading-none font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\nconst InputGroup = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5\",\n className\n )}\n {...props}\n />\n )\n }\n)\nInputGroup.displayName = \"InputGroup\"\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]\",\n \"inline-end\":\n \"order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2\",\n \"block-end\":\n \"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nconst InputGroupAddon = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>\n>(({ className, align = \"inline-start\", ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n})\nInputGroupAddon.displayName = \"InputGroupAddon\"\n\nconst inputGroupButtonVariants = cva(\n \"flex items-center gap-2 text-sm shadow-none\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\" | \"type\"> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: \"button\" | \"submit\" | \"reset\"\n }) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","import * as React from \"react\"\nimport { Input as InputPrimitive } from \"@base-ui/react/input\"\n\nimport { cn } from \"../lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <InputPrimitive\n ref={ref}\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nconst Label = React.forwardRef<HTMLLabelElement, React.ComponentProps<\"label\">>(\n ({ className, ...props }, ref) => {\n return (\n <label\n ref={ref}\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n }\n)\nLabel.displayName = \"Label\"\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Popover({ ...props }: PopoverPrimitive.Root.Props) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nconst PopoverTrigger = React.forwardRef<\n HTMLButtonElement | HTMLElement,\n PopoverPrimitive.Trigger.Props\n>(({ ...props }, ref) => {\n return (\n <PopoverPrimitive.Trigger\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n data-slot=\"popover-trigger\"\n {...props}\n />\n )\n})\nPopoverTrigger.displayName = \"PopoverTrigger\"\n\nconst PopoverContent = React.forwardRef<\n HTMLDivElement,\n PopoverPrimitive.Popup.Props &\n Pick<\n PopoverPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >\n>(\n (\n {\n className,\n align = \"center\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n ...props\n },\n ref\n ) => {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <PopoverPrimitive.Popup\n ref={ref}\n data-slot=\"popover-content\"\n className={cn(\n \"z-[9999] flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-white border border-neutral-200 p-2.5 text-sm text-neutral-900 shadow-xl ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n )\n }\n)\nPopoverContent.displayName = \"PopoverContent\"\n\nconst PopoverHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-0.5 text-sm\", className)}\n {...props}\n />\n )\n})\nPopoverHeader.displayName = \"PopoverHeader\"\n\nconst PopoverTitle = React.forwardRef<\n HTMLHeadingElement,\n PopoverPrimitive.Title.Props\n>(({ className, ...props }, ref) => {\n return (\n <PopoverPrimitive.Title\n ref={ref}\n data-slot=\"popover-title\"\n className={cn(\"font-heading font-medium\", className)}\n {...props}\n />\n )\n})\nPopoverTitle.displayName = \"PopoverTitle\"\n\nconst PopoverDescription = React.forwardRef<\n HTMLParagraphElement,\n PopoverPrimitive.Description.Props\n>(({ className, ...props }, ref) => {\n return (\n <PopoverPrimitive.Description\n ref={ref}\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n})\nPopoverDescription.displayName = \"PopoverDescription\"\n\nexport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"@base-ui/react/scroll-area\"\n\nimport { cn } from \"../lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n HTMLDivElement,\n ScrollAreaPrimitive.Root.Props\n>(({ className, children, ...props }, ref) => {\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n})\nScrollArea.displayName = \"ScrollArea\"\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n ScrollAreaPrimitive.Scrollbar.Props\n>(({ className, orientation = \"vertical\", ...props }, ref) => {\n return (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n data-slot=\"scroll-area-scrollbar\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n )\n})\nScrollBar.displayName = \"ScrollBar\"\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nconst SheetTrigger = React.forwardRef<\n HTMLButtonElement | HTMLElement,\n SheetPrimitive.Trigger.Props\n>(({ ...props }, ref) => {\n return (\n <SheetPrimitive.Trigger\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n data-slot=\"sheet-trigger\"\n {...props}\n />\n )\n})\nSheetTrigger.displayName = \"SheetTrigger\"\n\nconst SheetClose = React.forwardRef<\n HTMLButtonElement,\n SheetPrimitive.Close.Props\n>(({ ...props }, ref) => {\n return (\n <SheetPrimitive.Close\n ref={ref}\n data-slot=\"sheet-close\"\n {...props}\n />\n )\n})\nSheetClose.displayName = \"SheetClose\"\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nconst SheetOverlay = React.forwardRef<\n HTMLDivElement,\n SheetPrimitive.Backdrop.Props\n>(({ className, ...props }, ref) => {\n return (\n <SheetPrimitive.Backdrop\n ref={ref}\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs\",\n className\n )}\n {...props}\n />\n )\n})\nSheetOverlay.displayName = \"SheetOverlay\"\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-3 right-3\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Popup>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-0.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\n \"font-heading text-base font-medium text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"@base-ui/react/switch\"\n\nimport { cn } from \"../lib/utils\"\n\nconst Switch = React.forwardRef<\n HTMLButtonElement,\n SwitchPrimitive.Root.Props & {\n size?: \"sm\" | \"default\"\n }\n>(({ className, size = \"default\", ...props }, ref) => {\n return (\n <SwitchPrimitive.Root\n ref={ref}\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground\"\n />\n </SwitchPrimitive.Root>\n )\n})\nSwitch.displayName = \"Switch\"\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction TooltipProvider({ ...props }: TooltipPrimitive.Provider.Props) {\n return <TooltipPrimitive.Provider {...props} />\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nconst TooltipTrigger = React.forwardRef<\n HTMLButtonElement | HTMLElement,\n TooltipPrimitive.Trigger.Props\n>(({ ...props }, ref) => {\n return (\n <TooltipPrimitive.Trigger\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n data-slot=\"tooltip-trigger\"\n render={(triggerProps) => (\n <span {...triggerProps} className=\"contents\" />\n )}\n {...props}\n />\n )\n})\nTooltipTrigger.displayName = \"TooltipTrigger\"\n\nfunction TooltipContent({\n className,\n sideOffset = 4,\n side = \"top\",\n align = \"center\",\n alignOffset = 0,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<TooltipPrimitive.Positioner.Props, \"side\" | \"sideOffset\" | \"align\" | \"alignOffset\">) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner \n sideOffset={sideOffset} \n side={side} \n align={align} \n alignOffset={alignOffset}\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"z-[9999] overflow-hidden rounded-md bg-zinc-900 border border-white/10 px-3 py-1.5 text-xs text-white animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 shadow-xl\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import React from 'react';\n\nexport interface SeoData {\n seoTitle?: string;\n seoDescription?: string;\n ogImage?: string;\n keywords?: string;\n}\n\nexport function SeoHead({ data, fallbackSiteName }: { data?: SeoData; fallbackSiteName?: string }) {\n if (!data) return null;\n const title = data.seoTitle || fallbackSiteName || 'VibeCMS Site';\n \n return (\n <>\n <title>{title}</title>\n {data.seoDescription && <meta name=\"description\" content={data.seoDescription} />}\n {data.keywords && <meta name=\"keywords\" content={data.keywords} />}\n {data.ogImage && <meta property=\"og:image\" content={data.ogImage} />}\n <meta property=\"og:title\" content={title} />\n {data.seoDescription && <meta property=\"og:description\" content={data.seoDescription} />}\n </>\n );\n}\n","import React from 'react';\n\nexport interface TeamMemberData {\n name: string;\n role: string;\n bio?: string;\n headshot?: string;\n socialLinks?: Array<{ platform: string; url: string }>;\n}\n\nexport function AuthorCard({ author }: { author?: TeamMemberData }) {\n if (!author) return null;\n\n return (\n <div className=\"flex items-center gap-4 p-4 border rounded-lg bg-neutral-50 border-neutral-200\">\n {author.headshot && (\n <img \n src={author.headshot} \n alt={author.name} \n className=\"w-16 h-16 rounded-full object-cover\"\n />\n )}\n <div>\n <h4 className=\"font-semibold text-lg text-neutral-900\">{author.name}</h4>\n <p className=\"text-sm text-neutral-500 font-medium\">{author.role}</p>\n </div>\n </div>\n );\n}\n","import { z } from 'zod';\nimport type { ComponentType } from 'react';\nimport { AuthProvider, VibeAccessRule, VibeRole } from './types/auth';\nimport { WebhookConfig } from './events';\nimport { StorageDriver } from './storage/types';\n\nexport interface VibeCollection {\n name: string;\n schema: z.ZodTypeAny;\n /** Restrict which roles can edit this collection. Default: ['owner', 'editor'] */\n editRoles?: VibeRole[];\n}\n\n/**\n * Registration entry for a custom block renderer.\n */\nexport interface VibeBlockRegistration {\n /** The `_type` value in your block schema */\n type: string;\n /** React component to render this block. Receives `{ data, index }` props. */\n component: ComponentType<{ data: any; index: string | number }>;\n}\n\nexport interface VibeConfig {\n /**\n * VibeCMS license key. Set via `VIBE_LICENSE_KEY` env var (preferred) or here.\n * Get your key at https://vibecms.com/pricing\n */\n licenseKey?: string;\n contentDir?: string;\n publicDir?: string;\n auth?: AuthProvider;\n media?: {\n driver: StorageDriver;\n };\n collections?: Record<string, VibeCollection>;\n /**\n * Single global documents that do not have a list view (e.g., globals, navigation, footer).\n * They behave like collections but are enforced to have a single slug 'index'.\n */\n singletons?: Record<string, VibeCollection>;\n /**\n * Register custom block renderers. These are merged with built-in blocks.\n * Custom registrations take precedence over built-in blocks with the same `_type`.\n *\n * Example:\n * blocks: [\n * { type: 'comparison-table', component: ComparisonTable },\n * { type: 'hero', component: CustomHero }, // overrides built-in hero\n * ]\n */\n blocks?: VibeBlockRegistration[];\n /**\n * Access control list. The first entry should be the owner.\n * Users not in this list are denied access to the CMS editor.\n *\n * Example:\n * access: [\n * { email: 'owner@example.com', role: 'owner' },\n * { email: 'editor@company.de', role: 'editor' },\n * { email: 'viewer@company.de', role: 'viewer' },\n * ]\n */\n access?: VibeAccessRule[];\n /**\n * Webhooks to notify on content lifecycle events.\n *\n * Example:\n * webhooks: [\n * { url: 'https://hooks.example.com/deploy', events: ['content:publish'], secret: 'whsec_...' },\n * ]\n */\n webhooks?: WebhookConfig[];\n /**\n * Localization support. Specify all locales you want the CMS to generate files for.\n * If enabled, documents are saved as `[slug].[locale].json`.\n */\n locales?: string[];\n defaultLocale?: string;\n}\n\nexport function defineConfig(config: VibeConfig): VibeConfig {\n return config;\n}\n\n/**\n * Global schema registry. Populated from `VibeConfig.collections` during engine init.\n * Used by engines to validate content before writing to disk.\n */\nconst schemaRegistry = new Map<string, z.ZodTypeAny>();\n\nexport function registerCollectionSchemas(collections?: Record<string, VibeCollection>, singletons?: Record<string, VibeCollection>) {\n schemaRegistry.clear();\n if (collections) {\n for (const [key, col] of Object.entries(collections)) {\n schemaRegistry.set(key, col.schema);\n }\n }\n if (singletons) {\n for (const [key, col] of Object.entries(singletons)) {\n schemaRegistry.set(key, col.schema);\n }\n }\n}\n\nexport function getCollectionSchema(collection: string): z.ZodTypeAny | undefined {\n return schemaRegistry.get(collection);\n}\n\n/**\n * Validate data against a collection's schema.\n * Returns { success: true, data } or { success: false, errors }.\n */\nexport function validateCollectionData(\n collection: string,\n data: unknown\n): { success: true; data: any } | { success: false; errors: string[] } {\n const schema = schemaRegistry.get(collection);\n if (!schema) {\n // No schema registered — allow write (backwards-compatible)\n return { success: true, data };\n }\n const result = schema.safeParse(data);\n if (result.success) {\n return { success: true, data: result.data };\n }\n const errors = result.error.issues.map(\n (issue) => `${issue.path.join('.')}: ${issue.message}`\n );\n return { success: false, errors };\n}\n\n/**\n * Resolve the role for a given email from the access list.\n * Returns null if the user is not whitelisted.\n */\nexport function resolveUserRole(config: VibeConfig, email: string | null | undefined): VibeRole | null {\n if (!email) return null;\n if (!config.access || config.access.length === 0) {\n // No access list configured — all authenticated users are treated as editors (backwards-compatible)\n return 'editor';\n }\n const entry = config.access.find(a => a.email.toLowerCase() === email.toLowerCase());\n return entry?.role ?? null;\n}\n\n/**\n * Check whether a role is allowed to edit a specific collection.\n */\nexport function canEditCollection(config: VibeConfig, role: VibeRole | null, collectionKey: string): boolean {\n if (!role) return false;\n if (role === 'owner') return true;\n if (role === 'viewer') return false;\n\n const collection = config.collections?.[collectionKey] || config.singletons?.[collectionKey];\n if (!collection) return false;\n\n const allowed = collection.editRoles ?? ['owner', 'editor'];\n return allowed.includes(role);\n}\n\n/**\n * Block registry for custom block renderers.\n * Custom blocks registered here take precedence over built-in blocks.\n */\nconst blockRegistry = new Map<string, ComponentType<{ data: any; index: string | number }>>();\n\nexport function registerCustomBlocks(blocks: VibeBlockRegistration[]) {\n for (const block of blocks) {\n blockRegistry.set(block.type, block.component);\n }\n}\n\nexport function getCustomBlockComponent(type: string): ComponentType<{ data: any; index: string | number }> | undefined {\n return blockRegistry.get(type);\n}\n","// packages/core/src/engine/validation.ts\n\nconst SLUG_REGEX = /^[a-z0-9][a-z0-9_/-]{0,100}$/i;\nconst COMMIT_OID_REGEX = /^[0-9a-f]{5,40}$/;\nconst COLLECTION_REGEX = /^[a-z0-9][a-z0-9_-]{0,50}$/i;\n\n/**\n * Validate a content slug. Slugs are used as filenames and must be safe\n * for filesystem paths and shell arguments.\n */\nexport function validateSlug(slug: string): boolean {\n return typeof slug === 'string' && SLUG_REGEX.test(slug);\n}\n\n/**\n * Validate a git commit OID (SHA-1 hex hash).\n */\nexport function validateCommitOid(oid: string): boolean {\n return typeof oid === 'string' && COMMIT_OID_REGEX.test(oid);\n}\n\n/**\n * Validate a collection name.\n */\nexport function validateCollection(collection: string): boolean {\n return typeof collection === 'string' && COLLECTION_REGEX.test(collection);\n}\n\n/**\n * Assert slug is valid, throw if not.\n */\nexport function assertValidSlug(slug: string): void {\n if (!validateSlug(slug)) {\n throw new Error(`Invalid slug: \"${slug}\". Slugs must match ${SLUG_REGEX}`);\n }\n}\n\n/**\n * Assert commit OID is valid, throw if not.\n */\nexport function assertValidCommitOid(oid: string): void {\n if (!validateCommitOid(oid)) {\n throw new Error(`Invalid commit OID: \"${oid}\". Must be a hex SHA hash.`);\n }\n}\n\n/**\n * Assert collection name is valid, throw if not.\n */\nexport function assertValidCollection(collection: string): void {\n if (!validateCollection(collection)) {\n throw new Error(`Invalid collection name: \"${collection}\"`);\n }\n}\n\n/**\n * Sanitize a redirect path to prevent open redirects.\n * Returns '/' if the path is invalid.\n */\nexport function sanitizeRedirectPath(path: string | null | undefined): string {\n if (!path) return '/';\n // Must start with single slash, must not contain protocol or double-slash\n if (!path.startsWith('/')) return '/';\n if (path.startsWith('//')) return '/';\n if (path.includes('://')) return '/';\n if (path.includes('\\\\')) return '/';\n return path;\n}\n","// packages/core/src/engine/engine.node.ts\nimport { SyncEngine, VibeEngineConfig, CommitAuthor, HistoryEntry } from './types';\nimport { validateCollectionData } from '../config';\nimport { assertValidSlug, assertValidCollection, assertValidCommitOid } from './validation';\n\n/**\n * Check if a parsed JSON document contains a reference to the given slug.\n * Only checks string values in fields typically used for references\n * (keys containing 'ref', 'author', 'category', or values that are exact slug matches).\n * Recurses through arrays and nested objects.\n */\nfunction hasReferenceToSlug(data: unknown, slug: string): boolean {\n if (data === slug) return true;\n if (Array.isArray(data)) {\n return data.some(item => hasReferenceToSlug(item, slug));\n }\n if (data && typeof data === 'object') {\n for (const [key, value] of Object.entries(data as Record<string, unknown>)) {\n // Skip internal fields and content-like fields (titles, descriptions, rich text)\n if (key.startsWith('_')) continue;\n if (['title', 'subtitle', 'description', 'content', 'body', 'text', 'html',\n 'seoTitle', 'seoDescription', 'label', 'name', 'placeholder',\n 'helpText', 'successMessage', 'quote', 'answer', 'question',\n 'caption', 'alt', 'icon', 'url', 'image', 'ogImage',\n 'backgroundColor', 'textColor', 'keywords'].includes(key)) {\n continue;\n }\n if (hasReferenceToSlug(value, slug)) return true;\n }\n }\n return false;\n}\n\n/** Simple in-memory LRU cache with TTL for content reads. */\nclass ContentCache {\n private cache = new Map<string, { data: any; expiresAt: number }>();\n private maxEntries: number;\n private ttlMs: number;\n\n constructor(maxEntries = 200, ttlMs = 30_000) {\n this.maxEntries = maxEntries;\n this.ttlMs = ttlMs;\n }\n\n get(key: string): any | undefined {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n if (Date.now() > entry.expiresAt) {\n this.cache.delete(key);\n return undefined;\n }\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, entry);\n return entry.data;\n }\n\n set(key: string, data: any) {\n if (this.cache.size >= this.maxEntries) {\n // Evict oldest entry\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) this.cache.delete(firstKey);\n }\n this.cache.set(key, { data, expiresAt: Date.now() + this.ttlMs });\n }\n\n invalidate(key: string) {\n this.cache.delete(key);\n }\n\n invalidateCollection(collection: string) {\n for (const key of this.cache.keys()) {\n if (key.startsWith(`${collection}/`)) {\n this.cache.delete(key);\n }\n }\n }\n}\n\nexport class NodeEngine implements SyncEngine {\n private contentDir = 'src/content';\n private publicDir = 'public';\n private config?: VibeEngineConfig;\n private contentCache = new ContentCache();\n\n async init(config?: VibeEngineConfig) {\n this.config = config;\n if (config?.contentDir) this.contentDir = config.contentDir;\n if (config?.publicDir) this.publicDir = config.publicDir;\n }\n\n private resolveFilename(slug: string, locale?: string): string {\n const base = slug.endsWith('.json') ? slug.replace(/\\.json$/, '') : slug;\n return locale ? `${base}.${locale}.json` : `${base}.json`;\n }\n\n async read(collection: string, slug: string, options?: { locale?: string }) {\n if (typeof window !== 'undefined') return null;\n assertValidCollection(collection);\n assertValidSlug(slug);\n\n const filename = this.resolveFilename(slug, options?.locale);\n const cacheKey = `${collection}/${filename}`;\n const cached = this.contentCache.get(cacheKey);\n if (cached !== undefined) return cached;\n\n const fs = await import('fs/promises');\n const path = await import('path');\n const filePath = path.join(process.cwd(), this.contentDir, collection, filename);\n try {\n const [content, stat] = await Promise.all([\n fs.readFile(filePath, 'utf-8'),\n fs.stat(filePath),\n ]);\n const data = JSON.parse(content);\n // Stamp version for optimistic locking (mtime in ms)\n data._vibeVersion = stat.mtimeMs;\n this.contentCache.set(cacheKey, data);\n return data;\n } catch (e) {\n return null;\n }\n }\n\n async write(collection: string, slug: string, data: any, options?: { locale?: string }) {\n if (typeof window !== 'undefined') return;\n assertValidCollection(collection);\n assertValidSlug(slug);\n\n // Validate against collection schema before writing\n const validation = validateCollectionData(collection, data);\n if (!validation.success) {\n throw new Error(\n `Schema validation failed for ${collection}/${slug}: ${validation.errors.join('; ')}`\n );\n }\n\n const fs = await import('fs/promises');\n const path = await import('path');\n const filename = this.resolveFilename(slug, options?.locale);\n const dir = path.join(process.cwd(), this.contentDir, collection);\n await fs.mkdir(dir, { recursive: true });\n const filePath = path.join(dir, filename);\n\n // Optimistic locking: if _vibeVersion is present, check file hasn't changed\n const dataToWrite = { ...validation.data };\n const clientVersion = data._vibeVersion;\n delete dataToWrite._vibeVersion; // Don't persist the version field\n\n if (clientVersion) {\n try {\n const stat = await fs.stat(filePath);\n if (Math.abs(stat.mtimeMs - clientVersion) > 100) {\n throw new Error(\n `Conflict: \"${collection}/${slug}\" was modified by another editor. Reload to see the latest version.`\n );\n }\n } catch (e: any) {\n if (e.message.startsWith('Conflict:')) throw e;\n // File doesn't exist yet — OK, new document\n }\n }\n\n await fs.writeFile(filePath, JSON.stringify(dataToWrite, null, 2), 'utf-8');\n\n // Invalidate cache for this document\n this.contentCache.invalidate(`${collection}/${filename}`);\n }\n\n async delete(collection: string, slug: string, options?: { locale?: string }) {\n if (typeof window !== 'undefined') return;\n assertValidCollection(collection);\n assertValidSlug(slug);\n\n const fs = await import('fs/promises');\n const path = await import('path');\n const filename = this.resolveFilename(slug, options?.locale);\n const baseDir = path.join(process.cwd(), this.contentDir);\n\n // Referential integrity: check parsed JSON reference fields, not raw string matching\n const cols = await fs.readdir(baseDir);\n for (const col of cols) {\n if (col === collection) continue;\n const colDir = path.join(baseDir, col);\n const stat = await fs.stat(colDir);\n if (!stat.isDirectory()) continue;\n\n const files = await fs.readdir(colDir);\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n const raw = await fs.readFile(path.join(colDir, file), 'utf8');\n try {\n const data = JSON.parse(raw);\n if (hasReferenceToSlug(data, slug)) {\n throw new Error(\n `Referential Integrity Error: Cannot delete \"${slug}\" because it is referenced by ${col}/${file}`\n );\n }\n } catch (e: any) {\n if (e.message.startsWith('Referential Integrity')) throw e;\n // Skip unparseable JSON\n }\n }\n }\n\n const filePath = path.join(baseDir, collection, filename);\n await fs.unlink(filePath);\n this.contentCache.invalidate(`${collection}/${filename}`);\n }\n\n async isDirty() {\n return false; // Dev mode relies on native cli git\n }\n\n async revert() {}\n\n async commit(_message: string, _author?: CommitAuthor) {}\n\n async push() {\n // In Node (dev mode) we don't automatically push from the engine,\n // the developer uses their normal git cli.\n }\n\n async pull() {\n // No-op for Node, handled by developer cli\n }\n\n async writeMedia(file: File, author?: CommitAuthor) {\n if (this.config?.media?.driver) {\n return this.config.media.driver.upload(file, { engine: this, author });\n }\n \n if (typeof window !== 'undefined') return '';\n const fs = await import('fs/promises');\n const path = await import('path');\n const buffer = Buffer.from(await file.arrayBuffer());\n const dir = path.join(process.cwd(), this.publicDir, 'assets', 'uploads');\n await fs.mkdir(dir, { recursive: true });\n \n // Normalize filename\n const safeName = file.name.replace(/[^a-z0-9.-]/gi, '_').toLowerCase();\n const filePath = path.join(dir, safeName);\n \n await fs.writeFile(filePath, buffer);\n const url = `/assets/uploads/${safeName}`;\n\n try {\n // Intelligent Media Schema: Parse intrinsic dimensions\n const sizeOf = (await import('image-size')).default;\n const dimensions = sizeOf(buffer);\n if (dimensions && dimensions.width && dimensions.height) {\n return {\n url,\n width: dimensions.width,\n height: dimensions.height,\n alt: file.name\n };\n }\n } catch (e) {\n // Fallback for non-images\n }\n \n return `/assets/uploads/${safeName}`;\n }\n\n async listMedia(): Promise<string[]> {\n if (this.config?.media?.driver?.list) {\n return this.config.media.driver.list({ engine: this });\n }\n if (typeof window !== 'undefined') return [];\n try {\n const fs = await import('fs/promises');\n const path = await import('path');\n const uploadsDir = path.join(process.cwd(), this.publicDir, 'assets', 'uploads');\n const files = await fs.readdir(uploadsDir);\n return files.filter(f => !f.startsWith('.')).map(f => `/assets/uploads/${f}`);\n } catch {\n return [];\n }\n }\n\n async deleteMedia(filename: string): Promise<void> {\n if (this.config?.media?.driver?.delete) {\n return this.config.media.driver.delete(filename, { engine: this });\n }\n if (typeof window !== 'undefined') return;\n const fs = await import('fs/promises');\n const path = await import('path');\n const safeName = filename.split('/').pop() || filename;\n const filePath = path.join(process.cwd(), this.publicDir, 'assets', 'uploads', safeName);\n try {\n await fs.unlink(filePath);\n } catch (e) {\n // ignore if missing\n }\n }\n\n async renameMedia(oldFilename: string, newFilename: string): Promise<void> {\n if (this.config?.media?.driver?.rename) {\n return this.config.media.driver.rename(oldFilename, newFilename, { engine: this });\n }\n if (typeof window !== 'undefined') return;\n const fs = await import('fs/promises');\n const path = await import('path');\n const safeOldName = oldFilename.split('/').pop() || oldFilename;\n const safeNewName = newFilename.split('/').pop() || newFilename;\n const oldPath = path.join(process.cwd(), this.publicDir, 'assets', 'uploads', safeOldName);\n const newPath = path.join(process.cwd(), this.publicDir, 'assets', 'uploads', safeNewName);\n try {\n await fs.rename(oldPath, newPath);\n } catch (e) {\n throw new Error(`Failed to rename local media: ${e}`);\n }\n }\n\n async pruneMedia(): Promise<{ deletedCount: number, bytesFreed: number }> {\n if (typeof window !== 'undefined') return { deletedCount: 0, bytesFreed: 0 };\n const fs = await import('fs/promises');\n const path = await import('path');\n let usedMedia = new Set<string>();\n const contentDir = path.join(process.cwd(), 'src', 'content');\n const uploadsDir = path.join(process.cwd(), this.publicDir, 'assets', 'uploads');\n \n async function scanDir(dir: string) {\n if (!require('fs').existsSync(dir)) return;\n const entries = await fs.readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) await scanDir(fullPath);\n else if (entry.name.endsWith('.json')) {\n const content = await fs.readFile(fullPath, 'utf-8');\n const regex = /\\/assets\\/uploads\\/([^\"'\\s\\\\]+)/g;\n let match;\n while ((match = regex.exec(content)) !== null) {\n usedMedia.add(match[1]);\n }\n }\n }\n }\n \n await scanDir(contentDir);\n \n let deletedCount = 0;\n let bytesFreed = 0;\n if (require('fs').existsSync(uploadsDir)) {\n const uFiles = await fs.readdir(uploadsDir);\n for (const f of uFiles) {\n if (!usedMedia.has(f) && !f.startsWith('.')) {\n const stat = await fs.stat(path.join(uploadsDir, f));\n bytesFreed += stat.size;\n await fs.unlink(path.join(uploadsDir, f));\n deletedCount++;\n }\n }\n }\n return { deletedCount, bytesFreed };\n }\n\n async getMediaUrl(relativePath: string) {\n // In node/dev environment, Next.js serves the public folder directly\n return relativePath;\n }\n\n async list(collection: string, options?: import('./types').ListOptions) {\n if (typeof window !== 'undefined') return [];\n try {\n const fs = await import('fs/promises');\n const path = await import('path');\n const dir = path.join(process.cwd(), this.contentDir, collection);\n const files = await fs.readdir(dir);\n const slugs = files.filter((f: string) => f.endsWith('.json')).map((f: string) => f.replace('.json', ''));\n \n if (options?.withMeta) {\n const metaList = await Promise.all(slugs.map(async (slug: string) => {\n try {\n const content = await fs.readFile(path.join(dir, `${slug}.json`), 'utf-8');\n const data = JSON.parse(content);\n return { slug, title: data.title || data.name || slug, ...data };\n } catch(e) {\n return { slug, title: slug };\n }\n }));\n return metaList;\n }\n return slugs;\n } catch { return []; }\n }\n\n async getHistory(collection: string, slug: string): Promise<HistoryEntry[]> {\n if (typeof window !== 'undefined') return [];\n assertValidCollection(collection);\n assertValidSlug(slug);\n try {\n const { execFileSync } = require('child_process');\n const filePath = `${this.contentDir}/${collection}/${slug}.json`;\n // execFileSync does NOT invoke a shell — prevents command injection\n const raw = (execFileSync(\n 'git',\n ['log', '--follow', '--format=%H%x00%s%x00%an%x00%ae%x00%at', '--', filePath],\n { cwd: process.cwd(), encoding: 'utf-8', timeout: 5000 }\n ) as string).trim();\n if (!raw) return [];\n return raw.split('\\n').map((line: string) => {\n const [oid, message, author, email, ts] = line.split('\\0');\n return { oid, message, author, email, timestamp: parseInt(ts, 10) * 1000 };\n });\n } catch {\n return [];\n }\n }\n\n async getVersionContent(commitOid: string, collection: string, slug: string) {\n if (typeof window !== 'undefined') return null;\n assertValidCollection(collection);\n assertValidSlug(slug);\n assertValidCommitOid(commitOid);\n try {\n const { execFileSync } = require('child_process');\n const filePath = `${this.contentDir}/${collection}/${slug}.json`;\n // execFileSync does NOT invoke a shell — prevents command injection\n const content = execFileSync(\n 'git',\n ['show', `${commitOid}:${filePath}`],\n { cwd: process.cwd(), encoding: 'utf-8', timeout: 5000 }\n ) as string;\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n}\n","// packages/core/src/engine/engine.browser.ts\nimport { SyncEngine, VibeEngineConfig, CommitAuthor, HistoryEntry } from './types';\nimport { validateCollectionData } from '../config';\n\nconst DEFAULT_AUTHOR: CommitAuthor = { name: 'VibeCMS Editor', email: 'editor@vibecms.local' };\n\n/** Check if parsed JSON contains a reference to a slug (skips content fields). */\nfunction hasReferenceToSlug(data: unknown, slug: string): boolean {\n if (data === slug) return true;\n if (Array.isArray(data)) {\n return data.some(item => hasReferenceToSlug(item, slug));\n }\n if (data && typeof data === 'object') {\n for (const [key, value] of Object.entries(data as Record<string, unknown>)) {\n if (key.startsWith('_')) continue;\n if (['title', 'subtitle', 'description', 'content', 'body', 'text', 'html',\n 'seoTitle', 'seoDescription', 'label', 'name', 'placeholder',\n 'helpText', 'successMessage', 'quote', 'answer', 'question',\n 'caption', 'alt', 'icon', 'url', 'image', 'ogImage',\n 'backgroundColor', 'textColor', 'keywords'].includes(key)) {\n continue;\n }\n if (hasReferenceToSlug(value, slug)) return true;\n }\n }\n return false;\n}\n\nexport class BrowserEngine implements SyncEngine {\n private fs: any;\n private pfs: any;\n private dir = '/vibecms';\n private contentDir = 'src/content';\n private publicDir = 'public';\n private gitProxyUrl = '/api/git-proxy/';\n private isInitializing = false;\n private initialized = false;\n private config?: VibeEngineConfig;\n\n constructor() {\n if (typeof window !== 'undefined') {\n try {\n // We still use require here for lightning-fs because it can be tricky with ESM in some setups,\n // but we wrap it to be safer in non-browser envs.\n const LightningFS = require('@isomorphic-git/lightning-fs');\n const FS = LightningFS.default || LightningFS;\n this.fs = new FS('vibecms-fs');\n this.pfs = this.fs.promises;\n } catch (e) {\n console.error('Failed to init lightning-fs', e);\n }\n }\n }\n\n async init(config?: VibeEngineConfig) {\n if (typeof window === 'undefined') return;\n this.config = config;\n if (config?.contentDir) this.contentDir = config.contentDir;\n if (config?.publicDir) this.publicDir = config.publicDir;\n if (this.initialized || this.isInitializing) return;\n this.isInitializing = true;\n \n const git = await import('isomorphic-git');\n const http = (await import('isomorphic-git/http/web')).default;\n \n try {\n await this.pfs.readdir(this.dir);\n this.initialized = true;\n this.isInitializing = false;\n } catch (e) {\n try {\n await git.clone({\n fs: this.fs,\n http,\n dir: this.dir,\n corsProxy: config?.corsProxy || this.gitProxyUrl,\n url: config?.repoUrl || '',\n singleBranch: true,\n depth: 1\n });\n this.initialized = true;\n } catch (cloneErr) {\n console.error('Failed to clone repository:', cloneErr);\n } finally {\n this.isInitializing = false;\n }\n }\n }\n\n private resolveFilename(slug: string, locale?: string): string {\n const base = slug.endsWith('.json') ? slug.replace(/\\.json$/, '') : slug;\n return locale ? `${base}.${locale}.json` : `${base}.json`;\n }\n\n async read(collection: string, slug: string, options?: { locale?: string }) {\n if (typeof window === 'undefined' || !this.pfs) return null;\n try {\n const filename = this.resolveFilename(slug, options?.locale);\n const filePath = `${this.dir}/${this.contentDir}/${collection}/${filename}`;\n const content = await this.pfs.readFile(filePath, { encoding: 'utf8' });\n return JSON.parse(content as string);\n } catch (e) {\n return null;\n }\n }\n\n async write(collection: string, slug: string, data: any, options?: { locale?: string }) {\n if (typeof window === 'undefined' || !this.pfs) return;\n\n // Validate against collection schema before writing\n const validation = validateCollectionData(collection, data);\n if (!validation.success) {\n throw new Error(\n `Schema validation failed for ${collection}/${slug}: ${validation.errors.join('; ')}`\n );\n }\n\n const filename = this.resolveFilename(slug, options?.locale);\n const dirPath = `${this.dir}/${this.contentDir}/${collection}`;\n const filePath = `${dirPath}/${filename}`;\n\n const parts = dirPath.split('/').filter(Boolean);\n let currentPath = '';\n for (const part of parts) {\n currentPath += `/${part}`;\n try {\n await this.pfs.mkdir(currentPath);\n } catch (e: any) {\n // Ignore \"already exists\" errors\n }\n }\n\n await this.pfs.writeFile(filePath, JSON.stringify(validation.data, null, 2), 'utf8');\n }\n\n async delete(collection: string, slug: string, options?: { locale?: string }) {\n if (typeof window === 'undefined' || !this.pfs) return;\n const baseDir = `${this.dir}/${this.contentDir}`;\n\n // Referential integrity: parse JSON and check reference-like fields\n const cols = await this.pfs.readdir(baseDir);\n for (const col of cols) {\n if (col === collection) continue;\n const colDir = `${baseDir}/${col}`;\n try {\n const files = await this.pfs.readdir(colDir);\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n const raw = await this.pfs.readFile(`${colDir}/${file}`, { encoding: 'utf8' });\n try {\n const data = JSON.parse(raw as string);\n if (hasReferenceToSlug(data, slug)) {\n throw new Error(\n `Referential Integrity Error: Cannot delete \"${slug}\" because it is referenced by ${col}/${file}`\n );\n }\n } catch (e: any) {\n if (e.message.startsWith('Referential Integrity')) throw e;\n }\n }\n } catch (e: any) {\n if (e.message?.startsWith('Referential Integrity')) throw e;\n // Not a dir or read error\n }\n }\n\n const filename = this.resolveFilename(slug, options?.locale);\n await this.pfs.unlink(`${baseDir}/${collection}/${filename}`);\n }\n\n async isDirty(collection: string, slug: string) {\n if (typeof window === 'undefined' || !this.pfs) return false;\n try {\n const git = await import('isomorphic-git');\n const relativeFilePath = `${this.contentDir}/${collection}/${slug}.json`;\n const status = await git.status({ fs: this.fs, dir: this.dir, filepath: relativeFilePath });\n return status !== 'unmodified' && status !== 'ignored';\n } catch (e) {\n return false;\n }\n }\n\n async revert(collection: string, slug: string) {\n if (typeof window === 'undefined' || !this.pfs) return;\n try {\n const git = await import('isomorphic-git');\n const relativeFilePath = `${this.contentDir}/${collection}/${slug}.json`;\n await git.checkout({\n fs: this.fs,\n dir: this.dir,\n filepaths: [relativeFilePath],\n force: true\n });\n } catch (e) {\n console.error('Failed to revert', e);\n }\n }\n\n async commit(message: string, author?: CommitAuthor) {\n if (typeof window === 'undefined' || !this.pfs) return;\n const git = await import('isomorphic-git');\n const commitAuthor = author || DEFAULT_AUTHOR;\n\n const listFiles = async (dirPath: string): Promise<string[]> => {\n const entries = await this.pfs.readdir(dirPath);\n let files: string[] = [];\n for (const entry of entries) {\n if (entry === '.git') continue;\n const internalPath = `${dirPath}/${entry}`;\n const stat = await this.pfs.stat(internalPath);\n if (stat.isDirectory()) {\n files = files.concat(await listFiles(internalPath));\n } else if (entry.endsWith('.json')) {\n files.push(internalPath.replace(`${this.dir}/`, ''));\n }\n }\n return files;\n };\n\n try {\n const formFiles = await listFiles(`${this.dir}/${this.contentDir}`);\n for (const filepath of formFiles) {\n await git.add({ fs: this.fs, dir: this.dir, filepath });\n }\n\n await git.commit({\n fs: this.fs,\n dir: this.dir,\n author: { name: commitAuthor.name, email: commitAuthor.email },\n message: message || 'CMS Content Update',\n });\n } catch(e) {\n console.error('Commit failed', e);\n }\n }\n\n async push(oauthToken: string) {\n if (typeof window === 'undefined' || !this.pfs) return;\n const git = await import('isomorphic-git');\n const http = (await import('isomorphic-git/http/web')).default;\n \n await git.push({\n fs: this.fs,\n http,\n dir: this.dir,\n remote: 'origin',\n ref: 'main',\n onAuth: () => ({ oauth2format: 'github', password: oauthToken }),\n });\n }\n\n async pull() {\n if (typeof window === 'undefined' || !this.pfs) return;\n const git = await import('isomorphic-git');\n const http = (await import('isomorphic-git/http/web')).default;\n\n await git.pull({\n fs: this.fs,\n http,\n dir: this.dir,\n ref: 'main',\n singleBranch: true,\n corsProxy: this.gitProxyUrl,\n author: { name: DEFAULT_AUTHOR.name, email: DEFAULT_AUTHOR.email }\n });\n }\n\n async writeMedia(file: File, author?: CommitAuthor) {\n if (this.config?.media?.driver) {\n return this.config.media.driver.upload(file, { engine: this, author });\n }\n \n if (typeof window === 'undefined' || !this.pfs) return '';\n const git = await import('isomorphic-git');\n const dirPath = `${this.dir}/${this.publicDir}/assets/uploads`;\n \n try {\n const parts = `${this.publicDir}/assets/uploads`.split('/').filter(Boolean);\n let currentPath = this.dir;\n for (const part of parts) {\n currentPath += `/${part}`;\n try { await this.pfs.mkdir(currentPath); } catch (e) {}\n }\n } catch (e) {}\n\n const safeName = file.name.replace(/[^a-z0-9.-]/gi, '_').toLowerCase();\n const filePath = `${dirPath}/${safeName}`;\n \n const arrayBuffer = await file.arrayBuffer();\n const buffer = new Uint8Array(arrayBuffer);\n \n await this.pfs.writeFile(filePath, buffer);\n\n await git.add({ fs: this.fs, dir: this.dir, filepath: `${this.publicDir}/assets/uploads/${safeName}` });\n const commitAuthor = author || DEFAULT_AUTHOR;\n await git.commit({\n fs: this.fs,\n dir: this.dir,\n author: { name: commitAuthor.name, email: commitAuthor.email },\n message: `Upload media ${safeName}`,\n });\n\n try {\n const blob = new Blob([buffer], { type: file.type });\n const src = URL.createObjectURL(blob);\n const img = new Image();\n img.src = src;\n await new Promise(resolve => { img.onload = resolve; img.onerror = resolve; });\n return {\n url: `/assets/uploads/${safeName}`,\n width: img.naturalWidth,\n height: img.naturalHeight,\n alt: file.name\n };\n } catch {\n return `/assets/uploads/${safeName}`;\n }\n }\n\n async pruneMedia(): Promise<{ deletedCount: number, bytesFreed: number }> {\n return { deletedCount: 0, bytesFreed: 0 };\n }\n\n async listMedia(): Promise<string[]> {\n if (this.config?.media?.driver?.list) {\n return this.config.media.driver.list({ engine: this });\n }\n if (typeof window === 'undefined' || !this.pfs) return [];\n try {\n const dirPath = `${this.dir}/${this.publicDir}/assets/uploads`;\n const files = await this.pfs.readdir(dirPath);\n return files.filter((f: string) => !f.startsWith('.')).map((f: string) => `/assets/uploads/${f}`);\n } catch {\n return [];\n }\n }\n\n async deleteMedia(filename: string): Promise<void> {\n if (this.config?.media?.driver?.delete) {\n return this.config.media.driver.delete(filename, { engine: this });\n }\n if (typeof window === 'undefined' || !this.pfs) return;\n const safeName = filename.split('/').pop() || filename;\n const filePath = `${this.dir}/${this.publicDir}/assets/uploads/${safeName}`;\n try {\n await this.pfs.unlink(filePath);\n const git = await import('isomorphic-git');\n await git.remove({ fs: this.fs, dir: this.dir, filepath: `${this.publicDir}/assets/uploads/${safeName}` });\n } catch {}\n }\n\n async renameMedia(oldFilename: string, newFilename: string): Promise<void> {\n if (this.config?.media?.driver?.rename) {\n return this.config.media.driver.rename(oldFilename, newFilename, { engine: this });\n }\n if (typeof window === 'undefined' || !this.pfs) return;\n const safeOldName = oldFilename.split('/').pop() || oldFilename;\n const safeNewName = newFilename.split('/').pop() || newFilename;\n const oldPath = `${this.dir}/${this.publicDir}/assets/uploads/${safeOldName}`;\n const newPath = `${this.dir}/${this.publicDir}/assets/uploads/${safeNewName}`;\n try {\n const buffer = await this.pfs.readFile(oldPath);\n await this.pfs.writeFile(newPath, buffer);\n await this.pfs.unlink(oldPath);\n\n const git = await import('isomorphic-git');\n await git.remove({ fs: this.fs, dir: this.dir, filepath: `${this.publicDir}/assets/uploads/${safeOldName}` });\n await git.add({ fs: this.fs, dir: this.dir, filepath: `${this.publicDir}/assets/uploads/${safeNewName}` });\n } catch {}\n }\n\n async getMediaUrl(relativePath: string) {\n if (typeof window === 'undefined' || !this.pfs) return relativePath;\n try {\n const filePath = `${this.dir}/${this.publicDir}${relativePath}`;\n const uint8Array = await this.pfs.readFile(filePath);\n const ext = relativePath.split('.').pop()?.toLowerCase();\n let mime = 'image/png';\n if (ext === 'jpg' || ext === 'jpeg') mime = 'image/jpeg';\n else if (ext === 'svg') mime = 'image/svg+xml';\n else if (ext === 'gif') mime = 'image/gif';\n else if (ext === 'webp') mime = 'image/webp';\n \n const blob = new Blob([uint8Array], { type: mime });\n return URL.createObjectURL(blob);\n } catch (e) {\n return relativePath;\n }\n }\n\n async list(collection: string, options?: import('./types').ListOptions) {\n if (typeof window === 'undefined' || !this.pfs) return [];\n try {\n const files = await this.pfs.readdir(`${this.dir}/${this.contentDir}/${collection}`);\n const slugs = files.filter((f: string) => f.endsWith('.json')).map((f: string) => f.replace('.json', ''));\n \n if (options?.withMeta) {\n const metaList = await Promise.all(slugs.map(async (slug: string) => {\n try {\n const content = await this.pfs.readFile(`${this.dir}/${this.contentDir}/${collection}/${slug}.json`, { encoding: 'utf8' });\n const data = JSON.parse(content as string);\n return { slug, title: data.title || data.name || slug, ...data };\n } catch(e) {\n return { slug, title: slug };\n }\n }));\n return metaList;\n }\n return slugs;\n } catch { return []; }\n }\n\n async getHistory(collection: string, slug: string): Promise<HistoryEntry[]> {\n if (typeof window === 'undefined' || !this.pfs) return [];\n try {\n const git = await import('isomorphic-git');\n const relativeFilePath = `${this.contentDir}/${collection}/${slug}.json`;\n const commits = await git.log({\n fs: this.fs,\n dir: this.dir,\n filepath: relativeFilePath\n });\n return commits.map(c => ({\n oid: c.oid,\n message: c.commit.message,\n author: c.commit.author.name,\n email: c.commit.author.email,\n timestamp: c.commit.author.timestamp * 1000\n }));\n } catch (e: any) {\n return [];\n }\n }\n\n async getVersionContent(commitOid: string, collection: string, slug: string) {\n if (typeof window === 'undefined' || !this.pfs) return null;\n try {\n const git = await import('isomorphic-git');\n const relativeFilePath = `${this.contentDir}/${collection}/${slug}.json`;\n const { blob } = await git.readBlob({\n fs: this.fs,\n dir: this.dir,\n oid: commitOid,\n filepath: relativeFilePath\n });\n const content = new TextDecoder('utf-8').decode(blob);\n return JSON.parse(content);\n } catch (e) {\n return null;\n }\n }\n}\n","// packages/core/src/engine/engine.dev.ts\nimport { SyncEngine, VibeEngineConfig, CommitAuthor, HistoryEntry } from './types';\n\nexport class DevEngine implements SyncEngine {\n private apiBase = '/__vibecms/api';\n private config?: VibeEngineConfig;\n\n async init(config?: VibeEngineConfig) {\n this.config = config;\n if (config?.devMode === false) {\n console.warn('DevEngine initialized but devMode is false');\n }\n }\n\n private async fetchApi(method: string, body?: any) {\n const res = await fetch(this.apiBase, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ method, ...body })\n });\n if (!res.ok) {\n const err = await res.json();\n throw new Error(err.message || 'API Error');\n }\n return res.json();\n }\n\n async read<T = any>(collection: string, slug: string, options?: { locale?: string }): Promise<T | null> {\n return this.fetchApi('read', { collection, slug, options })\n .catch(() => null);\n }\n\n async write<T = any>(collection: string, slug: string, data: T, options?: { locale?: string }): Promise<void> {\n await this.fetchApi('write', { collection, slug, data, options });\n }\n\n async delete(collection: string, slug: string, options?: { locale?: string }): Promise<void> {\n await this.fetchApi('delete', { collection, slug, options });\n }\n\n async isDirty() {\n return false; // DevEngine writes directly to disk\n }\n\n async revert() {}\n\n async commit(_message: string, _author?: CommitAuthor) {}\n\n async push() {}\n\n async pull() {}\n\n async writeMedia(file: File, author?: CommitAuthor) {\n if (this.config?.media?.driver) {\n return this.config.media.driver.upload(file, { engine: this, author });\n }\n\n // Media uploads in DevEngine involve sending the file to the dev server.\n // We'll use FormData for this specific call.\n const formData = new FormData();\n formData.append('file', file);\n formData.append('method', 'writeMedia');\n \n const res = await fetch(this.apiBase, {\n method: 'POST',\n body: formData\n });\n \n if (!res.ok) throw new Error('Failed to upload media');\n const data = await res.json();\n return data.url && data.width ? data : data.url;\n }\n\n async listMedia(): Promise<string[]> {\n if (this.config?.media?.driver?.list) {\n return this.config.media.driver.list({ engine: this });\n }\n const res = await this.fetchApi('listMedia');\n return res.files || [];\n }\n\n async deleteMedia(filename: string): Promise<void> {\n if (this.config?.media?.driver?.delete) {\n return this.config.media.driver.delete(filename, { engine: this });\n }\n await this.fetchApi('deleteMedia', { file: filename });\n }\n\n async renameMedia(oldFilename: string, newFilename: string): Promise<void> {\n if (this.config?.media?.driver?.rename) {\n return this.config.media.driver.rename(oldFilename, newFilename, { engine: this });\n }\n await this.fetchApi('renameMedia', { oldFile: oldFilename, newFile: newFilename });\n }\n\n async pruneMedia(): Promise<{ deletedCount: number, bytesFreed: number }> {\n return this.fetchApi('pruneMedia');\n }\n\n async getMediaUrl(relativePath: string) {\n return relativePath; // Served by Vite/Next.js from public\n }\n\n async list(collection: string, options?: import('./types').ListOptions) {\n return this.fetchApi('list', { collection, options });\n }\n\n async getHistory(_collection: string, _slug: string): Promise<HistoryEntry[]> {\n return this.fetchApi('getHistory', { collection: _collection, slug: _slug }).catch(() => []);\n }\n async getVersionContent(commitOid: string, collection: string, slug: string) {\n return this.fetchApi('getVersionContent', { commitOid, collection, slug }).catch(() => null);\n }\n}\n","/**\n * VibeCMS License Key Validation\n *\n * Key format: vibe_<base64url-payload>.<base64url-ed25519-signature>\n *\n * Payload: { sub, plan, iat, exp, kid }\n * Signature: Ed25519 over raw payload bytes\n *\n * Validation is two-tier:\n * 1. Local fast-path: Ed25519 signature + expiry check (synchronous)\n * 2. Remote async check: revocation + usage logging (non-blocking)\n */\n\n// Ed25519 public key (SPKI DER, base64-encoded) — used for local signature verification.\n// The corresponding private key is NEVER included in the published package.\nconst VIBE_PUBLIC_KEY_B64 = 'MCowBQYDK2VwAyEAhoV+ydoo3GG0wM0tjBmtBWKMaHo7gVg25J5lsSfoBI0=';\n\nconst VALIDATION_API = 'https://api.vibecms.com/v1/license/validate';\n\nexport type VibePlan = 'starter' | 'pro' | 'team' | 'enterprise';\n\nexport interface LicensePayload {\n /** Customer identifier (email or ID) */\n sub: string;\n /** License plan tier */\n plan: VibePlan;\n /** Issued-at timestamp (seconds since epoch) */\n iat: number;\n /** Expiration timestamp (seconds since epoch) */\n exp: number;\n /** Key ID for individual revocation */\n kid: string;\n}\n\n// ── In-memory cache for remote validation ──────────────────────────\n\ninterface RemoteResult {\n valid: boolean;\n reason?: string;\n checkedAt: number;\n}\n\nlet _remoteCache: RemoteResult | null = null;\nconst REMOTE_CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\n// Grace period tracking for revoked keys\nlet _revokedAt: number | null = null;\nconst GRACE_PERIOD_MS = 72 * 60 * 60 * 1000; // 72 hours\n\n// ── Base64url helpers ──────────────────────────────────────────────\n\nfunction base64urlDecode(str: string): Uint8Array {\n // Convert base64url to standard base64\n let b64 = str.replace(/-/g, '+').replace(/_/g, '/');\n while (b64.length % 4 !== 0) b64 += '=';\n\n if (typeof Buffer !== 'undefined') {\n return new Uint8Array(Buffer.from(b64, 'base64'));\n }\n // Browser fallback\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\n\n// ── Local validation ───────────────────────────────────────────────\n\n/**\n * Validate a license key locally using Ed25519 signature verification.\n * This is the fast-path check that runs synchronously at engine init.\n *\n * @throws {Error} if the key is missing, malformed, has an invalid signature, or is expired\n */\nexport function validateLicenseLocal(key: string): LicensePayload {\n if (!key || !key.startsWith('vibe_')) {\n throw new Error(\n '[VibeCMS] Invalid license key format. Keys start with \"vibe_\".\\n' +\n 'Get your key at https://vibecms.com/pricing'\n );\n }\n\n const body = key.slice(5); // strip \"vibe_\" prefix\n const dotIndex = body.lastIndexOf('.');\n if (dotIndex === -1) {\n throw new Error(\n '[VibeCMS] Malformed license key. Expected format: vibe_<payload>.<signature>\\n' +\n 'Get a new key at https://vibecms.com/pricing'\n );\n }\n\n const payloadB64 = body.slice(0, dotIndex);\n const signatureB64 = body.slice(dotIndex + 1);\n\n // Decode payload\n let payload: LicensePayload;\n try {\n const payloadBytes = base64urlDecode(payloadB64);\n const payloadJson = new TextDecoder().decode(payloadBytes);\n payload = JSON.parse(payloadJson);\n } catch {\n throw new Error(\n '[VibeCMS] Invalid license key. Could not decode payload.\\n' +\n 'Check your key or get a new one at https://vibecms.com/pricing'\n );\n }\n\n // Verify required fields\n if (!payload.sub || !payload.plan || !payload.iat || !payload.exp || !payload.kid) {\n throw new Error(\n '[VibeCMS] Invalid license key. Missing required fields.\\n' +\n 'Get a new key at https://vibecms.com/pricing'\n );\n }\n\n // Verify Ed25519 signature (Node.js crypto)\n try {\n const crypto = require('crypto');\n const pubKeyDer = Buffer.from(VIBE_PUBLIC_KEY_B64, 'base64');\n const publicKey = crypto.createPublicKey({\n key: pubKeyDer,\n format: 'der',\n type: 'spki',\n });\n\n const payloadBytes = base64urlDecode(payloadB64);\n const signatureBytes = base64urlDecode(signatureB64);\n\n const isValid = crypto.verify(null, payloadBytes, publicKey, signatureBytes);\n if (!isValid) {\n throw new Error('signature mismatch');\n }\n } catch (e: any) {\n if (e.message?.includes('[VibeCMS]')) throw e;\n throw new Error(\n '[VibeCMS] Invalid license key. Signature verification failed.\\n' +\n 'Check your key or get a new one at https://vibecms.com/pricing'\n );\n }\n\n // Check expiration\n const nowSec = Math.floor(Date.now() / 1000);\n if (payload.exp < nowSec) {\n const expDate = new Date(payload.exp * 1000).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n throw new Error(\n `[VibeCMS] License expired on ${expDate}.\\n` +\n 'Renew at https://vibecms.com/account'\n );\n }\n\n return payload;\n}\n\n// ── Remote validation ──────────────────────────────────────────────\n\n/**\n * Async remote validation against the VibeCMS license API.\n * Non-blocking: fire-and-forget from engine init.\n *\n * - Checks revocation status\n * - Logs usage for analytics\n * - Caches result for 24 hours\n * - On revocation: sets 72h grace period, then hard-fail\n * - On network error: silent pass (local sig is sufficient)\n */\nexport async function validateLicenseRemote(key: string, version: string): Promise<void> {\n // Check cache\n if (_remoteCache && Date.now() - _remoteCache.checkedAt < REMOTE_CACHE_TTL_MS) {\n if (!_remoteCache.valid) {\n handleRevocation();\n }\n return;\n }\n\n try {\n const res = await fetch(VALIDATION_API, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ key, version }),\n signal: AbortSignal.timeout(5000), // 5s timeout\n });\n\n if (res.ok) {\n const data = await res.json();\n _remoteCache = {\n valid: data.valid !== false,\n reason: data.reason,\n checkedAt: Date.now(),\n };\n\n if (!_remoteCache.valid) {\n handleRevocation();\n } else {\n // Key is confirmed valid — clear any revocation state\n _revokedAt = null;\n }\n }\n // Non-200 responses: silent pass (API might be down)\n } catch {\n // Network error: silent pass — local signature is sufficient\n }\n}\n\nfunction handleRevocation(): void {\n if (!_revokedAt) {\n _revokedAt = Date.now();\n console.warn(\n '[VibeCMS] ⚠ Warning: Your license key has been revoked.\\n' +\n 'VibeCMS will stop working in 72 hours.\\n' +\n 'Contact support@vibecms.com or visit https://vibecms.com/account'\n );\n }\n\n const elapsed = Date.now() - _revokedAt;\n if (elapsed > GRACE_PERIOD_MS) {\n throw new Error(\n '[VibeCMS] License has been revoked and the grace period has expired.\\n' +\n 'Contact support@vibecms.com or get a new key at https://vibecms.com/pricing'\n );\n }\n}\n\n// ── Key resolution ─────────────────────────────────────────────────\n\n/**\n * Resolve the license key from environment variable or config.\n * Env var `VIBE_LICENSE_KEY` takes precedence.\n */\nexport function resolveLicenseKey(configKey?: string): string {\n const key = (typeof process !== 'undefined' ? process.env?.VIBE_LICENSE_KEY : undefined) ?? configKey;\n\n if (!key) {\n throw new Error(\n '[VibeCMS] License key required.\\n' +\n 'Set the VIBE_LICENSE_KEY environment variable or pass licenseKey in defineConfig().\\n' +\n 'Get your free key at https://vibecms.com/pricing'\n );\n }\n\n return key;\n}\n\n/**\n * Check if the revocation grace period is active (for use by engine proxy guard).\n */\nexport function isInGracePeriod(): boolean {\n if (!_revokedAt) return false;\n return Date.now() - _revokedAt <= GRACE_PERIOD_MS;\n}\n","import { SyncEngine, VibeEngineConfig } from './types';\nimport { NodeEngine } from './engine-node';\nimport { BrowserEngine } from './engine-browser';\nimport { DevEngine } from './engine-dev';\nimport { registerCollectionSchemas, VibeCollection } from '../config';\nimport { resolveLicenseKey, validateLicenseLocal, validateLicenseRemote } from '../license';\n\nexport * from './types';\nexport * from './validation';\nexport * from './engine-node';\nexport * from './engine-browser';\nexport * from './engine-dev';\n\nlet _licensed = false;\n\nconst getEngine = (): SyncEngine => {\n if (typeof window === 'undefined') return new NodeEngine();\n\n // In the browser, check if we should use DevEngine for local FS operations\n const isLocal = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1';\n // We can also check for a specific flag or let init negotiate it\n return isLocal ? new DevEngine() : new BrowserEngine();\n};\n\nconst _raw = getEngine();\n\n/**\n * Proxy guard: prevents using VibeEngine methods without a valid license.\n * All function calls (except init) require `_licensed === true`, which is\n * only set by `initVibeEngine()` after successful license validation.\n */\nexport const VibeEngine: SyncEngine = new Proxy(_raw, {\n get(target: any, prop: string | symbol, receiver: any) {\n const value = Reflect.get(target, prop, receiver);\n if (!_licensed && typeof value === 'function' && prop !== 'init') {\n return (...args: any[]) => {\n throw new Error(\n '[VibeCMS] License key required. Call initVibeEngine() with a valid key.\\n' +\n 'Get your key at https://vibecms.com/pricing'\n );\n };\n }\n return value;\n },\n});\n\n/**\n * Initialize the engine with license validation, then register collection schemas.\n * Call this once at app startup (e.g. in EditProvider or AdminShell).\n *\n * @throws {Error} if the license key is missing, invalid, or expired\n */\nexport function initVibeEngine(\n config: VibeEngineConfig & { licenseKey?: string },\n collections?: Record<string, VibeCollection>,\n singletons?: Record<string, VibeCollection>\n) {\n // 1. License validation (local fast-path — throws on invalid)\n const key = resolveLicenseKey(config.licenseKey);\n validateLicenseLocal(key);\n _licensed = true;\n\n // 2. Async remote check (non-blocking — revocation + usage logging)\n validateLicenseRemote(key, '0.1.0').catch(() => {});\n\n // 3. Register schemas and init engine\n if (collections || singletons) {\n registerCollectionSchemas(collections, singletons);\n }\n return VibeEngine.init(config);\n}\n\nexport async function populate(document: any, refs: { field: string, collection: string }[]) {\n if (!document) return document;\n const doc = { ...document };\n for (const ref of refs) {\n if (typeof doc[ref.field] === 'string') {\n const data = await VibeEngine.read(ref.collection, doc[ref.field]);\n if (data) doc[ref.field] = data;\n } else if (Array.isArray(doc[ref.field])) {\n doc[ref.field] = await Promise.all(doc[ref.field].map(async (item: any) => {\n if (typeof item === 'string') {\n const data = await VibeEngine.read(ref.collection, item);\n return data || item;\n }\n return item;\n }));\n }\n }\n return doc;\n}\n","// packages/core/src/hooks/use-vibe-content.ts\n\"use client\";\n\nimport { useState, useEffect } from 'react';\n\n/**\n * Hook to bridge the gap between static page data and real-time draft updates from the CMS editor.\n * In production/static mode, it returns the initial data.\n * In editor mode, it listens for changes from the Editor.tsx component via Window event dispatcher.\n */\nexport function useVibeContent<T>(initialData: T, collection: string, slug: string): T {\n const [data, setData] = useState<T>(initialData);\n\n useEffect(() => {\n // Check if we are in editor mode \n const isEditor = typeof window !== 'undefined' && \n (window.location.search.includes('vibe-editor=true') || \n (window as any).VIBE_EDITOR_ACTIVE ||\n sessionStorage.getItem('vibe_edit') === 'true');\n\n if (!isEditor) return;\n\n // Listen to the realtime typing events dispatched from the Editor panel\n const handleUpdate = (event: any) => {\n const eventSlug = event.detail.slug?.replace('.json', '');\n const targetSlug = slug.replace('.json', '');\n \n if (event.detail.collection === collection && eventSlug === targetSlug) {\n setData(event.detail.data);\n }\n };\n\n window.addEventListener('vibe-content-update', handleUpdate);\n return () => window.removeEventListener('vibe-content-update', handleUpdate);\n }, [collection, slug]);\n\n return data;\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\n\n/**\n * Hook to consume any CMS document by collection + slug, with live-editing support.\n * Unlike useVibeContent (which bridges static block-array pages), this hook is\n * designed for arbitrary JSON shapes — settings, navigation, footer data, etc.\n *\n * Usage in an existing site:\n * const settings = useVibeDocument(initialSettings, 'settings', 'site');\n * // settings.companyName, settings.logo, etc.\n *\n * const nav = useVibeDocument(initialNav, 'navigation', 'main');\n * // nav.items, nav.logo, etc.\n *\n * @param initialData - Server-fetched data (from VibeEngine.read())\n * @param collection - Collection key (must match vibe.config.ts)\n * @param slug - Document slug\n * @returns Live-updated document data (or initialData in production)\n */\nexport function useVibeDocument<T>(initialData: T, collection: string, slug: string): T {\n const [data, setData] = useState<T>(initialData);\n\n // Keep in sync if server data changes (e.g. navigation between pages)\n useEffect(() => {\n setData(initialData);\n }, [initialData]);\n\n useEffect(() => {\n const isEditor =\n typeof window !== 'undefined' &&\n (window.location.search.includes('vibe-editor=true') ||\n (window as any).VIBE_EDITOR_ACTIVE ||\n sessionStorage.getItem('vibe_edit') === 'true');\n\n if (!isEditor) return;\n\n const handleUpdate = (event: any) => {\n const eventSlug = event.detail.slug?.replace('.json', '');\n const targetSlug = slug.replace('.json', '');\n\n if (event.detail.collection === collection && eventSlug === targetSlug) {\n setData(event.detail.data);\n }\n };\n\n window.addEventListener('vibe-content-update', handleUpdate);\n return () => window.removeEventListener('vibe-content-update', handleUpdate);\n }, [collection, slug]);\n\n return data;\n}\n","import { z } from 'zod';\nimport { vibeField } from './index';\n\n/**\n * Standard SEO fields that can be merged into any page or post schema.\n */\nexport const seoSchema = z.object({\n seoTitle: vibeField(z.string().optional(), 'text'),\n seoDescription: vibeField(z.string().optional(), 'text'),\n ogImage: vibeField(z.string().optional(), 'image'),\n keywords: vibeField(z.string().optional(), 'text'),\n});\n\n/**\n * Standard publishing fields for tracking draft/published state and dates.\n * `scheduledPublishAt` enables scheduled publishing — content will auto-publish\n * when the current time passes this ISO 8601 datetime.\n */\nexport const publishingSchema = z.object({\n isPublished: vibeField(z.boolean().default(false), 'boolean'),\n publishDate: vibeField(z.string().optional(), 'text'),\n scheduledPublishAt: vibeField(z.string().optional(), 'text'),\n});\n\n/**\n * Standard media gallery schema block.\n */\nexport const mediaGallerySchema = z.object({\n images: vibeField(\n z.array(\n z.object({\n url: vibeField(z.string(), 'image'),\n alt: vibeField(z.string().optional(), 'text'),\n caption: vibeField(z.string().optional(), 'text'),\n })\n ).default([]),\n 'array'\n ),\n});\n","import { z } from 'zod';\nimport { vibeField } from './index';\n\nexport const heroBlockSchema = z.object({\n _type: z.literal('hero'),\n title: vibeField(z.string(), 'text'),\n subtitle: vibeField(z.string(), 'rich-text'),\n cta: vibeField(z.string(), 'text'),\n backgroundColor: vibeField(z.string().default('transparent'), 'color-picker'),\n});\n\nexport const featuresBlockSchema = z.object({\n _type: z.literal('features'),\n items: z.array(\n z.object({\n icon: vibeField(z.string().default('Zap'), 'icon-picker'),\n title: vibeField(z.string(), 'text'),\n description: vibeField(z.string(), 'rich-text'),\n })\n ),\n});\n\nexport const logoCloudBlockSchema = z.object({\n _type: z.literal('logo-cloud'),\n title: vibeField(z.string().optional(), 'text'),\n logos: z.array(\n z.object({\n image: vibeField(z.string(), 'image'),\n alt: vibeField(z.string().optional(), 'text'),\n link: vibeField(z.string().optional(), 'text'),\n })\n ),\n});\n\nexport const faqBlockSchema = z.object({\n _type: z.literal('faq'),\n title: vibeField(z.string().default('Frequently Asked Questions'), 'text'),\n items: z.array(\n z.object({\n question: vibeField(z.string(), 'text'),\n answer: vibeField(z.string(), 'rich-text'),\n })\n ),\n});\n\nexport const testimonialsBlockSchema = z.object({\n _type: z.literal('testimonials'),\n title: vibeField(z.string().optional(), 'text'),\n items: z.array(\n z.object({\n quote: vibeField(z.string(), 'text'),\n author: vibeField(z.string(), 'text'),\n role: vibeField(z.string().optional(), 'text'),\n image: vibeField(z.string().optional(), 'image'),\n rating: vibeField(z.number().min(1).max(5).default(5), 'number'),\n })\n ),\n});\n\nexport const pricingBlockSchema = z.object({\n _type: z.literal('pricing'),\n title: vibeField(z.string().default('Pricing Plans'), 'text'),\n subtitle: vibeField(z.string().optional(), 'text'),\n plans: z.array(\n z.object({\n name: vibeField(z.string(), 'text'),\n priceMonthly: vibeField(z.string(), 'text'),\n priceYearly: vibeField(z.string(), 'text'),\n highlighted: vibeField(z.boolean().default(false), 'boolean'),\n features: z.array(\n z.object({\n feature: vibeField(z.string(), 'text'),\n included: vibeField(z.boolean().default(true), 'boolean'),\n })\n ),\n ctaText: vibeField(z.string(), 'text'),\n ctaUrl: vibeField(z.string(), 'text'),\n })\n ),\n});\n\nexport const videoBlockSchema = z.object({\n _type: z.literal('video'),\n url: vibeField(z.string().url(), 'text'),\n caption: vibeField(z.string().optional(), 'text'),\n autoplay: vibeField(z.boolean().default(false), 'boolean'),\n});\n\n// --- Form Block: User-configurable forms without code ---\nexport const formFieldSchema = z.object({\n _fieldType: z.enum(['text', 'email', 'textarea', 'select', 'checkbox', 'radio', 'number', 'tel', 'date', 'file']),\n label: vibeField(z.string(), 'text'),\n name: vibeField(z.string(), 'text'),\n placeholder: vibeField(z.string().optional(), 'text'),\n required: vibeField(z.boolean().default(false), 'boolean'),\n options: vibeField(\n z.string().optional(),\n 'text'\n ), // Comma-separated options for select/radio/checkbox\n helpText: vibeField(z.string().optional(), 'text'),\n width: vibeField(z.enum(['full', 'half']).default('full'), 'text'),\n});\n\nexport const formBlockSchema = z.object({\n _type: z.literal('form'),\n title: vibeField(z.string().optional(), 'text'),\n description: vibeField(z.string().optional(), 'rich-text'),\n fields: z.array(formFieldSchema),\n submitLabel: vibeField(z.string().default('Absenden'), 'text'),\n successMessage: vibeField(z.string().default('Vielen Dank! Ihre Nachricht wurde erfolgreich gesendet.'), 'text'),\n /** Where form data is sent: 'email' posts to a configured endpoint, 'webhook' sends JSON to a URL */\n action: vibeField(z.enum(['email', 'webhook']).default('email'), 'text'),\n /** Email recipient or webhook URL */\n target: vibeField(z.string().optional(), 'text'),\n /** DSGVO: Privacy consent checkbox text */\n privacyConsentText: vibeField(\n z.string().default('Ich stimme der Verarbeitung meiner Daten gemäß der Datenschutzerklärung zu.'),\n 'text'\n ),\n privacyConsentRequired: vibeField(z.boolean().default(true), 'boolean'),\n});\n\nexport const ctaBannerBlockSchema = z.object({\n _type: z.literal('cta'),\n title: vibeField(z.string(), 'text'),\n subtitle: vibeField(z.string(), 'rich-text'),\n buttonText: vibeField(z.string(), 'text'),\n buttonUrl: vibeField(z.string(), 'text'),\n backgroundColor: vibeField(z.string().default('indigo-500'), 'color-picker'),\n textColor: vibeField(z.string().default('white'), 'color-picker'),\n});\n\nexport const blockSchema: z.ZodType<any> = z.lazy(() =>\n z.discriminatedUnion('_type', [\n heroBlockSchema,\n featuresBlockSchema,\n gridBlockSchema,\n logoCloudBlockSchema,\n faqBlockSchema,\n testimonialsBlockSchema,\n pricingBlockSchema,\n videoBlockSchema,\n tabsBlockSchema,\n ctaBannerBlockSchema,\n formBlockSchema,\n ])\n);\n\nexport const tabsBlockSchema = z.object({\n _type: z.literal('tabs'),\n tabs: z.array(\n z.object({\n title: vibeField(z.string(), 'text'),\n icon: vibeField(z.string().optional(), 'icon-picker'),\n blocks: z.lazy(() => z.array(blockSchema)).default([]),\n })\n ),\n});\n\nexport const gridBlockSchema = z.object({\n _type: z.literal('grid'),\n columns: vibeField(z.enum(['1', '2', '3', '4']).default('2'), 'text'),\n blocks: z.lazy(() => z.array(blockSchema)).default([]),\n});\n","import { z } from 'zod';\n\nexport type VibeUIType = \n | 'text' \n | 'rich-text' \n | 'gallery' \n | 'image' \n | 'boolean' \n | 'number' \n | 'object' \n | 'array' \n | 'color-picker' \n | 'icon-picker' \n | 'reference'\n | 'reference-array';\n\nexport interface VibeFieldOptions {\n collection?: string;\n}\n\nexport function vibeField<T extends z.ZodTypeAny>(\n schema: T, \n uiType: VibeUIType,\n options?: VibeFieldOptions\n) {\n if ((uiType === 'reference' || uiType === 'reference-array') && options?.collection) {\n return schema.describe(`ui:${uiType}:${options.collection}`);\n }\n return schema.describe(`ui:${uiType}`);\n}\n\nexport function vibeConditional<T extends z.ZodTypeAny>(\n schema: T, \n dependsOnField: string, \n expectedValue: string | boolean | number\n) {\n const currentDesc = schema.description || '';\n return schema.describe(`${currentDesc}|dependsOn:${dependsOnField}=${expectedValue}`);\n}\n\nexport function getVibeUIType(schema: z.ZodTypeAny): VibeUIType | undefined {\n if (!schema) return undefined;\n const desc = schema.description;\n if (desc && desc.startsWith('ui:')) {\n // If it's a reference, the type is just 'reference', handles ui:reference:team\n const typeStr = desc.split(':')[1];\n return typeStr as VibeUIType;\n }\n return undefined;\n}\n\nexport function getReferenceCollection(schema: z.ZodTypeAny): string | undefined {\n if (!schema) return undefined;\n const desc = schema.description;\n if (desc && desc.startsWith('ui:reference:')) {\n return desc.split(':')[2];\n }\n if (desc && desc.startsWith('ui:reference-array:')) {\n return desc.split(':')[2];\n }\n return undefined;\n}\n\nexport function getConditionalLogic(schema: z.ZodTypeAny): { field: string, value: string } | undefined {\n if (!schema) return undefined;\n const desc = schema.description;\n if (desc && desc.includes('|dependsOn:')) {\n const section = desc.split('|').find(s => s.startsWith('dependsOn:'));\n if (section) {\n const condition = section.replace('dependsOn:', '');\n const [field, value] = condition.split('=');\n return { field, value };\n }\n }\n return undefined;\n}\n\nexport * from './mixins';\nexport * from './blocks';\n","// packages/core/src/events.ts\n\nexport type VibeEventType =\n | 'content:save'\n | 'content:publish'\n | 'content:unpublish'\n | 'content:delete'\n | 'content:commit'\n | 'media:upload'\n | 'media:prune';\n\nexport interface VibeEvent {\n type: VibeEventType;\n collection?: string;\n slug?: string;\n data?: any;\n timestamp: number;\n author?: { name: string; email: string };\n}\n\nexport interface WebhookConfig {\n /** URL to send the POST request to */\n url: string;\n /** Which events trigger this webhook. Empty = all events. */\n events?: VibeEventType[];\n /** Optional secret for HMAC signature verification (X-Vibe-Signature header) */\n secret?: string;\n}\n\ntype EventListener = (event: VibeEvent) => void | Promise<void>;\n\nclass VibeEventBus {\n private listeners: Map<VibeEventType | '*', EventListener[]> = new Map();\n private webhooks: WebhookConfig[] = [];\n\n /**\n * Register webhooks from config.\n */\n registerWebhooks(webhooks: WebhookConfig[]) {\n this.webhooks = webhooks;\n }\n\n /**\n * Subscribe to a specific event type or '*' for all events.\n */\n on(type: VibeEventType | '*', listener: EventListener) {\n const existing = this.listeners.get(type) || [];\n existing.push(listener);\n this.listeners.set(type, existing);\n return () => {\n const list = this.listeners.get(type) || [];\n this.listeners.set(type, list.filter(l => l !== listener));\n };\n }\n\n /**\n * Emit an event. Notifies all listeners and fires webhooks.\n */\n async emit(event: VibeEvent) {\n // Notify type-specific listeners\n const typeListeners = this.listeners.get(event.type) || [];\n for (const listener of typeListeners) {\n try { await listener(event); } catch (e) {\n console.error(`[VibeCMS] Event listener error for ${event.type}:`, e);\n }\n }\n\n // Notify wildcard listeners\n const wildcardListeners = this.listeners.get('*') || [];\n for (const listener of wildcardListeners) {\n try { await listener(event); } catch (e) {\n console.error('[VibeCMS] Wildcard event listener error:', e);\n }\n }\n\n // Dispatch browser custom event (for client-side consumers)\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('vibe-content-update', { detail: event }));\n }\n\n // Fire webhooks (non-blocking)\n this.fireWebhooks(event);\n }\n\n private async fireWebhooks(event: VibeEvent) {\n for (const webhook of this.webhooks) {\n // Check if webhook subscribes to this event type\n if (webhook.events && webhook.events.length > 0 && !webhook.events.includes(event.type)) {\n continue;\n }\n\n try {\n const body = JSON.stringify(event);\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Vibe-Event': event.type,\n };\n\n // HMAC signature if secret is configured\n if (webhook.secret && typeof globalThis.crypto !== 'undefined') {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(webhook.secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(body));\n const hex = Array.from(new Uint8Array(signature)).map(b => b.toString(16).padStart(2, '0')).join('');\n headers['X-Vibe-Signature'] = `sha256=${hex}`;\n }\n\n fetch(webhook.url, {\n method: 'POST',\n headers,\n body,\n }).catch(err => {\n console.error(`[VibeCMS] Webhook delivery failed for ${webhook.url}:`, err);\n });\n } catch (e) {\n console.error(`[VibeCMS] Webhook error for ${webhook.url}:`, e);\n }\n }\n }\n}\n\nexport const vibeEvents = new VibeEventBus();\n","// packages/core/src/scheduler.ts\nimport { vibeEvents } from './events';\nimport type { CommitAuthor } from './engine/types';\n\ninterface SchedulerEngine {\n read: (c: string, s: string) => Promise<any>;\n write: (c: string, s: string, d: any) => Promise<void>;\n list: (c: string) => Promise<any[]>;\n commit?: (message: string, author?: CommitAuthor) => Promise<void>;\n push?: (token: string) => Promise<void>;\n}\n\ninterface SchedulerOptions {\n /** If true, auto-commit changes after publishing. Default: true */\n autoCommit?: boolean;\n /** If provided along with autoCommit, also push to remote after commit */\n pushToken?: string;\n /** Author for the auto-commit */\n author?: CommitAuthor;\n}\n\nconst DEFAULT_SCHEDULER_AUTHOR: CommitAuthor = {\n name: 'VibeCMS Scheduler',\n email: 'scheduler@vibecms.local'\n};\n\n/**\n * Process scheduled publications across all collections.\n * Call this from a cron job, API route, or serverless function.\n *\n * Returns the list of documents that were published.\n */\nexport async function processScheduledPublications(\n engine: SchedulerEngine,\n collections: string[],\n options?: SchedulerOptions\n): Promise<{ collection: string; slug: string }[]> {\n const now = new Date();\n const published: { collection: string; slug: string }[] = [];\n\n for (const collection of collections) {\n const slugs = await engine.list(collection);\n\n for (const slug of slugs) {\n const actualSlug = typeof slug === 'string' ? slug : slug.slug;\n const data = await engine.read(collection, actualSlug);\n if (!data) continue;\n\n // Skip already-published or documents without a schedule\n if (data.isPublished) continue;\n if (!data.scheduledPublishAt) continue;\n\n const scheduledDate = new Date(data.scheduledPublishAt);\n if (isNaN(scheduledDate.getTime())) continue;\n\n if (now >= scheduledDate) {\n data.isPublished = true;\n data.publishDate = now.toISOString();\n // Clear the schedule after publishing\n data.scheduledPublishAt = undefined;\n\n await engine.write(collection, actualSlug, data);\n\n vibeEvents.emit({\n type: 'content:publish',\n collection,\n slug: actualSlug,\n data,\n timestamp: Date.now(),\n });\n\n published.push({ collection, slug: actualSlug });\n }\n }\n }\n\n // Auto-commit published changes to git\n const shouldCommit = options?.autoCommit !== false;\n if (shouldCommit && published.length > 0 && engine.commit) {\n const slugList = published.map(p => `${p.collection}/${p.slug}`).join(', ');\n const author = options?.author || DEFAULT_SCHEDULER_AUTHOR;\n\n try {\n await engine.commit(`chore: auto-publish scheduled content (${slugList})`, author);\n\n vibeEvents.emit({\n type: 'content:commit',\n data: { published },\n timestamp: Date.now(),\n author,\n });\n\n // Push to remote if token provided\n if (options?.pushToken && engine.push) {\n await engine.push(options.pushToken);\n }\n } catch (e) {\n console.error('[VibeCMS Scheduler] Auto-commit failed:', e);\n }\n }\n\n return published;\n}\n","import { StorageDriver, StorageContext } from '../types';\n\n/**\n * GitStorageDriver (Default)\n * Pushes media into the local git repository using isomorphic-git.\n * Warning: This will cause repository bloat for large sites.\n */\nexport class GitStorageDriver implements StorageDriver {\n async upload(file: File, context: StorageContext) {\n // Defer back to the engine's built-in isomorphic git writeMedia method\n return context.engine.writeMedia(file, context.author);\n }\n\n async list(context: StorageContext): Promise<string[]> {\n return context.engine.listMedia();\n }\n\n async delete(fileName: string, context: StorageContext): Promise<void> {\n return context.engine.deleteMedia(fileName);\n }\n\n async rename(oldFileName: string, newFileName: string, context: StorageContext): Promise<void> {\n return context.engine.renameMedia(oldFileName, newFileName);\n }\n}\n","import { StorageDriver, StorageContext } from '../types';\n\nexport interface VercelBlobDriverConfig {\n endpoint?: string;\n}\n\n/**\n * VercelBlobDriver\n * Uploads media to Vercel Blob via a backend API route.\n * Keeps media out of the git repository to prevent bloat.\n */\nexport class VercelBlobDriver implements StorageDriver {\n private endpoint: string;\n\n constructor(config?: VercelBlobDriverConfig) {\n this.endpoint = config?.endpoint || '/api/upload';\n }\n\n async upload(file: File, context: StorageContext) {\n const formData = new FormData();\n formData.append('file', file);\n\n const response = await fetch(this.endpoint, {\n method: 'POST',\n body: formData,\n });\n\n if (!response.ok) {\n const errData = await response.json().catch(() => null);\n throw new Error(errData?.error || 'Failed to upload to Vercel Blob');\n }\n\n const data = await response.json();\n \n // We can extract intrinsic dimensions efficiently by creating a local temporary URL\n if (typeof window !== 'undefined') {\n try {\n const tempUrl = URL.createObjectURL(file);\n const img = new Image();\n img.src = tempUrl;\n await new Promise(resolve => { img.onload = resolve; img.onerror = resolve; });\n URL.revokeObjectURL(tempUrl);\n \n return {\n url: data.url,\n width: img.naturalWidth,\n height: img.naturalHeight,\n alt: file.name\n };\n } catch (e) {\n return data.url;\n }\n }\n \n }\n\n async list(context: StorageContext): Promise<string[]> {\n const response = await fetch(`${this.endpoint}?action=list`);\n if (!response.ok) throw new Error('Failed to list Vercel blobs');\n const data = await response.json();\n return data.files || [];\n }\n\n async delete(fileName: string, context: StorageContext): Promise<void> {\n const response = await fetch(`${this.endpoint}?action=delete&file=${encodeURIComponent(fileName)}`, { method: 'DELETE' });\n if (!response.ok) throw new Error(`Failed to delete blob: ${fileName}`);\n }\n\n async rename(oldFileName: string, newFileName: string, context: StorageContext): Promise<void> {\n const response = await fetch(`${this.endpoint}?action=rename&oldFile=${encodeURIComponent(oldFileName)}&newFile=${encodeURIComponent(newFileName)}`, { method: 'POST' });\n if (!response.ok) throw new Error(`Failed to rename blob: ${oldFileName}`);\n }\n}\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\ninterface VibeTextProps {\n /** Initial content value (from server-side VibeEngine.read()) */\n value: string;\n /** The field path for editor integration (e.g. \"blocks.0.title\" or \"tagline\") */\n fieldPath: string;\n /** Collection name for live-update matching */\n collection?: string;\n /** Document slug for live-update matching */\n slug?: string;\n /** HTML tag to render. Default: 'span' */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional className */\n className?: string;\n /** Additional props passed to the rendered element */\n [key: string]: any;\n}\n\n/**\n * Inline-editable text primitive. Place this anywhere in your existing layout\n * to make a single text field CMS-editable.\n *\n * Usage:\n * <VibeText value={settings.tagline} fieldPath=\"tagline\" collection=\"settings\" slug=\"site\" />\n *\n * In production: renders as a plain element with no overhead.\n * In editor mode: highlights on hover, clicks focus the field in the editor sidebar.\n */\nexport function VibeText({\n value,\n fieldPath,\n collection,\n slug,\n as: Tag = 'span',\n className = '',\n ...rest\n}: VibeTextProps) {\n const [liveValue, setLiveValue] = useState(value);\n const [isEditorActive, setIsEditorActive] = useState(false);\n\n useEffect(() => {\n setLiveValue(value);\n }, [value]);\n\n useEffect(() => {\n const active =\n typeof window !== 'undefined' &&\n (window.location.search.includes('vibe-editor=true') ||\n (window as any).VIBE_EDITOR_ACTIVE ||\n sessionStorage.getItem('vibe_edit') === 'true');\n setIsEditorActive(active);\n\n if (!active || !collection || !slug) return;\n\n const handleUpdate = (event: any) => {\n const detail = event.detail;\n const eventSlug = detail.slug?.replace('.json', '');\n const targetSlug = slug.replace('.json', '');\n\n if (detail.collection === collection && eventSlug === targetSlug && detail.data) {\n // Resolve the field path from the updated data\n const keys = fieldPath.split('.');\n let val: any = detail.data;\n for (const k of keys) {\n if (val === undefined || val === null) break;\n val = val[k];\n }\n if (val !== undefined && typeof val === 'string') {\n setLiveValue(val);\n }\n }\n };\n\n window.addEventListener('vibe-content-update', handleUpdate);\n return () => window.removeEventListener('vibe-content-update', handleUpdate);\n }, [collection, slug, fieldPath]);\n\n const handleClick = (e: React.MouseEvent) => {\n if (!isEditorActive) return;\n e.stopPropagation();\n // Dispatch field focus event for the editor sidebar\n window.dispatchEvent(\n new CustomEvent('vibe-field-focus', { detail: { fieldPath } })\n );\n };\n\n const editorStyles = isEditorActive\n ? 'cursor-pointer transition-all duration-200 ring-1 ring-transparent hover:ring-indigo-500 hover:bg-indigo-500/10 rounded'\n : '';\n\n // Remove custom props before passing to DOM\n const { value: _, fieldPath: __, collection: ___, slug: ____, as: _____, ...domProps } = rest;\n\n return (\n <Tag\n className={`${editorStyles} ${className}`.trim()}\n onClick={handleClick}\n data-vibe-path={isEditorActive ? fieldPath : undefined}\n {...domProps}\n >\n {liveValue}\n </Tag>\n );\n}\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\ninterface VibeImageProps {\n /** Image URL (from server-side VibeEngine.read()) */\n src: string;\n /** Alt text */\n alt?: string;\n /** The field path for editor integration (e.g. \"coverImage\" or \"blocks.0.image\") */\n fieldPath: string;\n /** Collection name for live-update matching */\n collection?: string;\n /** Document slug for live-update matching */\n slug?: string;\n /** Additional className */\n className?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number | string;\n /** Additional props passed to the img element */\n [key: string]: any;\n}\n\n/**\n * Inline-editable image primitive. Place this anywhere in your existing layout\n * to make a single image field CMS-editable.\n *\n * Usage:\n * <VibeImage src={page.heroImage} fieldPath=\"heroImage\" collection=\"pages\" slug=\"about\" />\n *\n * In production: renders as a plain <img> with no overhead.\n * In editor mode: highlights on hover, clicks focus the field in the editor sidebar.\n */\nexport function VibeImage({\n src,\n alt = '',\n fieldPath,\n collection,\n slug,\n className = '',\n width,\n height,\n ...rest\n}: VibeImageProps) {\n const [liveSrc, setLiveSrc] = useState(src);\n const [isEditorActive, setIsEditorActive] = useState(false);\n\n useEffect(() => {\n setLiveSrc(src);\n }, [src]);\n\n useEffect(() => {\n const active =\n typeof window !== 'undefined' &&\n (window.location.search.includes('vibe-editor=true') ||\n (window as any).VIBE_EDITOR_ACTIVE ||\n sessionStorage.getItem('vibe_edit') === 'true');\n setIsEditorActive(active);\n\n if (!active || !collection || !slug) return;\n\n const handleUpdate = (event: any) => {\n const detail = event.detail;\n const eventSlug = detail.slug?.replace('.json', '');\n const targetSlug = slug.replace('.json', '');\n\n if (detail.collection === collection && eventSlug === targetSlug && detail.data) {\n const keys = fieldPath.split('.');\n let val: any = detail.data;\n for (const k of keys) {\n if (val === undefined || val === null) break;\n val = val[k];\n }\n if (val !== undefined && typeof val === 'string') {\n setLiveSrc(val);\n }\n }\n };\n\n window.addEventListener('vibe-content-update', handleUpdate);\n return () => window.removeEventListener('vibe-content-update', handleUpdate);\n }, [collection, slug, fieldPath]);\n\n const handleClick = (e: React.MouseEvent) => {\n if (!isEditorActive) return;\n e.stopPropagation();\n window.dispatchEvent(\n new CustomEvent('vibe-field-focus', { detail: { fieldPath } })\n );\n };\n\n const editorStyles = isEditorActive\n ? 'cursor-pointer transition-all duration-200 ring-1 ring-transparent hover:ring-indigo-500 hover:bg-indigo-500/10 rounded'\n : '';\n\n // Remove custom props before passing to DOM\n const { fieldPath: _, collection: __, slug: ___, ...domProps } = rest;\n\n if (!liveSrc) {\n if (!isEditorActive) return null;\n return (\n <div\n className={`${editorStyles} ${className} flex items-center justify-center bg-neutral-100 border-2 border-dashed border-neutral-300 rounded-lg min-h-[120px]`.trim()}\n onClick={handleClick}\n data-vibe-path={fieldPath}\n >\n <span className=\"text-neutral-400 text-sm\">Click to add image</span>\n </div>\n );\n }\n\n return (\n <img\n src={liveSrc}\n alt={alt}\n width={width}\n height={height}\n className={`${editorStyles} ${className}`.trim()}\n onClick={handleClick}\n data-vibe-path={isEditorActive ? fieldPath : undefined}\n {...domProps}\n />\n );\n}\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\ninterface VibeRichTextProps {\n /** HTML content (from server-side VibeEngine.read()) */\n html: string;\n /** The field path for editor integration */\n fieldPath: string;\n /** Collection name for live-update matching */\n collection?: string;\n /** Document slug for live-update matching */\n slug?: string;\n /** HTML tag to render. Default: 'div' */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional className */\n className?: string;\n /** Additional props passed to the rendered element */\n [key: string]: any;\n}\n\n/**\n * Inline-editable rich text primitive. Renders sanitized HTML content\n * that can be edited via the CMS sidebar.\n *\n * Usage:\n * <VibeRichText html={page.description} fieldPath=\"description\" collection=\"pages\" slug=\"about\" />\n *\n * In production: renders as a plain div with dangerouslySetInnerHTML.\n * In editor mode: highlights on hover, clicks focus the field in the editor sidebar.\n */\nexport function VibeRichText({\n html,\n fieldPath,\n collection,\n slug,\n as: Tag = 'div',\n className = '',\n ...rest\n}: VibeRichTextProps) {\n const [liveHtml, setLiveHtml] = useState(html);\n const [isEditorActive, setIsEditorActive] = useState(false);\n\n useEffect(() => {\n setLiveHtml(html);\n }, [html]);\n\n useEffect(() => {\n const active =\n typeof window !== 'undefined' &&\n (window.location.search.includes('vibe-editor=true') ||\n (window as any).VIBE_EDITOR_ACTIVE ||\n sessionStorage.getItem('vibe_edit') === 'true');\n setIsEditorActive(active);\n\n if (!active || !collection || !slug) return;\n\n const handleUpdate = (event: any) => {\n const detail = event.detail;\n const eventSlug = detail.slug?.replace('.json', '');\n const targetSlug = slug.replace('.json', '');\n\n if (detail.collection === collection && eventSlug === targetSlug && detail.data) {\n const keys = fieldPath.split('.');\n let val: any = detail.data;\n for (const k of keys) {\n if (val === undefined || val === null) break;\n val = val[k];\n }\n if (val !== undefined && typeof val === 'string') {\n setLiveHtml(val);\n }\n }\n };\n\n window.addEventListener('vibe-content-update', handleUpdate);\n return () => window.removeEventListener('vibe-content-update', handleUpdate);\n }, [collection, slug, fieldPath]);\n\n const handleClick = (e: React.MouseEvent) => {\n if (!isEditorActive) return;\n e.stopPropagation();\n window.dispatchEvent(\n new CustomEvent('vibe-field-focus', { detail: { fieldPath } })\n );\n };\n\n const editorStyles = isEditorActive\n ? 'cursor-pointer transition-all duration-200 ring-1 ring-transparent hover:ring-indigo-500 hover:bg-indigo-500/10 rounded'\n : '';\n\n // Remove custom props before passing to DOM\n const { html: _, fieldPath: __, collection: ___, slug: ____, as: _____, ...domProps } = rest;\n\n return (\n <Tag\n className={`${editorStyles} ${className}`.trim()}\n onClick={handleClick}\n data-vibe-path={isEditorActive ? fieldPath : undefined}\n dangerouslySetInnerHTML={{ __html: liveHtml || '' }}\n {...domProps}\n />\n );\n}\n","'use client';\nimport React, {\n useEffect,\n useState,\n useRef,\n useCallback,\n createContext,\n useContext,\n} from 'react';\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst PANEL_DEFAULT_WIDTH = 420;\nconst PANEL_MIN_WIDTH = 320;\nconst PANEL_MAX_WIDTH = 640;\nconst MOBILE_BREAKPOINT = 768;\nconst DRAWER_DEFAULT_HEIGHT_VH = 60;\nconst DRAWER_MIN_HEIGHT_VH = 40;\nconst DRAWER_MAX_HEIGHT_VH = 90;\nconst Z_PANEL = 9998;\nconst Z_BACKDROP = 9997;\nconst Z_BADGE = 9999;\nconst TRANSITION_CSS = 'margin 0.3s cubic-bezier(0.4, 0, 0.2, 1)';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\ninterface VibeOverlayConfig {\n auth?: {\n getSession(): Promise<{ user: any; accessToken?: string } | null>;\n signIn?(): void;\n };\n collections?: Record<string, { name: string; schema: any }>;\n singletons?: Record<string, { name: string; schema: any }>;\n blocks?: Array<{ type: string; component: any }>;\n contentDir?: string;\n publicDir?: string;\n media?: { driver: any };\n access?: Array<{ email: string; role: string }>;\n webhooks?: Array<{ url: string; events: string[]; secret?: string }>;\n}\n\ninterface VibeOverlayProps {\n /** Your vibe.config.ts export */\n config: VibeOverlayConfig;\n /** Position of the docked panel (desktop/tablet). Default: 'right' */\n position?: 'left' | 'right';\n /** Initial panel width in px. Default: 420 */\n panelWidth?: number;\n /** Custom content to render inside the editor panel (e.g. your own <Editor /> component) */\n children?: React.ReactNode;\n}\n\ninterface VibeOverlayContextValue {\n isActive: boolean;\n toggle: () => void;\n focusedField: string | null;\n isMobile: boolean;\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nconst VibeOverlayCtx = createContext<VibeOverlayContextValue>({\n isActive: false,\n toggle: () => {},\n focusedField: null,\n isMobile: false,\n});\n\nexport const useVibeOverlay = () => useContext(VibeOverlayCtx);\n\n// ─── Utility: clamp panel width ───────────────────────────────────────────────\n\nfunction clampWidth(requested: number): number {\n const maxFromViewport =\n typeof window !== 'undefined'\n ? Math.floor(window.innerWidth * 0.5)\n : PANEL_MAX_WIDTH;\n return Math.min(\n Math.min(PANEL_MAX_WIDTH, maxFromViewport),\n Math.max(PANEL_MIN_WIDTH, requested)\n );\n}\n\n// ─── Utility: supports dvh ───────────────────────────────────────────────────\n\nfunction supportsDvh(): boolean {\n if (typeof CSS === 'undefined') return false;\n return CSS.supports('height', '100dvh');\n}\n\n// ═══════════════════════════════════════════════════════════════════════════════\n// VibeOverlay — Docked Editor Panel (DevTools Pattern)\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport function VibeOverlay({\n config,\n position = 'right',\n panelWidth: initialWidth = PANEL_DEFAULT_WIDTH,\n children,\n}: VibeOverlayProps) {\n // ─── State ────────────────────────────────────────────────────────────\n const [isActive, setIsActive] = useState(false);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n const [focusedField, setFocusedField] = useState<string | null>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [width, setWidth] = useState(clampWidth(initialWidth));\n const [drawerHeight, setDrawerHeight] = useState(DRAWER_DEFAULT_HEIGHT_VH);\n\n // ─── Refs ─────────────────────────────────────────────────────────────\n const panelRef = useRef<HTMLDivElement>(null);\n const isResizing = useRef(false);\n const isDraggingDrawer = useRef(false);\n const savedHtmlMargin = useRef<string>('');\n const savedHtmlOverflow = useRef<string>('');\n\n // ─── Authentication ───────────────────────────────────────────────────\n useEffect(() => {\n if (!config.auth) {\n setIsAuthenticated(true);\n setIsLoaded(true);\n return;\n }\n config.auth.getSession().then((session) => {\n setIsAuthenticated(!!session);\n setIsLoaded(true);\n });\n }, [config.auth]);\n\n // ─── Restore persisted width ──────────────────────────────────────────\n useEffect(() => {\n try {\n const stored = sessionStorage.getItem('vibe_panel_width');\n if (stored) {\n const parsed = parseInt(stored, 10);\n if (!isNaN(parsed)) setWidth(clampWidth(parsed));\n }\n } catch {}\n }, []);\n\n // ─── Mobile detection via matchMedia ──────────────────────────────────\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mql = window.matchMedia(`(min-width: ${MOBILE_BREAKPOINT}px)`);\n const handler = (e: MediaQueryListEvent | MediaQueryList) => {\n setIsMobile(!e.matches);\n };\n\n // Initial check\n handler(mql);\n\n // Listen for changes\n if (mql.addEventListener) {\n mql.addEventListener('change', handler as any);\n return () => mql.removeEventListener('change', handler as any);\n } else {\n // Safari <14 fallback\n mql.addListener(handler as any);\n return () => mql.removeListener(handler as any);\n }\n }, []);\n\n // ─── HTML margin management (the DevTools trick) ──────────────────────\n useEffect(() => {\n const html = document.documentElement;\n\n if (isActive && !isMobile) {\n // Save existing margin before we override\n savedHtmlMargin.current = html.style.getPropertyValue(\n position === 'right' ? 'margin-right' : 'margin-left'\n );\n savedHtmlOverflow.current = html.style.getPropertyValue('overflow-x');\n\n // Apply transition\n html.style.transition = TRANSITION_CSS;\n\n // Apply margin to push page content\n if (position === 'right') {\n html.style.marginRight = `${width}px`;\n html.style.marginLeft = '';\n } else {\n html.style.marginLeft = `${width}px`;\n html.style.marginRight = '';\n }\n\n // Prevent horizontal scrollbar\n html.style.overflowX = 'hidden';\n } else {\n // Restore original values\n html.style.transition = TRANSITION_CSS;\n\n if (position === 'right') {\n html.style.marginRight = savedHtmlMargin.current || '';\n } else {\n html.style.marginLeft = savedHtmlMargin.current || '';\n }\n html.style.overflowX = savedHtmlOverflow.current || '';\n\n // Clean transition after animation completes\n const tid = setTimeout(() => {\n html.style.transition = '';\n }, 350);\n return () => clearTimeout(tid);\n }\n\n return () => {\n // Full cleanup on unmount\n html.style.marginRight = '';\n html.style.marginLeft = '';\n html.style.overflowX = savedHtmlOverflow.current || '';\n html.style.transition = '';\n };\n }, [isActive, isMobile, width, position]);\n\n // ─── Re-clamp width on window resize ──────────────────────────────────\n useEffect(() => {\n if (!isActive || isMobile) return;\n\n const handler = () => {\n setWidth((prev) => clampWidth(prev));\n };\n\n window.addEventListener('resize', handler);\n return () => window.removeEventListener('resize', handler);\n }, [isActive, isMobile]);\n\n // ─── Activation helpers ───────────────────────────────────────────────\n const activate = useCallback(() => {\n setIsActive(true);\n try {\n sessionStorage.setItem('vibe_edit', 'true');\n } catch {}\n (window as any).VIBE_EDITOR_ACTIVE = true;\n }, []);\n\n const deactivate = useCallback(() => {\n setIsActive(false);\n setFocusedField(null);\n try {\n sessionStorage.removeItem('vibe_edit');\n } catch {}\n (window as any).VIBE_EDITOR_ACTIVE = false;\n }, []);\n\n const toggle = useCallback(() => {\n setIsActive((prev) => {\n const next = !prev;\n if (next) {\n try { sessionStorage.setItem('vibe_edit', 'true'); } catch {}\n (window as any).VIBE_EDITOR_ACTIVE = true;\n } else {\n setFocusedField(null);\n try { sessionStorage.removeItem('vibe_edit'); } catch {}\n (window as any).VIBE_EDITOR_ACTIVE = false;\n }\n return next;\n });\n }, []);\n\n // ─── Keyboard shortcuts ───────────────────────────────────────────────\n useEffect(() => {\n if (!isLoaded || !isAuthenticated) return;\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'e' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n toggle();\n }\n if (e.key === 'Escape' && isActive) {\n deactivate();\n }\n };\n\n // Restore session state\n try {\n if (sessionStorage.getItem('vibe_edit') === 'true') {\n activate();\n }\n } catch {}\n\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [isLoaded, isAuthenticated, isActive, toggle, activate, deactivate]);\n\n // ─── Click interception for data-vibe-path elements ───────────────────\n useEffect(() => {\n if (!isActive) return;\n\n const handler = (e: MouseEvent) => {\n // Don't intercept clicks inside the panel\n if (panelRef.current?.contains(e.target as Node)) return;\n\n const target = e.target as HTMLElement;\n const vibeEl = target.closest('[data-vibe-path]') as HTMLElement;\n if (vibeEl && vibeEl.dataset.vibePath) {\n e.preventDefault();\n e.stopPropagation();\n const fieldPath = vibeEl.dataset.vibePath;\n setFocusedField(fieldPath);\n window.dispatchEvent(\n new CustomEvent('vibe-field-focus', { detail: { fieldPath } })\n );\n }\n };\n\n document.addEventListener('click', handler, true);\n return () => document.removeEventListener('click', handler, true);\n }, [isActive]);\n\n // ─── Listen for vibe-field-focus events from VibeText/VibeImage ───────\n useEffect(() => {\n if (!isActive) return;\n\n const handler = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n if (detail?.fieldPath) {\n setFocusedField(detail.fieldPath);\n }\n };\n\n window.addEventListener('vibe-field-focus', handler);\n return () => window.removeEventListener('vibe-field-focus', handler);\n }, [isActive]);\n\n // ─── Sidebar resize handle (desktop/tablet) ──────────────────────────\n const onResizeStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n isResizing.current = true;\n const startX = e.clientX;\n const startWidth = width;\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (!isResizing.current) return;\n const delta =\n position === 'right'\n ? startX - moveEvent.clientX\n : moveEvent.clientX - startX;\n const newWidth = clampWidth(startWidth + delta);\n setWidth(newWidth);\n };\n\n const onMouseUp = () => {\n isResizing.current = false;\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n // Persist width\n try {\n sessionStorage.setItem('vibe_panel_width', String(width));\n } catch {}\n };\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n },\n [width, position]\n );\n\n // ─── Drawer drag handle (mobile) ─────────────────────────────────────\n const onDrawerDragStart = useCallback(\n (e: React.TouchEvent) => {\n isDraggingDrawer.current = true;\n const startY = e.touches[0].clientY;\n const startHeightPx = (drawerHeight / 100) * window.innerHeight;\n\n const onTouchMove = (moveEvent: TouchEvent) => {\n if (!isDraggingDrawer.current) return;\n moveEvent.preventDefault();\n const deltaY = startY - moveEvent.touches[0].clientY;\n const newHeightPx = startHeightPx + deltaY;\n const newHeightVh = Math.min(\n DRAWER_MAX_HEIGHT_VH,\n Math.max(DRAWER_MIN_HEIGHT_VH, (newHeightPx / window.innerHeight) * 100)\n );\n setDrawerHeight(newHeightVh);\n };\n\n const onTouchEnd = () => {\n isDraggingDrawer.current = false;\n document.removeEventListener('touchmove', onTouchMove);\n document.removeEventListener('touchend', onTouchEnd);\n };\n\n document.addEventListener('touchmove', onTouchMove, { passive: false });\n document.addEventListener('touchend', onTouchEnd);\n },\n [drawerHeight]\n );\n\n // ─── Don't render until auth check completes ──────────────────────────\n if (!isLoaded || !isAuthenticated) return null;\n\n // ─── Shared inline styles (no Tailwind dependency) ────────────────────\n const fontFamily = 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n const useDvh = supportsDvh();\n\n // ═════════════════════════════════════════════════════════════════════════\n // Render\n // ═════════════════════════════════════════════════════════════════════════\n\n return (\n <VibeOverlayCtx.Provider value={{ isActive, toggle, focusedField, isMobile }}>\n\n {/* ── Edit Badge (visible when panel is closed) ──────────────────── */}\n {!isActive && (\n <button\n onClick={activate}\n style={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: Z_BADGE,\n background: '#171717',\n color: '#fff',\n padding: '8px 14px',\n borderRadius: 10,\n border: 'none',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n cursor: 'pointer',\n fontSize: 13,\n fontWeight: 500,\n fontFamily,\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n transition: 'background 0.2s, transform 0.2s',\n }}\n onMouseEnter={(e) => {\n const el = e.currentTarget;\n el.style.background = '#2a2a2a';\n el.style.transform = 'scale(1.04)';\n }}\n onMouseLeave={(e) => {\n const el = e.currentTarget;\n el.style.background = '#171717';\n el.style.transform = 'scale(1)';\n }}\n title=\"Toggle CMS Editor (Ctrl+E)\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n Edit\n </button>\n )}\n\n {/* ── Mobile backdrop (visible when drawer is open) ──────────────── */}\n {isActive && isMobile && (\n <div\n onClick={deactivate}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: Z_BACKDROP,\n background: 'rgba(0, 0, 0, 0.4)',\n backdropFilter: 'blur(2px)',\n transition: 'opacity 0.3s',\n }}\n />\n )}\n\n {/* ── Panel: Desktop/Tablet Sidebar OR Mobile Drawer ─────────────── */}\n {isActive && (\n <div\n ref={panelRef}\n style={\n isMobile\n ? {\n // ── Mobile: Bottom Drawer ──\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n height: useDvh ? `${drawerHeight}dvh` : `${drawerHeight}vh`,\n zIndex: Z_PANEL,\n fontFamily,\n display: 'flex',\n flexDirection: 'column',\n background: '#fff',\n borderTop: '1px solid #e5e5e5',\n borderRadius: '16px 16px 0 0',\n boxShadow: '0 -8px 32px rgba(0,0,0,0.12)',\n touchAction: 'none',\n transition: isDraggingDrawer.current ? 'none' : 'height 0.2s ease',\n }\n : {\n // ── Desktop/Tablet: Docked Sidebar ──\n position: 'fixed',\n top: 0,\n [position]: 0,\n width: `${width}px`,\n height: useDvh ? '100dvh' : '100vh',\n zIndex: Z_PANEL,\n fontFamily,\n display: 'flex',\n flexDirection: 'column',\n background: '#fff',\n borderLeft: position === 'right' ? '1px solid #e5e5e5' : 'none',\n borderRight: position === 'left' ? '1px solid #e5e5e5' : 'none',\n boxShadow:\n position === 'right'\n ? '-4px 0 24px rgba(0,0,0,0.06)'\n : '4px 0 24px rgba(0,0,0,0.06)',\n }\n }\n >\n {/* ── Mobile: Drag Handle ────────────────────────────────────── */}\n {isMobile && (\n <div\n onTouchStart={onDrawerDragStart}\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 28,\n flexShrink: 0,\n cursor: 'row-resize',\n touchAction: 'none',\n }}\n >\n <div\n style={{\n width: 36,\n height: 4,\n borderRadius: 2,\n background: '#d4d4d4',\n }}\n />\n </div>\n )}\n\n {/* ── Desktop/Tablet: Resize Handle ─────────────────────────── */}\n {!isMobile && (\n <ResizeHandle position={position} onResizeStart={onResizeStart} />\n )}\n\n {/* ── Header ─────────────────────────────────────────────────── */}\n <div\n style={{\n height: 48,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 16px',\n borderBottom: '1px solid #e5e5e5',\n background: '#fafafa',\n flexShrink: 0,\n }}\n >\n <span style={{ fontWeight: 600, fontSize: 13, color: '#171717' }}>\n VibeCMS\n </span>\n <button\n onClick={deactivate}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 4,\n color: '#a3a3a3',\n display: 'flex',\n transition: 'color 0.2s',\n }}\n onMouseEnter={(e) => { (e.currentTarget).style.color = '#171717'; }}\n onMouseLeave={(e) => { (e.currentTarget).style.color = '#a3a3a3'; }}\n title=\"Close Editor (Escape)\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n\n {/* ── Body (scrollable) ──────────────────────────────────────── */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n WebkitOverflowScrolling: 'touch',\n minHeight: 0,\n }}\n >\n {children ? (\n children\n ) : (\n <DefaultEditorContent\n focusedField={focusedField}\n config={config}\n />\n )}\n </div>\n </div>\n )}\n </VibeOverlayCtx.Provider>\n );\n}\n\n// ─── Resize Handle (sub-component) ────────────────────────────────────────────\n\nfunction ResizeHandle({\n position,\n onResizeStart,\n}: {\n position: 'left' | 'right';\n onResizeStart: (e: React.MouseEvent) => void;\n}) {\n const [isHovered, setIsHovered] = useState(false);\n const edge = position === 'right' ? 'left' : 'right';\n\n return (\n <div\n onMouseDown={onResizeStart}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: 'absolute',\n top: 0,\n [edge]: -3,\n width: 6,\n height: '100%',\n cursor: 'col-resize',\n zIndex: 10,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {/* Visual indicator line */}\n <div\n style={{\n width: 2,\n height: '100%',\n background: isHovered ? '#6366f1' : 'transparent',\n transition: 'background 0.2s',\n borderRadius: 1,\n }}\n />\n </div>\n );\n}\n\n// ─── Default Editor Content (when no children provided) ───────────────────────\n\nfunction DefaultEditorContent({\n focusedField,\n config,\n}: {\n focusedField: string | null;\n config: VibeOverlayConfig;\n}) {\n const collections = config.collections ?? {};\n const singletons = config.singletons ?? {};\n const allCollections = { ...collections, ...singletons };\n\n return (\n <div style={{ padding: 16 }}>\n {/* Focused field indicator */}\n {focusedField && (\n <div\n style={{\n background: '#eef2ff',\n border: '1px solid #c7d2fe',\n borderRadius: 8,\n padding: '10px 12px',\n marginBottom: 16,\n fontSize: 12,\n }}\n >\n <div style={{ color: '#6366f1', fontWeight: 600, marginBottom: 2 }}>\n Selected field\n </div>\n <code\n style={{\n color: '#4338ca',\n background: '#e0e7ff',\n padding: '2px 6px',\n borderRadius: 4,\n fontSize: 11,\n wordBreak: 'break-all',\n }}\n >\n {focusedField}\n </code>\n </div>\n )}\n\n {/* Collection list */}\n {Object.keys(allCollections).length > 0 && (\n <div style={{ marginBottom: 24 }}>\n <div\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#a3a3a3',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: 8,\n }}\n >\n Collections\n </div>\n {Object.entries(allCollections).map(([key, col]) => (\n <div\n key={key}\n style={{\n padding: '8px 10px',\n borderRadius: 6,\n border: '1px solid #f5f5f5',\n marginBottom: 4,\n fontSize: 13,\n color: '#525252',\n cursor: 'pointer',\n transition: 'background 0.15s',\n }}\n onMouseEnter={(e) => {\n (e.currentTarget).style.background = '#fafafa';\n }}\n onMouseLeave={(e) => {\n (e.currentTarget).style.background = '';\n }}\n >\n {col.name}\n <span style={{ color: '#d4d4d4', marginLeft: 6, fontSize: 11 }}>\n {key}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {/* Guidance */}\n {!focusedField && (\n <div\n style={{\n textAlign: 'center',\n color: '#a3a3a3',\n fontSize: 12,\n padding: '24px 0',\n lineHeight: 1.7,\n }}\n >\n <p style={{ marginBottom: 8 }}>\n Click any editable element on the page to select it.\n </p>\n <p style={{ fontSize: 11, color: '#d4d4d4' }}>\n Editable elements are created with{' '}\n <code style={{ background: '#f5f5f5', padding: '1px 4px', borderRadius: 3 }}>\n <VibeText>\n </code>\n ,{' '}\n <code style={{ background: '#f5f5f5', padding: '1px 4px', borderRadius: 3 }}>\n <VibeImage>\n </code>\n , or{' '}\n <code style={{ background: '#f5f5f5', padding: '1px 4px', borderRadius: 3 }}>\n <VibeRichText>\n </code>\n </p>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":["ButtonPrimitive","React","import_jsx_runtime","DialogPrimitive","React","import_class_variance_authority","React","import_jsx_runtime","InputPrimitive","React","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","CommandPrimitive","React","import_jsx_runtime","React","import_jsx_runtime","PopoverPrimitive","React","import_jsx_runtime","ScrollAreaPrimitive","React","import_dialog","import_lucide_react","import_jsx_runtime","SheetPrimitive","React","import_jsx_runtime","SwitchPrimitive","React","import_jsx_runtime","TooltipPrimitive","import_jsx_runtime","import_jsx_runtime","hasReferenceToSlug","crypto","document","import_react","import_zod","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
|