@signiphi/page-assembly 0.2.0-beta.2 → 0.2.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/lib/ui/button.tsx","../src/lib/ui/card.tsx","../src/lib/ui/input.tsx","../src/lib/ui/label.tsx","../src/lib/ui/badge.tsx","../src/lib/ui/select.tsx","../src/lib/ui/alert-dialog.tsx","../src/lib/ui/dropdown-menu.tsx","../src/lib/ui/tooltip.tsx","../src/utils/pdf-helpers.ts","../src/components/PageAssembler.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","React3","React4","LabelPrimitive","SelectPrimitive","React5","jsxs","ChevronDown","ChevronUp","Check","AlertDialogPrimitive","React6","DropdownMenuPrimitive","React7","ChevronRight","Circle","TooltipPrimitive","React8","pdfjsLib","PDFDocument","existingPageIds","useRef","useDrag","useDrop","useEffect","GripVertical","useCallback","useState","FileText","ImageIcon","X","MoreHorizontal","Trash2","forwardRef","useReducer","useMemo","useImperativeHandle","DndProvider","HTML5Backend","Fragment","Upload","FolderOpen"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils';\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\r\n destructive:\r\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\r\n outline:\r\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\r\n secondary:\r\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 rounded-md px-3',\r\n lg: 'h-11 md:h-12 rounded-md px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n);\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean;\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button';\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size }), className)}\r\n ref={ref}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nButton.displayName = 'Button';\r\n\r\nexport { Button, buttonVariants };\r\n","import * as React from 'react';\r\nimport { cn } from '../utils';\r\n\r\nconst Card = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'rounded-lg bg-card text-card-foreground shadow-sm',\r\n className\r\n )}\r\n style={{\r\n border: '1px solid hsl(var(--xpa-border))',\r\n ...((props.style || {}) as React.CSSProperties)\r\n }}\r\n {...props}\r\n />\r\n));\r\nCard.displayName = 'Card';\r\n\r\nconst CardHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn('flex flex-col space-y-1.5 p-6', className)}\r\n {...props}\r\n />\r\n));\r\nCardHeader.displayName = 'CardHeader';\r\n\r\nconst CardTitle = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLHeadingElement>\r\n>(({ className, ...props }, ref) => (\r\n <h3\r\n ref={ref}\r\n className={cn(\r\n 'text-2xl font-semibold leading-none tracking-tight',\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nCardTitle.displayName = 'CardTitle';\r\n\r\nconst CardDescription = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, ...props }, ref) => (\r\n <p\r\n ref={ref}\r\n className={cn('text-sm text-muted-foreground', className)}\r\n {...props}\r\n />\r\n));\r\nCardDescription.displayName = 'CardDescription';\r\n\r\nconst CardContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\r\n));\r\nCardContent.displayName = 'CardContent';\r\n\r\nconst CardFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn('flex items-center p-6 pt-0', className)}\r\n {...props}\r\n />\r\n));\r\nCardFooter.displayName = 'CardFooter';\r\n\r\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\r\n","import * as React from 'react';\r\nimport { cn } from '../utils';\r\n\r\nexport interface InputProps\r\n extends React.InputHTMLAttributes<HTMLInputElement> {}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n className={cn(\r\n 'flex h-10 w-full rounded-md border-2 border-input bg-background px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground transition-all duration-200 focus:outline-none focus:border-primary focus:ring-0 focus:shadow-[0_0_0_3px_rgba(0,153,205,0.15)] focus-visible:outline-none focus-visible:border-primary focus-visible:ring-0 focus-visible:shadow-[0_0_0_3px_rgba(0,153,205,0.15)] disabled:cursor-not-allowed disabled:opacity-50',\r\n className\r\n )}\r\n ref={ref}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nInput.displayName = 'Input';\r\n\r\nexport { Input };\r\n","import * as React from 'react';\r\nimport * as LabelPrimitive from '@radix-ui/react-label';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils';\r\n\r\nconst labelVariants = cva(\r\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\r\n);\r\n\r\nconst Label = React.forwardRef<\r\n React.ElementRef<typeof LabelPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\r\n VariantProps<typeof labelVariants> & {\r\n children?: React.ReactNode;\r\n }\r\n>(({ className, ...props }, ref) => (\r\n <LabelPrimitive.Root\r\n ref={ref}\r\n className={cn(labelVariants(), className)}\r\n {...props}\r\n />\r\n));\r\nLabel.displayName = LabelPrimitive.Root.displayName;\r\n\r\nexport { Label };\r\n","import * as React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils';\r\n\r\nconst badgeVariants = cva(\r\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\r\n secondary:\r\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n destructive:\r\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\r\n outline: 'text-foreground',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n },\r\n }\r\n);\r\n\r\nexport interface BadgeProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeVariants> {}\r\n\r\nfunction Badge({ className, variant, ...props }: BadgeProps) {\r\n return (\r\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\r\n );\r\n}\r\n\r\nexport { Badge, badgeVariants };\r\n","import * as React from 'react';\r\nimport * as SelectPrimitive from '@radix-ui/react-select';\r\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\r\nimport { cn } from '../utils';\r\n\r\nconst Select = SelectPrimitive.Root;\r\n\r\nconst SelectGroup = SelectPrimitive.Group;\r\n\r\nconst SelectValue = SelectPrimitive.Value;\r\n\r\nconst SelectTrigger = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Trigger>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\r\n>(({ className, children, ...props }, ref) => (\r\n <SelectPrimitive.Trigger\r\n ref={ref}\r\n className={cn(\r\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <SelectPrimitive.Icon asChild>\r\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n));\r\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\r\n\r\nconst SelectScrollUpButton = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.ScrollUpButton\r\n ref={ref}\r\n className={cn(\r\n 'flex cursor-default items-center justify-center py-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronUp className=\"h-4 w-4\" />\r\n </SelectPrimitive.ScrollUpButton>\r\n));\r\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\r\n\r\nconst SelectScrollDownButton = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.ScrollDownButton\r\n ref={ref}\r\n className={cn(\r\n 'flex cursor-default items-center justify-center py-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </SelectPrimitive.ScrollDownButton>\r\n));\r\nSelectScrollDownButton.displayName =\r\n SelectPrimitive.ScrollDownButton.displayName;\r\n\r\nconst SelectContent = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\r\n>(({ className, children, position = 'popper', ...props }, ref) => (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n 'relative max-h-96 min-w-[12rem] overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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',\r\n position === 'popper' &&\r\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\r\n className\r\n )}\r\n position={position}\r\n style={{ \r\n zIndex: 99999,\r\n backgroundColor: '#ffffff',\r\n border: '1px solid #e2e8f0',\r\n borderRadius: '0.5rem',\r\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',\r\n marginTop: '4px',\r\n }}\r\n {...props}\r\n >\r\n <SelectScrollUpButton />\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n position === 'popper' &&\r\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\r\n )}\r\n style={{ padding: '6px' }}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n <SelectScrollDownButton />\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n));\r\nSelectContent.displayName = SelectPrimitive.Content.displayName;\r\n\r\nconst SelectLabel = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.Label\r\n ref={ref}\r\n className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)}\r\n {...props}\r\n />\r\n));\r\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\r\n\r\nconst SelectItem = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\r\n>(({ className, children, ...props }, ref) => {\r\n const [isHovered, setIsHovered] = React.useState(false);\r\n \r\n return (\r\n <SelectPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n 'relative flex w-full cursor-pointer select-none items-center outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n className\r\n )}\r\n style={{\r\n backgroundColor: isHovered ? '#f1f5f9' : 'transparent',\r\n color: '#1e293b',\r\n padding: '8px 12px',\r\n borderRadius: '6px',\r\n fontSize: '14px',\r\n marginBottom: '2px',\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n {...props}\r\n >\r\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n <SelectPrimitive.ItemIndicator \r\n style={{ \r\n marginLeft: 'auto',\r\n paddingLeft: '8px',\r\n color: '#0099cd',\r\n }}\r\n >\r\n <Check className=\"h-4 w-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </SelectPrimitive.Item>\r\n );\r\n});\r\nSelectItem.displayName = SelectPrimitive.Item.displayName;\r\n\r\nconst SelectSeparator = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.Separator\r\n ref={ref}\r\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\r\n {...props}\r\n />\r\n));\r\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\r\n\r\nexport {\r\n Select,\r\n SelectGroup,\r\n SelectValue,\r\n SelectTrigger,\r\n SelectContent,\r\n SelectLabel,\r\n SelectItem,\r\n SelectSeparator,\r\n SelectScrollUpButton,\r\n SelectScrollDownButton,\r\n};\r\n","import * as React from \"react\"\r\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\r\n\r\nimport { cn } from \"../utils\"\r\nimport { buttonVariants } from \"./button\"\r\n\r\nconst AlertDialog = AlertDialogPrimitive.Root\r\n\r\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\r\n\r\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\r\n\r\nconst AlertDialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Overlay\r\n className={cn(\r\n \"fixed inset-0 z-[9998] bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n ref={ref}\r\n />\r\n))\r\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\r\n\r\nconst AlertDialogContent = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPortal container={document.querySelector('.signiphi-page-assembly') as HTMLElement}>\r\n <AlertDialogOverlay />\r\n <AlertDialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-[9999] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </AlertDialogPortal>\r\n))\r\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\r\n\r\nconst AlertDialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col space-y-2 text-center sm:text-left\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\r\n\r\nconst AlertDialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\r\n\r\nconst AlertDialogTitle = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\"text-lg font-semibold\", className)}\r\n {...props}\r\n />\r\n))\r\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\r\n\r\nconst AlertDialogDescription = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n))\r\nAlertDialogDescription.displayName =\r\n AlertDialogPrimitive.Description.displayName\r\n\r\nconst AlertDialogAction = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Action\r\n ref={ref}\r\n className={cn(buttonVariants(), className)}\r\n {...props}\r\n />\r\n))\r\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\r\n\r\nconst AlertDialogCancel = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Cancel\r\n ref={ref}\r\n className={cn(\r\n buttonVariants({ variant: \"outline\" }),\r\n \"mt-2 sm:mt-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogPortal,\r\n AlertDialogOverlay,\r\n AlertDialogTrigger,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogFooter,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n}\r\n","import * as React from \"react\"\r\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\r\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\r\n\r\nimport { cn } from \"../utils\"\r\n\r\nconst DropdownMenu = DropdownMenuPrimitive.Root\r\n\r\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\r\n\r\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\r\n\r\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\r\n\r\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\r\n\r\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\r\n\r\nconst DropdownMenuSubTrigger = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubTrigger\r\n ref={ref}\r\n className={cn(\r\n \"flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRight className=\"ml-auto\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n))\r\nDropdownMenuSubTrigger.displayName =\r\n DropdownMenuPrimitive.SubTrigger.displayName\r\n\r\nconst DropdownMenuSubContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubContent\r\n ref={ref}\r\n className={cn(\r\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSubContent.displayName =\r\n DropdownMenuPrimitive.SubContent.displayName\r\n\r\nconst DropdownMenuContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"min-w-[12rem] overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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\",\r\n className\r\n )}\r\n style={{\r\n zIndex: 99999,\r\n backgroundColor: '#ffffff',\r\n border: '1px solid #e2e8f0',\r\n borderRadius: '0.5rem',\r\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',\r\n padding: '6px',\r\n }}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n))\r\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\r\n\r\nconst DropdownMenuItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => {\r\n const [isHovered, setIsHovered] = React.useState(false);\r\n \r\n return (\r\n <DropdownMenuPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-pointer select-none items-center gap-2 outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n style={{\r\n backgroundColor: isHovered ? '#f1f5f9' : 'transparent',\r\n color: '#1e293b',\r\n padding: '8px 12px',\r\n borderRadius: '6px',\r\n fontSize: '14px',\r\n marginBottom: '2px',\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n {...props}\r\n />\r\n );\r\n})\r\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\r\n\r\nconst DropdownMenuCheckboxItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\r\n>(({ className, children, checked, ...props }, ref) => (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n))\r\nDropdownMenuCheckboxItem.displayName =\r\n DropdownMenuPrimitive.CheckboxItem.displayName\r\n\r\nconst DropdownMenuRadioItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\r\n>(({ className, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.RadioItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Circle className=\"h-2 w-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n))\r\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\r\n\r\nconst DropdownMenuLabel = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Label\r\n ref={ref}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-semibold\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\r\n\r\nconst DropdownMenuSeparator = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\r\n\r\nconst DropdownMenuShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuGroup,\r\n DropdownMenuPortal,\r\n DropdownMenuSub,\r\n DropdownMenuSubContent,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuRadioGroup,\r\n}\r\n","import * as React from \"react\"\r\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\r\n\r\nimport { cn } from \"../utils\"\r\n\r\nconst TooltipProvider = TooltipPrimitive.Provider\r\n\r\nconst Tooltip = TooltipPrimitive.Root\r\n\r\nconst TooltipTrigger = TooltipPrimitive.Trigger\r\n\r\nconst TooltipContent = React.forwardRef<\r\n React.ElementRef<typeof TooltipPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <TooltipPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md 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\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\r\n","import * as pdfjsLib from 'pdfjs-dist';\r\nimport { PDFDocument } from 'pdf-lib';\r\nimport type { PageImage } from '../types';\r\n\r\n// Set up PDF.js worker - use the self-hosted PDF.js worker\r\nif (typeof window !== 'undefined') {\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/build/pdf.worker.mjs';\r\n}\r\n\r\n/**\r\n * Converts a PDF document to an array of rendered page images\r\n *\r\n * @param pdfBytes - The PDF document as a Uint8Array\r\n * @param options - Optional configuration\r\n * @param options.hideFormFields - If true, hides existing form fields during rendering\r\n * @returns Promise resolving to array of PageImage objects with rendered images\r\n * @throws {Error} If PDF is invalid or rendering fails\r\n *\r\n * @example\r\n * ```ts\r\n * const pages = await pdfToImages(pdfBytes, { hideFormFields: true });\r\n * console.log(`Rendered ${pages.length} pages`);\r\n * ```\r\n */\r\nexport async function pdfToImages(\r\n pdfBytes: Uint8Array,\r\n options?: { hideFormFields?: boolean }\r\n): Promise<PageImage[]> {\r\n try {\r\n // Check if it starts with PDF header\r\n const header = new TextDecoder().decode(pdfBytes.slice(0, 10));\r\n\r\n if (!header.startsWith('%PDF-')) {\r\n console.error('Invalid PDF: Does not start with %PDF- header');\r\n throw new Error('Invalid PDF format: Missing PDF header');\r\n }\r\n\r\n // Set up PDF.js worker\r\n if (typeof window !== 'undefined') {\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/build/pdf.worker.mjs';\r\n }\r\n\r\n // Load PDF with PDF.js\r\n const loadingTask = pdfjsLib.getDocument({\r\n data: pdfBytes,\r\n verbosity: 0,\r\n });\r\n const pdfDoc = await loadingTask.promise;\r\n\r\n const pages: PageImage[] = [];\r\n\r\n // Try to load with pdf-lib for dimension comparison (optional)\r\n let pdfLibDoc = null;\r\n try {\r\n pdfLibDoc = await PDFDocument.load(pdfBytes);\r\n } catch {\r\n // PDF.js dimensions will be used instead\r\n }\r\n\r\n for (let pageNum = 1; pageNum <= pdfDoc.numPages; pageNum++) {\r\n const page = await pdfDoc.getPage(pageNum);\r\n const viewport = page.getViewport({ scale: 2.0 });\r\n\r\n // Get actual PDF dimensions (for coordinate conversion)\r\n let pdfWidth = viewport.width / 2.0;\r\n let pdfHeight = viewport.height / 2.0;\r\n\r\n // Use pdf-lib dimensions if available for consistency\r\n if (pdfLibDoc) {\r\n try {\r\n const pdfLibPage = pdfLibDoc.getPage(pageNum - 1);\r\n const pdfLibWidth = pdfLibPage.getWidth();\r\n const pdfLibHeight = pdfLibPage.getHeight();\r\n\r\n // Use pdf-lib dimensions for consistency\r\n pdfWidth = pdfLibWidth;\r\n pdfHeight = pdfLibHeight;\r\n } catch {\r\n // Use PDF.js dimensions as fallback\r\n }\r\n }\r\n\r\n // Create canvas at the scaled size for high quality rendering\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d')!;\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n\r\n // Render PDF page to canvas\r\n const hideFormFields = options?.hideFormFields ?? false;\r\n const renderContext = {\r\n canvasContext: context,\r\n viewport: viewport,\r\n // Hide annotations/form fields when specified\r\n renderInteractiveForms: !hideFormFields,\r\n // Additional options to ensure form fields are hidden\r\n ...(hideFormFields && {\r\n annotationMode: 0, // Disable annotations\r\n renderAnnotations: false,\r\n renderForms: false,\r\n }),\r\n };\r\n\r\n await page.render(renderContext).promise;\r\n\r\n // Convert canvas to data URL\r\n const imageUrl = canvas.toDataURL('image/png');\r\n\r\n pages.push({\r\n imageUrl,\r\n width: pdfWidth,\r\n height: pdfHeight,\r\n });\r\n }\r\n\r\n return pages;\r\n } catch (error) {\r\n console.error('Error converting PDF to images with PDF.js:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Converts an image file to a PDF document with a single page\r\n *\r\n * @param imageFile - The image file to convert (supports common image formats)\r\n * @returns Promise resolving to PDF bytes as Uint8Array\r\n * @throws {Error} If image fails to load or convert\r\n *\r\n * @example\r\n * ```ts\r\n * const pdfBytes = await imageToPdf(imageFile);\r\n * ```\r\n */\r\nexport async function imageToPdf(imageFile: File): Promise<Uint8Array> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d')!;\r\n\r\n img.onload = async () => {\r\n try {\r\n // Set canvas size to image size\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n // Draw image on canvas\r\n ctx.drawImage(img, 0, 0);\r\n\r\n // Convert canvas to PNG image data (canvas.toBlob defaults to PNG)\r\n canvas.toBlob(\r\n async (blob) => {\r\n if (!blob) {\r\n reject(new Error('Failed to convert image to blob'));\r\n return;\r\n }\r\n\r\n const imageBytes = new Uint8Array(await blob.arrayBuffer());\r\n\r\n // Create PDF with the image\r\n const pdfDoc = await PDFDocument.create();\r\n\r\n // Always embed as PNG since canvas.toBlob() produces PNG data\r\n const embeddedImage = await pdfDoc.embedPng(imageBytes);\r\n\r\n // Calculate dimensions to fit page while maintaining aspect ratio\r\n const { width, height } = embeddedImage.scale(1);\r\n const maxWidth = 595; // A4 width in points\r\n const maxHeight = 842; // A4 height in points\r\n\r\n let pageWidth = width;\r\n let pageHeight = height;\r\n\r\n // Scale down if image is larger than A4\r\n if (width > maxWidth || height > maxHeight) {\r\n const scale = Math.min(maxWidth / width, maxHeight / height);\r\n pageWidth = width * scale;\r\n pageHeight = height * scale;\r\n }\r\n\r\n // Create page with calculated dimensions\r\n const page = pdfDoc.addPage([\r\n Math.max(pageWidth, 100),\r\n Math.max(pageHeight, 100),\r\n ]);\r\n\r\n // Draw image centered on page\r\n const x = (page.getWidth() - pageWidth) / 2;\r\n const y = (page.getHeight() - pageHeight) / 2;\r\n\r\n page.drawImage(embeddedImage, {\r\n x: Math.max(x, 0),\r\n y: Math.max(y, 0),\r\n width: pageWidth,\r\n height: pageHeight,\r\n });\r\n\r\n const pdfBytes = await pdfDoc.save();\r\n resolve(pdfBytes);\r\n },\r\n 'image/png',\r\n 0.95\r\n ); // Explicitly specify PNG format with high quality\r\n } catch (error) {\r\n reject(error);\r\n }\r\n };\r\n\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n\r\n // Create object URL from file and set as image source\r\n const objectUrl = URL.createObjectURL(imageFile);\r\n img.src = objectUrl;\r\n });\r\n}\r\n\r\n/**\r\n * Create a blob URL from PDF bytes for preview\r\n *\r\n * @param pdfBytes - The PDF document as Uint8Array\r\n * @returns Blob URL string\r\n *\r\n * @example\r\n * ```ts\r\n * const url = createPdfBlobUrl(pdfBytes);\r\n * // Remember to revoke: URL.revokeObjectURL(url);\r\n * ```\r\n */\r\nexport function createPdfBlobUrl(pdfBytes: Uint8Array): string {\r\n const blob = new Blob([pdfBytes as unknown as BlobPart], {\r\n type: 'application/pdf',\r\n });\r\n return URL.createObjectURL(blob);\r\n}\r\n\r\n/**\r\n * Triggers a browser download of a PDF file\r\n *\r\n * @param pdfBytes - The PDF document as Uint8Array\r\n * @param filename - The filename for the downloaded file (e.g., 'document.pdf')\r\n *\r\n * @example\r\n * ```ts\r\n * downloadPdf(pdfBytes, 'assembled-document.pdf');\r\n * ```\r\n */\r\nexport function downloadPdf(pdfBytes: Uint8Array, filename: string): void {\r\n const blob = new Blob([pdfBytes as unknown as BlobPart], {\r\n type: 'application/pdf',\r\n });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n}\r\n","import React, { \r\n useState, \r\n useCallback, \r\n useEffect, \r\n useRef, \r\n forwardRef, \r\n useImperativeHandle, \r\n useReducer,\r\n useMemo\r\n} from 'react';\r\nimport { DndProvider, useDrag, useDrop } from 'react-dnd';\r\nimport { HTML5Backend } from 'react-dnd-html5-backend';\r\nimport { \r\n Upload, \r\n FileText, \r\n Image as ImageIcon, \r\n Trash2, \r\n MoreHorizontal,\r\n GripVertical,\r\n Check,\r\n X,\r\n FolderOpen\r\n} from 'lucide-react';\r\n\r\nimport {\r\n Button,\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n CardTitle,\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n Badge,\r\n Input,\r\n Label,\r\n Tooltip,\r\n TooltipContent,\r\n TooltipProvider,\r\n TooltipTrigger\r\n} from '../lib/ui';\r\n\r\nimport { pdfToImages, imageToPdf } from '../utils/pdf-helpers';\r\nimport { cn } from '../lib/utils';\r\nimport type { PageInfo, FileInfo, PageAssemblerState, PageAssemblerProps, PageAssemblerHandle } from '../types';\r\n\r\n// Multi-select utilities\r\nconst isMultiSelectModifier = (event: React.MouseEvent): boolean => {\r\n return event.ctrlKey || event.metaKey;\r\n};\r\n\r\nconst isRangeSelectModifier = (event: React.MouseEvent): boolean => {\r\n return event.shiftKey;\r\n};\r\n\r\nconst handleContextMenu = (event: React.MouseEvent): void => {\r\n if (event.ctrlKey && /Mac|iPod|iPhone|iPad/.test(navigator.userAgent)) {\r\n event.preventDefault();\r\n }\r\n};\r\n\r\nconst getPageRange = (files: FileInfo[], startPageId: string, endPageId: string): string[] => {\r\n const allPages: { id: string; fileId: string }[] = [];\r\n files.forEach(file => {\r\n file.pages.forEach(page => {\r\n allPages.push({ id: page.id, fileId: file.id });\r\n });\r\n });\r\n\r\n const startIndex = allPages.findIndex(p => p.id === startPageId);\r\n const endIndex = allPages.findIndex(p => p.id === endPageId);\r\n\r\n if (startIndex === -1 || endIndex === -1) return [];\r\n\r\n const start = Math.min(startIndex, endIndex);\r\n const end = Math.max(startIndex, endIndex);\r\n\r\n return allPages.slice(start, end + 1).map(p => p.id);\r\n};\r\n\r\n// Action types for reducer\r\ntype AssemblerAction = \r\n | { type: 'ADD_FILE'; payload: FileInfo }\r\n | { type: 'REMOVE_FILE'; payload: string }\r\n | { type: 'UPDATE_FILE'; payload: { fileId: string; updates: Partial<FileInfo> } }\r\n | { type: 'REORDER_PAGES'; payload: { fileId: string; newOrder: PageInfo[] } }\r\n | { type: 'REORDER_FILES'; payload: { newOrder: FileInfo[] } }\r\n | { type: 'MOVE_PAGES'; payload: { pageIds: string[]; targetFileId: string } }\r\n | { type: 'DELETE_PAGES'; payload: string[] }\r\n | { type: 'SET_SELECTION'; payload: string[] }\r\n | { type: 'TOGGLE_PAGE_SELECTION'; payload: { pageId: string; files: FileInfo[] } }\r\n | { type: 'RANGE_SELECT_PAGES'; payload: { pageId: string; files: FileInfo[] } }\r\n | { type: 'SINGLE_SELECT_PAGE'; payload: string }\r\n | { type: 'CLEAR_SELECTION' }\r\n | { type: 'RENAME_FILE'; payload: { fileId: string; name: string } }\r\n | { type: 'RESET'; payload?: PageAssemblerState };\r\n\r\n// Reducer\r\nfunction assemblerReducer(state: PageAssemblerState, action: AssemblerAction): PageAssemblerState {\r\n switch (action.type) {\r\n case 'ADD_FILE': {\r\n const existingFileById = state.files.find(f => f.id === action.payload.id);\r\n if (existingFileById) return state;\r\n \r\n return {\r\n ...state,\r\n files: [...state.files, action.payload]\r\n };\r\n }\r\n \r\n case 'REMOVE_FILE':\r\n return {\r\n ...state,\r\n files: state.files.filter(f => f.id !== action.payload),\r\n selection: state.selection.filter(pageId => \r\n !state.files.find(f => f.id === action.payload)?.pages.some(p => p.id === pageId)\r\n )\r\n };\r\n \r\n case 'UPDATE_FILE':\r\n return {\r\n ...state,\r\n files: state.files.map(f => \r\n f.id === action.payload.fileId \r\n ? { ...f, ...action.payload.updates }\r\n : f\r\n )\r\n };\r\n \r\n case 'REORDER_PAGES':\r\n return {\r\n ...state,\r\n files: state.files.map(f =>\r\n f.id === action.payload.fileId\r\n ? { ...f, pages: action.payload.newOrder }\r\n : f\r\n )\r\n };\r\n \r\n case 'REORDER_FILES':\r\n return {\r\n ...state,\r\n files: action.payload.newOrder\r\n };\r\n \r\n case 'MOVE_PAGES': {\r\n const { pageIds, targetFileId } = action.payload;\r\n const existingPageIds = state.files.flatMap(f => f.pages.map(p => p.id));\r\n const pagesToActuallyMove = pageIds.filter(id => existingPageIds.includes(id));\r\n \r\n if (pagesToActuallyMove.length === 0) return state;\r\n \r\n const pagesToMove: PageInfo[] = [];\r\n \r\n for (const file of state.files) {\r\n for (const page of file.pages) {\r\n if (pagesToActuallyMove.includes(page.id)) {\r\n pagesToMove.push(page);\r\n }\r\n }\r\n }\r\n \r\n const updatedFiles = state.files.map(file => {\r\n if (file.id === targetFileId) {\r\n const existingPageIds = file.pages.map(p => p.id);\r\n const newPages = pagesToMove.filter(p => !existingPageIds.includes(p.id));\r\n \r\n return {\r\n ...file,\r\n pages: [...file.pages, ...newPages]\r\n };\r\n } else {\r\n return {\r\n ...file,\r\n pages: file.pages.filter(page => !pagesToActuallyMove.includes(page.id))\r\n };\r\n }\r\n });\r\n \r\n return {\r\n ...state,\r\n files: updatedFiles,\r\n selection: []\r\n };\r\n }\r\n \r\n case 'DELETE_PAGES': {\r\n const pageIdsToDelete = action.payload;\r\n const existingPageIds = state.files.flatMap(f => f.pages.map(p => p.id));\r\n const pagesToActuallyDelete = pageIdsToDelete.filter(id => existingPageIds.includes(id));\r\n \r\n if (pagesToActuallyDelete.length === 0) return state;\r\n \r\n const updatedFiles = state.files.map(file => {\r\n const remainingPages = file.pages.filter(page => !pagesToActuallyDelete.includes(page.id));\r\n return {\r\n ...file,\r\n pages: remainingPages\r\n };\r\n }).filter(file => file.pages.length > 0);\r\n \r\n return {\r\n ...state,\r\n files: updatedFiles,\r\n selection: state.selection.filter(id => !pagesToActuallyDelete.includes(id))\r\n };\r\n }\r\n \r\n case 'SET_SELECTION':\r\n return {\r\n ...state,\r\n selection: action.payload\r\n };\r\n \r\n case 'TOGGLE_PAGE_SELECTION': {\r\n const { pageId } = action.payload;\r\n const isSelected = state.selection.includes(pageId);\r\n \r\n if (isSelected) {\r\n return {\r\n ...state,\r\n selection: state.selection.filter(id => id !== pageId),\r\n lastSelectedPageId: pageId\r\n };\r\n } else {\r\n return {\r\n ...state,\r\n selection: [...state.selection, pageId],\r\n lastSelectedPageId: pageId\r\n };\r\n }\r\n }\r\n \r\n case 'RANGE_SELECT_PAGES': {\r\n const { pageId, files } = action.payload;\r\n \r\n if (!state.lastSelectedPageId) {\r\n return {\r\n ...state,\r\n selection: [pageId],\r\n lastSelectedPageId: pageId\r\n };\r\n }\r\n \r\n const rangePageIds = getPageRange(files, state.lastSelectedPageId, pageId);\r\n const newSelection = [...new Set([...state.selection, ...rangePageIds])];\r\n \r\n return {\r\n ...state,\r\n selection: newSelection,\r\n lastSelectedPageId: pageId\r\n };\r\n }\r\n \r\n case 'SINGLE_SELECT_PAGE': {\r\n return {\r\n ...state,\r\n selection: [action.payload],\r\n lastSelectedPageId: action.payload\r\n };\r\n }\r\n \r\n case 'CLEAR_SELECTION':\r\n return {\r\n ...state,\r\n selection: [],\r\n lastSelectedPageId: undefined\r\n };\r\n \r\n case 'RENAME_FILE':\r\n return {\r\n ...state,\r\n files: state.files.map(f =>\r\n f.id === action.payload.fileId\r\n ? { ...f, name: action.payload.name }\r\n : f\r\n )\r\n };\r\n \r\n case 'RESET':\r\n return action.payload || { files: [], selection: [], lastSelectedPageId: undefined };\r\n \r\n default:\r\n return state;\r\n }\r\n}\r\n\r\n// Drag and drop types\r\nconst DND_TYPES = {\r\n PAGE: 'page',\r\n FILE: 'file'\r\n} as const;\r\n\r\n// DraggablePageThumbnail Component\r\ninterface DraggablePageThumbnailProps {\r\n page: PageInfo;\r\n fileId: string;\r\n index: number;\r\n isSelected: boolean;\r\n onSingleSelect: (pageId: string) => void;\r\n onToggleSelect: (pageId: string) => void;\r\n onRangeSelect: (pageId: string) => void;\r\n movePageInFile: (dragIndex: number, hoverIndex: number) => void;\r\n isDraggingPageRef?: React.MutableRefObject<boolean>;\r\n}\r\n\r\nconst DraggablePageThumbnail: React.FC<DraggablePageThumbnailProps> = ({\r\n page,\r\n fileId,\r\n index,\r\n isSelected,\r\n onSingleSelect,\r\n onToggleSelect,\r\n onRangeSelect,\r\n movePageInFile,\r\n isDraggingPageRef\r\n}) => {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const [{ isDragging }, drag] = useDrag({\r\n type: DND_TYPES.PAGE,\r\n item: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = true;\r\n }\r\n return { pageId: page.id, fileId, index };\r\n },\r\n collect: (monitor) => ({\r\n isDragging: monitor.isDragging(),\r\n }),\r\n end: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = false;\r\n }\r\n }\r\n });\r\n\r\n const [{ handlerId }, drop] = useDrop<\r\n { pageId: string; fileId: string; index: number },\r\n void,\r\n { handlerId: string | symbol | null }\r\n >({\r\n accept: DND_TYPES.PAGE,\r\n collect(monitor) {\r\n return {\r\n handlerId: monitor.getHandlerId(),\r\n };\r\n },\r\n hover(item, monitor) {\r\n if (!ref.current) return;\r\n if (item.fileId !== fileId) return;\r\n\r\n const dragIndex = item.index;\r\n const hoverIndex = index;\r\n\r\n if (dragIndex === hoverIndex) return;\r\n\r\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\r\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\r\n const clientOffset = monitor.getClientOffset();\r\n const hoverClientY = clientOffset!.y - hoverBoundingRect.top;\r\n\r\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) return;\r\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) return;\r\n\r\n movePageInFile(dragIndex, hoverIndex);\r\n item.index = hoverIndex;\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n drag(drop(ref));\r\n }, [drag, drop]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n handleContextMenu(e);\r\n \r\n if (isRangeSelectModifier(e)) {\r\n onRangeSelect(page.id);\r\n } else if (isMultiSelectModifier(e)) {\r\n onToggleSelect(page.id);\r\n } else {\r\n onSingleSelect(page.id);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n data-handler-id={handlerId}\r\n className={cn(\r\n \"relative group cursor-pointer border-2 rounded-lg overflow-hidden bg-white transition-all\",\r\n isDragging && \"opacity-50 scale-95\",\r\n isSelected ? \"border-primary shadow-md\" : \"border-gray-200 hover:border-gray-300\"\r\n )}\r\n onClick={handleClick}\r\n >\r\n <div className=\"absolute top-1 right-1 opacity-0 group-hover:opacity-100 transition-opacity bg-black/50 rounded p-1 z-10\">\r\n <GripVertical className=\"h-3 w-3 text-white\" />\r\n </div>\r\n \r\n <div\r\n className=\"absolute top-2 left-2 z-10\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n checked={isSelected}\r\n onChange={(e) => {\r\n const nativeEvent = e.nativeEvent;\r\n if (nativeEvent && 'shiftKey' in nativeEvent && nativeEvent.shiftKey) {\r\n onRangeSelect(page.id);\r\n } else if (nativeEvent && (('ctrlKey' in nativeEvent && nativeEvent.ctrlKey) || ('metaKey' in nativeEvent && nativeEvent.metaKey))) {\r\n onToggleSelect(page.id);\r\n } else {\r\n onSingleSelect(page.id);\r\n }\r\n }}\r\n onContextMenu={handleContextMenu}\r\n className=\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary focus:ring-2 bg-white/90 cursor-pointer\"\r\n />\r\n </div>\r\n \r\n <div className=\"aspect-[3/4] relative\">\r\n <img\r\n src={page.thumbUrl}\r\n alt={`Page ${index + 1}`}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n \r\n <Badge\r\n variant=\"secondary\"\r\n className=\"absolute bottom-1 right-1 text-xs px-1 py-0\"\r\n >\r\n {index + 1}\r\n </Badge>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ReorderablePageGrid Component\r\ninterface ReorderablePageGridProps {\r\n file: FileInfo;\r\n selectedPageIds: string[];\r\n onSingleSelectPage: (pageId: string) => void;\r\n onTogglePageSelect: (pageId: string) => void;\r\n onRangeSelectPage: (pageId: string) => void;\r\n onReorderPages: (fileId: string, newOrder: PageInfo[]) => void;\r\n isDraggingPageRef?: React.MutableRefObject<boolean>;\r\n}\r\n\r\nconst ReorderablePageGrid: React.FC<ReorderablePageGridProps> = ({\r\n file,\r\n selectedPageIds,\r\n onSingleSelectPage,\r\n onTogglePageSelect,\r\n onRangeSelectPage,\r\n onReorderPages,\r\n isDraggingPageRef\r\n}) => {\r\n const movePageInFile = useCallback((dragIndex: number, hoverIndex: number) => {\r\n const newPages = [...file.pages];\r\n const draggedPage = newPages[dragIndex];\r\n \r\n newPages.splice(dragIndex, 1);\r\n newPages.splice(hoverIndex, 0, draggedPage);\r\n \r\n onReorderPages(file.id, newPages);\r\n }, [file.id, file.pages, onReorderPages]);\r\n\r\n return (\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4\">\r\n {file.pages.map((page, index) => (\r\n <DraggablePageThumbnail\r\n key={page.id}\r\n page={page}\r\n fileId={file.id}\r\n index={index}\r\n isSelected={selectedPageIds.includes(page.id)}\r\n onSingleSelect={onSingleSelectPage}\r\n onToggleSelect={onTogglePageSelect}\r\n onRangeSelect={onRangeSelectPage}\r\n movePageInFile={movePageInFile}\r\n isDraggingPageRef={isDraggingPageRef}\r\n />\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\n// File drop zone component\r\ninterface FileDropZoneProps {\r\n targetIndex: number;\r\n onReorderFiles: (newOrder: FileInfo[]) => void;\r\n files: FileInfo[];\r\n}\r\n\r\nconst FileDropZone: React.FC<FileDropZoneProps> = ({\r\n targetIndex,\r\n onReorderFiles,\r\n files\r\n}) => {\r\n const [{ isOver, canDrop }, drop] = useDrop<\r\n { fileId: string; file: FileInfo },\r\n void,\r\n { isOver: boolean; canDrop: boolean }\r\n >({\r\n accept: DND_TYPES.FILE,\r\n drop: (item) => {\r\n const currentIndex = files.findIndex(f => f.id === item.fileId);\r\n if (currentIndex === -1) return;\r\n \r\n let newIndex = targetIndex;\r\n if (currentIndex < targetIndex) {\r\n newIndex = targetIndex - 1;\r\n }\r\n \r\n if (currentIndex === newIndex) return;\r\n \r\n const newFiles = [...files];\r\n const [movedFile] = newFiles.splice(currentIndex, 1);\r\n newFiles.splice(newIndex, 0, movedFile);\r\n \r\n onReorderFiles(newFiles);\r\n },\r\n collect: (monitor) => ({\r\n isOver: monitor.isOver(),\r\n canDrop: monitor.canDrop(),\r\n }),\r\n });\r\n\r\n const isActive = isOver && canDrop;\r\n\r\n return (\r\n <div\r\n ref={drop as unknown as React.Ref<HTMLDivElement>}\r\n className={cn(\r\n \"h-2 transition-all duration-200 mx-4\",\r\n isActive ? \"h-8 bg-primary/20 border-2 border-dashed border-primary rounded-lg\" : \"\"\r\n )}\r\n >\r\n {isActive && (\r\n <div className=\"flex items-center justify-center h-full text-primary text-sm font-medium\">\r\n Drop here to reorder\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// FileCard component\r\ninterface FileCardProps {\r\n file: FileInfo;\r\n selectedPageIds: string[];\r\n onSingleSelectPage: (pageId: string) => void;\r\n onTogglePageSelect: (pageId: string) => void;\r\n onRangeSelectPage: (pageId: string) => void;\r\n onSelectAllInFile: (fileId: string) => void;\r\n onRemoveFile: (fileId: string) => void;\r\n onRenameFile: (fileId: string, name: string) => void;\r\n onReorderPages: (fileId: string, newOrder: PageInfo[]) => void;\r\n isDraggingPageRef?: React.MutableRefObject<boolean>;\r\n}\r\n\r\nconst FileCard: React.FC<FileCardProps> = ({\r\n file,\r\n selectedPageIds,\r\n onSingleSelectPage,\r\n onTogglePageSelect,\r\n onRangeSelectPage,\r\n onSelectAllInFile,\r\n onRemoveFile,\r\n onRenameFile,\r\n onReorderPages,\r\n isDraggingPageRef\r\n}) => {\r\n const [isRenaming, setIsRenaming] = useState(false);\r\n const [newName, setNewName] = useState(file.name);\r\n const fileSelectedPages = file.pages.filter(p => selectedPageIds.includes(p.id));\r\n const allPagesSelected = file.pages.length > 0 && fileSelectedPages.length === file.pages.length;\r\n\r\n const [{ isDraggingFile }, dragFile] = useDrag({\r\n type: DND_TYPES.FILE,\r\n item: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = true;\r\n }\r\n return { fileId: file.id, file };\r\n },\r\n collect: (monitor) => ({\r\n isDraggingFile: monitor.isDragging(),\r\n }),\r\n end: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = false;\r\n }\r\n }\r\n });\r\n\r\n const [, drop] = useDrop<\r\n { pageId: string; fileId: string; index: number },\r\n void,\r\n object\r\n >({\r\n accept: DND_TYPES.PAGE,\r\n drop: (_item) => {\r\n // Moving between files handled in parent\r\n },\r\n });\r\n\r\n const handleRename = () => {\r\n if (newName.trim() && newName !== file.name) {\r\n onRenameFile(file.id, newName.trim());\r\n }\r\n setIsRenaming(false);\r\n };\r\n\r\n const combineRefs = useCallback((el: HTMLDivElement | null) => {\r\n drop(el);\r\n dragFile(el);\r\n }, [drop, dragFile]);\r\n\r\n return (\r\n <Card \r\n className={cn(\r\n \"mb-6 transition-all cursor-move\",\r\n isDraggingFile ? \"opacity-50 rotate-2 scale-105 shadow-2xl z-50\" : \"opacity-100\"\r\n )} \r\n ref={combineRefs}\r\n >\r\n <CardHeader className=\"pb-3\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-3\">\r\n {file.type === 'pdf' ? (\r\n <FileText className=\"h-5 w-5 text-red-500\" />\r\n ) : (\r\n <ImageIcon className=\"h-5 w-5 text-blue-500\" />\r\n )}\r\n \r\n {isRenaming ? (\r\n <div className=\"flex items-center gap-2\">\r\n <Input\r\n value={newName}\r\n onChange={(e) => setNewName(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') handleRename();\r\n if (e.key === 'Escape') {\r\n setIsRenaming(false);\r\n setNewName(file.name);\r\n }\r\n }}\r\n className=\"h-8 text-sm\"\r\n autoFocus\r\n />\r\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={handleRename}>\r\n <Check className=\"h-3 w-3\" />\r\n </Button>\r\n <Button \r\n type=\"button\"\r\n size=\"sm\" \r\n variant=\"ghost\" \r\n onClick={() => {\r\n setIsRenaming(false);\r\n setNewName(file.name);\r\n }}\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </Button>\r\n </div>\r\n ) : (\r\n <div>\r\n <CardTitle className=\"text-base\">{file.name}</CardTitle>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {file.pages.length} page{file.pages.length !== 1 ? 's' : ''}\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n \r\n <div className=\"flex items-center gap-2\">\r\n <TooltipProvider>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onSelectAllInFile(file.id)}\r\n disabled={file.pages.length === 0}\r\n >\r\n {allPagesSelected && <Check className=\"h-3 w-3 mr-2\" />}\r\n Select All\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent>\r\n Select all pages in this file\r\n </TooltipContent>\r\n </Tooltip>\r\n </TooltipProvider>\r\n \r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"hover:bg-gray-100 rounded-lg\">\r\n <MoreHorizontal className=\"h-4 w-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-52\">\r\n <DropdownMenuItem onClick={() => setIsRenaming(true)}>\r\n <svg className=\"h-4 w-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" />\r\n </svg>\r\n Rename File\r\n </DropdownMenuItem>\r\n <DropdownMenuItem \r\n onClick={() => onRemoveFile(file.id)}\r\n className=\"text-red-600 hover:text-red-700 hover:bg-red-50 focus:text-red-700 focus:bg-red-50\"\r\n >\r\n <Trash2 className=\"h-4 w-4 mr-2\" />\r\n Remove File\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n </div>\r\n </CardHeader>\r\n \r\n <CardContent>\r\n <ReorderablePageGrid\r\n file={file}\r\n selectedPageIds={selectedPageIds}\r\n onSingleSelectPage={onSingleSelectPage}\r\n onTogglePageSelect={onTogglePageSelect}\r\n onRangeSelectPage={onRangeSelectPage}\r\n onReorderPages={onReorderPages}\r\n isDraggingPageRef={isDraggingPageRef}\r\n />\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\n// Bulk action bar\r\ninterface BulkActionBarProps {\r\n selectedCount: number;\r\n files: FileInfo[];\r\n onMovePages: (targetFileId: string) => void;\r\n onDeletePages: () => void;\r\n onClearSelection: () => void;\r\n}\r\n\r\nconst BulkActionBar: React.FC<BulkActionBarProps> = ({\r\n selectedCount,\r\n files,\r\n onMovePages,\r\n onDeletePages,\r\n onClearSelection\r\n}) => {\r\n if (selectedCount === 0) return null;\r\n\r\n return (\r\n <div className=\"sticky top-4 z-10 mb-4\">\r\n <Card className=\"p-4 shadow-lg border-primary/20 bg-blue-50\">\r\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\r\n <div className=\"flex items-center gap-4 flex-wrap\">\r\n <span \r\n className=\"inline-flex items-center text-sm font-medium text-white rounded-full\"\r\n style={{ \r\n backgroundColor: '#0099cd',\r\n padding: '6px 14px',\r\n }}\r\n >\r\n {selectedCount} page{selectedCount !== 1 ? 's' : ''} selected\r\n </span>\r\n \r\n {files.length > 1 && (\r\n <div className=\"flex items-center gap-2\">\r\n <TooltipProvider>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Label htmlFor=\"move-select\" className=\"text-sm font-medium text-gray-700\">\r\n Move to file:\r\n </Label>\r\n </TooltipTrigger>\r\n <TooltipContent>\r\n <p>Move selected pages to another file</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n </TooltipProvider>\r\n <Select onValueChange={onMovePages}>\r\n <SelectTrigger id=\"move-select\" className=\"w-48 bg-white\">\r\n <SelectValue placeholder=\"Choose file...\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {files.map((file) => (\r\n <SelectItem key={file.id} value={file.id}>\r\n <div className=\"flex items-center gap-2\">\r\n {file.type === 'pdf' ? (\r\n <FileText className=\"h-4 w-4\" />\r\n ) : (\r\n <ImageIcon className=\"h-4 w-4\" />\r\n )}\r\n <span className=\"truncate\">{file.name}</span>\r\n </div>\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n )}\r\n </div>\r\n \r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n type=\"button\"\r\n variant=\"destructive\"\r\n size=\"sm\"\r\n onClick={onDeletePages}\r\n >\r\n <Trash2 className=\"h-4 w-4 mr-2\" />\r\n Delete Selected\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={onClearSelection}\r\n className=\"bg-white\"\r\n >\r\n Clear Selection\r\n </Button>\r\n </div>\r\n </div>\r\n </Card>\r\n </div>\r\n );\r\n};\r\n\r\n// Main PageAssembler component\r\nexport const PageAssembler = forwardRef<PageAssemblerHandle, PageAssemblerProps>(\r\n (props, ref) => {\r\n const { \r\n initialPdf, \r\n initialState, \r\n onChange, \r\n onValidityChange, \r\n limits, \r\n disableFileUpload = false,\r\n className \r\n } = props;\r\n \r\n const [state, dispatch] = useReducer(assemblerReducer, \r\n initialState || { \r\n files: [], \r\n selection: [], \r\n lastSelectedPageId: undefined\r\n });\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [processingStatus, setProcessingStatus] = useState<string>('');\r\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\r\n const [showRemoveFileConfirm, setShowRemoveFileConfirm] = useState(false);\r\n const [fileToRemove, setFileToRemove] = useState<{ id: string; name: string; pageCount: number } | null>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n \r\n const processedInitialPdfRef = useRef<string | null>(null);\r\n const isDraggingPage = useRef<boolean>(false);\r\n const onChangeRef = useRef(onChange);\r\n \r\n const summary = useMemo(() => ({\r\n totalFiles: state.files.length,\r\n totalPages: state.files.reduce((sum, file) => sum + file.pages.length, 0)\r\n }), [state.files]);\r\n \r\n const isValid = summary.totalPages > 0;\r\n\r\n useEffect(() => {\r\n onChangeRef.current = onChange;\r\n }, [onChange]);\r\n\r\n const debouncedOnChange = useMemo(\r\n () => debounce((newState: PageAssemblerState) => {\r\n onChangeRef.current?.(newState);\r\n }, 200),\r\n []\r\n );\r\n\r\n useEffect(() => {\r\n debouncedOnChange(state);\r\n }, [state, debouncedOnChange]);\r\n\r\n useEffect(() => {\r\n onValidityChange?.(isValid);\r\n }, [isValid, onValidityChange]);\r\n\r\n // Process initial PDF\r\n const processInitialPdf = useCallback(async (pdf: File | Blob | ArrayBuffer | Uint8Array) => {\r\n setIsLoading(true);\r\n setProcessingStatus('Processing initial PDF...');\r\n \r\n try {\r\n let pdfBytes: Uint8Array;\r\n \r\n if (pdf instanceof Blob) {\r\n const arrayBuffer = await pdf.arrayBuffer();\r\n pdfBytes = new Uint8Array(arrayBuffer);\r\n } else if (pdf instanceof ArrayBuffer) {\r\n pdfBytes = new Uint8Array(pdf);\r\n } else {\r\n pdfBytes = new Uint8Array(pdf);\r\n }\r\n\r\n const defensiveCopy = new Uint8Array(pdfBytes);\r\n const pages = await pdfToImages(defensiveCopy, { hideFormFields: true });\r\n \r\n if (pages.length === 0) {\r\n throw new Error('Failed to process PDF pages');\r\n }\r\n\r\n let originalBytes: Uint8Array;\r\n let originalFile: File;\r\n \r\n try {\r\n new Uint8Array(pdfBytes.buffer || pdfBytes, 0, 1);\r\n originalBytes = new Uint8Array(pdfBytes);\r\n originalFile = new File([pdfBytes.buffer as ArrayBuffer], 'Initial Document.pdf', { type: 'application/pdf' });\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n if (errorMessage.includes('detached') || errorMessage.includes('ArrayBuffer')) {\r\n throw new Error('Initial PDF data is no longer available. Please try refreshing the page.');\r\n }\r\n throw error;\r\n }\r\n\r\n const fileName = (pdf instanceof File) ? pdf.name : 'Initial Document.pdf';\r\n const fileId = generateId();\r\n \r\n const file: FileInfo = {\r\n id: fileId,\r\n name: fileName,\r\n type: 'pdf',\r\n originalFile,\r\n originalBytes,\r\n pages: pages.map((page, index) => ({\r\n id: generateId(),\r\n srcIndex: index,\r\n thumbUrl: page.imageUrl,\r\n width: page.width,\r\n height: page.height,\r\n mime: 'application/pdf',\r\n originalFileId: fileId\r\n }))\r\n };\r\n \r\n dispatch({ type: 'ADD_FILE', payload: file });\r\n } catch (error) {\r\n console.error('Error processing initial PDF:', error);\r\n } finally {\r\n setIsLoading(false);\r\n setProcessingStatus('');\r\n }\r\n }, []);\r\n\r\n // Initialize with initial PDF if provided\r\n useEffect(() => {\r\n if (initialPdf && !initialState) {\r\n const pdfIdentifier = initialPdf instanceof Uint8Array \r\n ? `uint8array-${initialPdf.length}-${initialPdf[0]}-${initialPdf[initialPdf.length-1]}` \r\n : `${initialPdf.constructor.name}-${(initialPdf as File | Blob).size || (initialPdf as ArrayBuffer).byteLength}`;\r\n \r\n if (processedInitialPdfRef.current === pdfIdentifier) {\r\n return;\r\n }\r\n \r\n processedInitialPdfRef.current = pdfIdentifier;\r\n processInitialPdf(initialPdf);\r\n }\r\n }, [initialPdf, initialState, processInitialPdf]);\r\n\r\n // Handle initialState changes\r\n useEffect(() => {\r\n if (initialState) {\r\n dispatch({ type: 'RESET', payload: initialState });\r\n }\r\n }, [initialState]);\r\n\r\n // File processing\r\n const processFiles = useCallback(async (files: FileList | File[]) => {\r\n const fileArray = Array.from(files);\r\n const maxFileSize = (limits?.maxFileSizeMB || 10) * 1024 * 1024;\r\n \r\n setIsLoading(true);\r\n setProcessingStatus(`Processing ${fileArray.length} file${fileArray.length !== 1 ? 's' : ''}...`);\r\n\r\n for (const file of fileArray) {\r\n try {\r\n if (file.size > maxFileSize) {\r\n console.error(`File ${file.name} is too large`);\r\n continue;\r\n }\r\n\r\n const validTypes = ['application/pdf', 'image/png', 'image/jpeg', 'image/jpg', 'image/webp'];\r\n if (!validTypes.includes(file.type)) {\r\n console.error(`Unsupported file type: ${file.name}`);\r\n continue;\r\n }\r\n\r\n const fileInfo: FileInfo = {\r\n id: generateId(),\r\n name: file.name,\r\n type: file.type === 'application/pdf' ? 'pdf' : 'image',\r\n originalFile: file,\r\n originalBytes: new Uint8Array(),\r\n pages: []\r\n };\r\n\r\n if (file.type === 'application/pdf') {\r\n setProcessingStatus(`Processing PDF: ${file.name}`);\r\n const arrayBuffer = await file.arrayBuffer();\r\n const pdfBytes = new Uint8Array(arrayBuffer);\r\n fileInfo.originalBytes = new Uint8Array(pdfBytes);\r\n \r\n const defensiveCopy = new Uint8Array(pdfBytes);\r\n const pages = await pdfToImages(defensiveCopy, { hideFormFields: true });\r\n fileInfo.pages = pages.map((page, index) => ({\r\n id: generateId(),\r\n srcIndex: index,\r\n thumbUrl: page.imageUrl,\r\n width: page.width,\r\n height: page.height,\r\n mime: file.type,\r\n originalFileId: fileInfo.id\r\n }));\r\n } else {\r\n setProcessingStatus(`Processing image: ${file.name}`);\r\n\r\n const arrayBuffer = await file.arrayBuffer();\r\n const imageBytes = new Uint8Array(arrayBuffer);\r\n fileInfo.originalBytes = new Uint8Array(imageBytes);\r\n\r\n const thumbUrl = URL.createObjectURL(file);\r\n\r\n const img = new Image();\r\n const dimensions = await new Promise<{ width: number; height: number }>((resolve) => {\r\n img.onload = () => resolve({ width: img.width, height: img.height });\r\n img.src = thumbUrl;\r\n });\r\n\r\n const maxWidth = 595;\r\n const maxHeight = 842;\r\n\r\n let pdfWidth = dimensions.width;\r\n let pdfHeight = dimensions.height;\r\n\r\n if (dimensions.width > maxWidth || dimensions.height > maxHeight) {\r\n const scaleX = maxWidth / dimensions.width;\r\n const scaleY = maxHeight / dimensions.height;\r\n const scale = Math.min(scaleX, scaleY);\r\n\r\n pdfWidth = dimensions.width * scale;\r\n pdfHeight = dimensions.height * scale;\r\n }\r\n\r\n fileInfo.pages = [{\r\n id: generateId(),\r\n srcIndex: 0,\r\n thumbUrl,\r\n width: Math.max(pdfWidth, 100),\r\n height: Math.max(pdfHeight, 100),\r\n mime: file.type,\r\n originalFileId: fileInfo.id\r\n }];\r\n }\r\n\r\n dispatch({ type: 'ADD_FILE', payload: fileInfo });\r\n } catch (error) {\r\n console.error(`Error processing file ${file.name}:`, error);\r\n }\r\n }\r\n\r\n setIsLoading(false);\r\n setProcessingStatus('');\r\n }, [limits]);\r\n\r\n // File upload handlers\r\n const handleFileUpload = useCallback(() => {\r\n fileInputRef.current?.click();\r\n }, []);\r\n\r\n const handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const files = e.target.files;\r\n if (files) {\r\n processFiles(files);\r\n }\r\n if (fileInputRef.current) {\r\n fileInputRef.current.value = '';\r\n }\r\n }, [processFiles]);\r\n\r\n const handleDrop = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n \r\n const files = e.dataTransfer.files;\r\n if (files && files.length > 0) {\r\n if (isDraggingPage.current) {\r\n return;\r\n }\r\n processFiles(files);\r\n }\r\n }, [processFiles]);\r\n\r\n const handleDragOver = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n }, []);\r\n\r\n // Selection handlers\r\n const handleSingleSelectPage = useCallback((pageId: string) => {\r\n dispatch({ type: 'SINGLE_SELECT_PAGE', payload: pageId });\r\n }, []);\r\n\r\n const handleTogglePageSelect = useCallback((pageId: string) => {\r\n dispatch({ type: 'TOGGLE_PAGE_SELECTION', payload: { pageId, files: state.files } });\r\n }, [state.files]);\r\n\r\n const handleRangeSelectPage = useCallback((pageId: string) => {\r\n dispatch({ type: 'RANGE_SELECT_PAGES', payload: { pageId, files: state.files } });\r\n }, [state.files]);\r\n\r\n const handleSelectAllInFile = useCallback((fileId: string) => {\r\n const file = state.files.find(f => f.id === fileId);\r\n if (!file) return;\r\n \r\n const filePageIds = file.pages.map(p => p.id);\r\n const allSelected = filePageIds.every(id => state.selection.includes(id));\r\n \r\n if (allSelected) {\r\n dispatch({ \r\n type: 'SET_SELECTION', \r\n payload: state.selection.filter(id => !filePageIds.includes(id)) \r\n });\r\n } else {\r\n const newSelection = [...new Set([...state.selection, ...filePageIds])];\r\n dispatch({ type: 'SET_SELECTION', payload: newSelection });\r\n }\r\n }, [state.files, state.selection]);\r\n\r\n // Bulk operations\r\n const handleMovePages = useCallback((targetFileId: string) => {\r\n if (state.selection.length === 0) return;\r\n \r\n dispatch({ type: 'MOVE_PAGES', payload: { pageIds: state.selection, targetFileId } });\r\n }, [state.selection]);\r\n\r\n const handleDeletePages = useCallback(() => {\r\n setShowDeleteConfirm(true);\r\n }, []);\r\n\r\n const confirmDeletePages = useCallback(() => {\r\n dispatch({ type: 'DELETE_PAGES', payload: state.selection });\r\n setShowDeleteConfirm(false);\r\n }, [state.selection]);\r\n\r\n const handleRemoveFile = useCallback((fileId: string) => {\r\n const file = state.files.find(f => f.id === fileId);\r\n if (!file) return;\r\n\r\n if (file.pages.length > 0) {\r\n setFileToRemove({\r\n id: file.id,\r\n name: file.name,\r\n pageCount: file.pages.length\r\n });\r\n setShowRemoveFileConfirm(true);\r\n } else {\r\n dispatch({ type: 'REMOVE_FILE', payload: fileId });\r\n }\r\n }, [state.files]);\r\n\r\n const confirmRemoveFile = useCallback(() => {\r\n if (fileToRemove) {\r\n dispatch({ type: 'REMOVE_FILE', payload: fileToRemove.id });\r\n setFileToRemove(null);\r\n }\r\n setShowRemoveFileConfirm(false);\r\n }, [fileToRemove]);\r\n\r\n const handleRenameFile = useCallback((fileId: string, name: string) => {\r\n dispatch({ type: 'RENAME_FILE', payload: { fileId, name } });\r\n }, []);\r\n \r\n const handleReorderFiles = useCallback((newOrder: FileInfo[]) => {\r\n dispatch({ type: 'REORDER_FILES', payload: { newOrder } });\r\n }, []);\r\n\r\n // Imperative API\r\n useImperativeHandle(ref, () => ({\r\n assemble: async () => {\r\n setIsLoading(true);\r\n setProcessingStatus('Assembling PDF...');\r\n \r\n try {\r\n const { PDFDocument } = await import('pdf-lib');\r\n const combinedDoc = await PDFDocument.create();\r\n \r\n const loadedPdfs = new Map<string, import('pdf-lib').PDFDocument>();\r\n const fileMap = new Map<string, FileInfo>();\r\n \r\n for (const file of state.files) {\r\n fileMap.set(file.id, file);\r\n \r\n if (file.type === 'pdf' && file.originalBytes && file.originalBytes.length > 0) {\r\n try {\r\n const sourcePdf = await PDFDocument.load(file.originalBytes);\r\n loadedPdfs.set(file.id, sourcePdf);\r\n } catch (error) {\r\n console.error(`Error loading PDF for file ${file.id}:`, error);\r\n }\r\n }\r\n }\r\n \r\n for (const file of state.files) {\r\n if (file.pages.length === 0) continue;\r\n \r\n for (const page of file.pages) {\r\n const originalFileId = page.originalFileId || file.id;\r\n const sourceFile = fileMap.get(originalFileId);\r\n \r\n if (!sourceFile) {\r\n console.warn(`Source file not found for page ${page.id}`);\r\n continue;\r\n }\r\n \r\n if (sourceFile.type === 'pdf') {\r\n const sourcePdf = loadedPdfs.get(originalFileId);\r\n if (!sourcePdf) {\r\n console.warn(`Source PDF not loaded for page ${page.id}`);\r\n continue;\r\n }\r\n \r\n const sourcePageCount = sourcePdf.getPageCount();\r\n \r\n if (page.srcIndex >= 0 && page.srcIndex < sourcePageCount) {\r\n try {\r\n const copiedPages = await combinedDoc.copyPages(sourcePdf, [page.srcIndex]);\r\n copiedPages.forEach(copiedPage => combinedDoc.addPage(copiedPage));\r\n } catch (copyError) {\r\n console.error(`Error copying page ${page.srcIndex}:`, copyError);\r\n throw new Error(`Failed to copy page: ${copyError instanceof Error ? copyError.message : String(copyError)}`);\r\n }\r\n }\r\n } else if (sourceFile.type === 'image' && sourceFile.originalFile) {\r\n try {\r\n const imagePdfBytes = await imageToPdf(sourceFile.originalFile);\r\n const imagePdf = await PDFDocument.load(imagePdfBytes);\r\n const copiedPages = await combinedDoc.copyPages(imagePdf, [0]);\r\n copiedPages.forEach(copiedPage => combinedDoc.addPage(copiedPage));\r\n } catch (imageError) {\r\n console.error(`Error converting image page:`, imageError);\r\n throw new Error(`Failed to convert image: ${imageError instanceof Error ? imageError.message : String(imageError)}`);\r\n }\r\n }\r\n }\r\n }\r\n \r\n const pdfBytes = await combinedDoc.save();\r\n \r\n // Create ArrayBuffer from Uint8Array (TypeScript 5.9+ has stricter typing)\r\n const arrayBuffer = pdfBytes.buffer.slice(pdfBytes.byteOffset, pdfBytes.byteOffset + pdfBytes.byteLength) as ArrayBuffer;\r\n const blob = new Blob([arrayBuffer], { type: 'application/pdf' });\r\n \r\n return blob;\r\n } catch (error) {\r\n console.error('Error assembling PDF:', error);\r\n throw error;\r\n } finally {\r\n setIsLoading(false);\r\n setProcessingStatus('');\r\n }\r\n },\r\n \r\n getSummary: () => summary,\r\n \r\n isBusy: () => isLoading,\r\n \r\n getState: () => state,\r\n }), [state, summary, isLoading]);\r\n\r\n return (\r\n <TooltipProvider>\r\n <DndProvider backend={HTML5Backend}>\r\n <div className={cn(\"space-y-3\", className)}>\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"text-lg font-medium\">Page Assembly</h3>\r\n <p className=\"text-sm text-muted-foreground\">\r\n Upload, arrange, and combine pages into a single PDF document\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex items-center gap-4\">\r\n {summary.totalPages > 0 && (\r\n <span className=\"text-sm text-gray-500\">\r\n {summary.totalFiles} file{summary.totalFiles !== 1 ? 's' : ''}, {summary.totalPages} page{summary.totalPages !== 1 ? 's' : ''}\r\n </span>\r\n )}\r\n \r\n {!disableFileUpload && (\r\n <>\r\n <Button type=\"button\" onClick={handleFileUpload} disabled={isLoading}>\r\n <Upload className=\"h-4 w-4 mr-2\" />\r\n Add Files\r\n </Button>\r\n \r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n multiple\r\n accept=\".pdf,image/*\"\r\n onChange={handleFileChange}\r\n className=\"hidden\"\r\n />\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Loading indicator */}\r\n {isLoading && (\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-primary\"></div>\r\n <span className=\"text-sm\">{processingStatus}</span>\r\n </div>\r\n </Card>\r\n )}\r\n\r\n {/* Bulk actions */}\r\n <BulkActionBar\r\n selectedCount={state.selection.length}\r\n files={state.files}\r\n onMovePages={handleMovePages}\r\n onDeletePages={handleDeletePages}\r\n onClearSelection={() => dispatch({ type: 'CLEAR_SELECTION' })}\r\n />\r\n\r\n {/* Files */}\r\n {state.files.length > 0 ? (\r\n <div\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n >\r\n <FileDropZone\r\n targetIndex={0}\r\n onReorderFiles={handleReorderFiles}\r\n files={state.files}\r\n />\r\n \r\n {state.files.map((file, index) => (\r\n <div key={file.id}>\r\n <FileCard\r\n file={file}\r\n selectedPageIds={state.selection}\r\n onSingleSelectPage={handleSingleSelectPage}\r\n onTogglePageSelect={handleTogglePageSelect}\r\n onRangeSelectPage={handleRangeSelectPage}\r\n onSelectAllInFile={handleSelectAllInFile}\r\n onRemoveFile={handleRemoveFile}\r\n onRenameFile={handleRenameFile}\r\n onReorderPages={(fileId, newOrder) => \r\n dispatch({ type: 'REORDER_PAGES', payload: { fileId, newOrder } })\r\n }\r\n isDraggingPageRef={isDraggingPage}\r\n />\r\n \r\n <FileDropZone\r\n targetIndex={index + 1}\r\n onReorderFiles={handleReorderFiles}\r\n files={state.files}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n !disableFileUpload && (\r\n <div \r\n className=\"p-12 rounded-lg bg-card text-card-foreground cursor-pointer transition-all border-2 border-dashed border-border hover:border-primary/60 hover:bg-primary/10\"\r\n onClick={handleFileUpload}\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n >\r\n <div className=\"text-center\">\r\n <FolderOpen className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\r\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No files added</h3>\r\n <p className=\"text-gray-500 mb-4\">\r\n Upload PDF files and images to start building your document\r\n </p>\r\n <Button type=\"button\" variant=\"outline\">\r\n <Upload className=\"h-4 w-4 mr-2\" />\r\n Choose Files\r\n </Button>\r\n </div>\r\n </div>\r\n )\r\n )}\r\n\r\n {/* Delete confirmation dialog */}\r\n <AlertDialog open={showDeleteConfirm} onOpenChange={setShowDeleteConfirm}>\r\n <AlertDialogContent>\r\n <AlertDialogHeader>\r\n <AlertDialogTitle>Delete Pages</AlertDialogTitle>\r\n <AlertDialogDescription>\r\n Are you sure you want to delete {state.selection.length} selected page\r\n {state.selection.length !== 1 ? 's' : ''}? This action cannot be undone.\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n <AlertDialogFooter>\r\n <AlertDialogCancel>Cancel</AlertDialogCancel>\r\n <AlertDialogAction \r\n className=\"bg-destructive text-white hover:bg-destructive/90\"\r\n onClick={confirmDeletePages}\r\n >\r\n Delete\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n\r\n {/* Remove file confirmation dialog */}\r\n <AlertDialog open={showRemoveFileConfirm} onOpenChange={setShowRemoveFileConfirm}>\r\n <AlertDialogContent>\r\n <AlertDialogHeader>\r\n <AlertDialogTitle>Remove File</AlertDialogTitle>\r\n <AlertDialogDescription>\r\n Are you sure you want to remove \"{fileToRemove?.name}\" and all its {fileToRemove?.pageCount} page\r\n {fileToRemove?.pageCount !== 1 ? 's' : ''}? This action cannot be undone.\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n <AlertDialogFooter>\r\n <AlertDialogCancel onClick={() => {\r\n setFileToRemove(null);\r\n setShowRemoveFileConfirm(false);\r\n }}>Cancel</AlertDialogCancel>\r\n <AlertDialogAction \r\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\r\n onClick={confirmRemoveFile}\r\n >\r\n Remove File\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n </div>\r\n </DndProvider>\r\n </TooltipProvider>\r\n );\r\n }\r\n);\r\n\r\nPageAssembler.displayName = 'PageAssembler';\r\n\r\n// Utility functions\r\nfunction generateId(): string {\r\n return `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n}\r\n\r\nfunction debounce<T extends (...args: never[]) => unknown>(\r\n func: T,\r\n wait: number\r\n): T {\r\n let timeout: NodeJS.Timeout | undefined;\r\n return ((...args: Parameters<T>) => {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => func(...args), wait);\r\n }) as T;\r\n}\r\n\r\nexport default PageAssembler;\r\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/lib/ui/button.tsx","../src/lib/ui/card.tsx","../src/lib/ui/input.tsx","../src/lib/ui/label.tsx","../src/lib/ui/badge.tsx","../src/lib/ui/select.tsx","../src/lib/ui/alert-dialog.tsx","../src/lib/ui/dropdown-menu.tsx","../src/lib/ui/tooltip.tsx","../src/utils/pdf-helpers.ts","../src/utils/field-extraction.ts","../src/utils/add-form-fields.ts","../src/components/PageAssembler.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","React3","React4","LabelPrimitive","SelectPrimitive","React5","jsxs","ChevronDown","ChevronUp","Check","AlertDialogPrimitive","React6","DropdownMenuPrimitive","React7","ChevronRight","Circle","TooltipPrimitive","React8","pdfjsLib","PDFDocument","PDFName","PDFTextField","PDFCheckBox","PDFDropdown","PDFRadioGroup","PDFString","FormFieldType","StandardFonts","pages","rgb","existingPageIds","useRef","useDrag","useDrop","useEffect","GripVertical","useCallback","useState","FileText","ImageIcon","X","MoreHorizontal","Trash2","forwardRef","useReducer","useMemo","useImperativeHandle","arrayBuffer","blob","pdfBytes","DndProvider","HTML5Backend","Fragment","Upload","FolderOpen"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils';\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\r\n destructive:\r\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\r\n outline:\r\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\r\n secondary:\r\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 rounded-md px-3',\r\n lg: 'h-11 md:h-12 rounded-md px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'default',\r\n },\r\n }\r\n);\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean;\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button';\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size }), className)}\r\n ref={ref}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nButton.displayName = 'Button';\r\n\r\nexport { Button, buttonVariants };\r\n","import * as React from 'react';\r\nimport { cn } from '../utils';\r\n\r\nconst Card = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'rounded-lg bg-card text-card-foreground shadow-sm',\r\n className\r\n )}\r\n style={{\r\n border: '1px solid hsl(var(--xpa-border))',\r\n ...((props.style || {}) as React.CSSProperties)\r\n }}\r\n {...props}\r\n />\r\n));\r\nCard.displayName = 'Card';\r\n\r\nconst CardHeader = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn('flex flex-col space-y-1.5 p-6', className)}\r\n {...props}\r\n />\r\n));\r\nCardHeader.displayName = 'CardHeader';\r\n\r\nconst CardTitle = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLHeadingElement>\r\n>(({ className, ...props }, ref) => (\r\n <h3\r\n ref={ref}\r\n className={cn(\r\n 'text-2xl font-semibold leading-none tracking-tight',\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nCardTitle.displayName = 'CardTitle';\r\n\r\nconst CardDescription = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.HTMLAttributes<HTMLParagraphElement>\r\n>(({ className, ...props }, ref) => (\r\n <p\r\n ref={ref}\r\n className={cn('text-sm text-muted-foreground', className)}\r\n {...props}\r\n />\r\n));\r\nCardDescription.displayName = 'CardDescription';\r\n\r\nconst CardContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\r\n));\r\nCardContent.displayName = 'CardContent';\r\n\r\nconst CardFooter = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => (\r\n <div\r\n ref={ref}\r\n className={cn('flex items-center p-6 pt-0', className)}\r\n {...props}\r\n />\r\n));\r\nCardFooter.displayName = 'CardFooter';\r\n\r\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\r\n","import * as React from 'react';\r\nimport { cn } from '../utils';\r\n\r\nexport interface InputProps\r\n extends React.InputHTMLAttributes<HTMLInputElement> {}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n className={cn(\r\n 'flex h-10 w-full rounded-md border-2 border-input bg-background px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground transition-all duration-200 focus:outline-none focus:border-primary focus:ring-0 focus:shadow-[0_0_0_3px_rgba(0,153,205,0.15)] focus-visible:outline-none focus-visible:border-primary focus-visible:ring-0 focus-visible:shadow-[0_0_0_3px_rgba(0,153,205,0.15)] disabled:cursor-not-allowed disabled:opacity-50',\r\n className\r\n )}\r\n ref={ref}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nInput.displayName = 'Input';\r\n\r\nexport { Input };\r\n","import * as React from 'react';\r\nimport * as LabelPrimitive from '@radix-ui/react-label';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils';\r\n\r\nconst labelVariants = cva(\r\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\r\n);\r\n\r\nconst Label = React.forwardRef<\r\n React.ElementRef<typeof LabelPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\r\n VariantProps<typeof labelVariants> & {\r\n children?: React.ReactNode;\r\n }\r\n>(({ className, ...props }, ref) => (\r\n <LabelPrimitive.Root\r\n ref={ref}\r\n className={cn(labelVariants(), className)}\r\n {...props}\r\n />\r\n));\r\nLabel.displayName = LabelPrimitive.Root.displayName;\r\n\r\nexport { Label };\r\n","import * as React from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils';\r\n\r\nconst badgeVariants = cva(\r\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\r\n secondary:\r\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n destructive:\r\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\r\n outline: 'text-foreground',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n },\r\n }\r\n);\r\n\r\nexport interface BadgeProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeVariants> {}\r\n\r\nfunction Badge({ className, variant, ...props }: BadgeProps) {\r\n return (\r\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\r\n );\r\n}\r\n\r\nexport { Badge, badgeVariants };\r\n","import * as React from 'react';\r\nimport * as SelectPrimitive from '@radix-ui/react-select';\r\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react';\r\nimport { cn } from '../utils';\r\n\r\nconst Select = SelectPrimitive.Root;\r\n\r\nconst SelectGroup = SelectPrimitive.Group;\r\n\r\nconst SelectValue = SelectPrimitive.Value;\r\n\r\nconst SelectTrigger = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Trigger>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\r\n>(({ className, children, ...props }, ref) => (\r\n <SelectPrimitive.Trigger\r\n ref={ref}\r\n className={cn(\r\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <SelectPrimitive.Icon asChild>\r\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n));\r\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\r\n\r\nconst SelectScrollUpButton = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.ScrollUpButton\r\n ref={ref}\r\n className={cn(\r\n 'flex cursor-default items-center justify-center py-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronUp className=\"h-4 w-4\" />\r\n </SelectPrimitive.ScrollUpButton>\r\n));\r\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\r\n\r\nconst SelectScrollDownButton = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.ScrollDownButton\r\n ref={ref}\r\n className={cn(\r\n 'flex cursor-default items-center justify-center py-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronDown className=\"h-4 w-4\" />\r\n </SelectPrimitive.ScrollDownButton>\r\n));\r\nSelectScrollDownButton.displayName =\r\n SelectPrimitive.ScrollDownButton.displayName;\r\n\r\nconst SelectContent = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\r\n>(({ className, children, position = 'popper', ...props }, ref) => (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n 'relative max-h-96 min-w-[12rem] overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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',\r\n position === 'popper' &&\r\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\r\n className\r\n )}\r\n position={position}\r\n style={{ \r\n zIndex: 99999,\r\n backgroundColor: '#ffffff',\r\n border: '1px solid #e2e8f0',\r\n borderRadius: '0.5rem',\r\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',\r\n marginTop: '4px',\r\n }}\r\n {...props}\r\n >\r\n <SelectScrollUpButton />\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n position === 'popper' &&\r\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\r\n )}\r\n style={{ padding: '6px' }}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n <SelectScrollDownButton />\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n));\r\nSelectContent.displayName = SelectPrimitive.Content.displayName;\r\n\r\nconst SelectLabel = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.Label\r\n ref={ref}\r\n className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)}\r\n {...props}\r\n />\r\n));\r\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\r\n\r\nconst SelectItem = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\r\n>(({ className, children, ...props }, ref) => {\r\n const [isHovered, setIsHovered] = React.useState(false);\r\n \r\n return (\r\n <SelectPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n 'relative flex w-full cursor-pointer select-none items-center outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n className\r\n )}\r\n style={{\r\n backgroundColor: isHovered ? '#f1f5f9' : 'transparent',\r\n color: '#1e293b',\r\n padding: '8px 12px',\r\n borderRadius: '6px',\r\n fontSize: '14px',\r\n marginBottom: '2px',\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n {...props}\r\n >\r\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n <SelectPrimitive.ItemIndicator \r\n style={{ \r\n marginLeft: 'auto',\r\n paddingLeft: '8px',\r\n color: '#0099cd',\r\n }}\r\n >\r\n <Check className=\"h-4 w-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </SelectPrimitive.Item>\r\n );\r\n});\r\nSelectItem.displayName = SelectPrimitive.Item.displayName;\r\n\r\nconst SelectSeparator = React.forwardRef<\r\n React.ElementRef<typeof SelectPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <SelectPrimitive.Separator\r\n ref={ref}\r\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\r\n {...props}\r\n />\r\n));\r\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\r\n\r\nexport {\r\n Select,\r\n SelectGroup,\r\n SelectValue,\r\n SelectTrigger,\r\n SelectContent,\r\n SelectLabel,\r\n SelectItem,\r\n SelectSeparator,\r\n SelectScrollUpButton,\r\n SelectScrollDownButton,\r\n};\r\n","import * as React from \"react\"\r\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\r\n\r\nimport { cn } from \"../utils\"\r\nimport { buttonVariants } from \"./button\"\r\n\r\nconst AlertDialog = AlertDialogPrimitive.Root\r\n\r\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\r\n\r\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\r\n\r\nconst AlertDialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Overlay\r\n className={cn(\r\n \"fixed inset-0 z-[9998] bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n ref={ref}\r\n />\r\n))\r\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\r\n\r\nconst AlertDialogContent = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPortal container={document.querySelector('.signiphi-page-assembly') as HTMLElement}>\r\n <AlertDialogOverlay />\r\n <AlertDialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-[9999] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </AlertDialogPortal>\r\n))\r\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\r\n\r\nconst AlertDialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col space-y-2 text-center sm:text-left\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\r\n\r\nconst AlertDialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\r\n\r\nconst AlertDialogTitle = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\"text-lg font-semibold\", className)}\r\n {...props}\r\n />\r\n))\r\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\r\n\r\nconst AlertDialogDescription = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n))\r\nAlertDialogDescription.displayName =\r\n AlertDialogPrimitive.Description.displayName\r\n\r\nconst AlertDialogAction = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Action\r\n ref={ref}\r\n className={cn(buttonVariants(), className)}\r\n {...props}\r\n />\r\n))\r\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\r\n\r\nconst AlertDialogCancel = React.forwardRef<\r\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\r\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\r\n>(({ className, ...props }, ref) => (\r\n <AlertDialogPrimitive.Cancel\r\n ref={ref}\r\n className={cn(\r\n buttonVariants({ variant: \"outline\" }),\r\n \"mt-2 sm:mt-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\r\n\r\nexport {\r\n AlertDialog,\r\n AlertDialogPortal,\r\n AlertDialogOverlay,\r\n AlertDialogTrigger,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogFooter,\r\n AlertDialogTitle,\r\n AlertDialogDescription,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n}\r\n","import * as React from \"react\"\r\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\r\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\r\n\r\nimport { cn } from \"../utils\"\r\n\r\nconst DropdownMenu = DropdownMenuPrimitive.Root\r\n\r\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\r\n\r\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\r\n\r\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\r\n\r\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\r\n\r\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\r\n\r\nconst DropdownMenuSubTrigger = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubTrigger\r\n ref={ref}\r\n className={cn(\r\n \"flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRight className=\"ml-auto\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n))\r\nDropdownMenuSubTrigger.displayName =\r\n DropdownMenuPrimitive.SubTrigger.displayName\r\n\r\nconst DropdownMenuSubContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubContent\r\n ref={ref}\r\n className={cn(\r\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSubContent.displayName =\r\n DropdownMenuPrimitive.SubContent.displayName\r\n\r\nconst DropdownMenuContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"min-w-[12rem] overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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\",\r\n className\r\n )}\r\n style={{\r\n zIndex: 99999,\r\n backgroundColor: '#ffffff',\r\n border: '1px solid #e2e8f0',\r\n borderRadius: '0.5rem',\r\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',\r\n padding: '6px',\r\n }}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n))\r\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\r\n\r\nconst DropdownMenuItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => {\r\n const [isHovered, setIsHovered] = React.useState(false);\r\n \r\n return (\r\n <DropdownMenuPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-pointer select-none items-center gap-2 outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n style={{\r\n backgroundColor: isHovered ? '#f1f5f9' : 'transparent',\r\n color: '#1e293b',\r\n padding: '8px 12px',\r\n borderRadius: '6px',\r\n fontSize: '14px',\r\n marginBottom: '2px',\r\n }}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n {...props}\r\n />\r\n );\r\n})\r\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\r\n\r\nconst DropdownMenuCheckboxItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\r\n>(({ className, children, checked, ...props }, ref) => (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n))\r\nDropdownMenuCheckboxItem.displayName =\r\n DropdownMenuPrimitive.CheckboxItem.displayName\r\n\r\nconst DropdownMenuRadioItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\r\n>(({ className, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.RadioItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Circle className=\"h-2 w-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n))\r\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\r\n\r\nconst DropdownMenuLabel = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Label\r\n ref={ref}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-semibold\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\r\n\r\nconst DropdownMenuSeparator = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\r\n\r\nconst DropdownMenuShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuGroup,\r\n DropdownMenuPortal,\r\n DropdownMenuSub,\r\n DropdownMenuSubContent,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuRadioGroup,\r\n}\r\n","import * as React from \"react\"\r\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\r\n\r\nimport { cn } from \"../utils\"\r\n\r\nconst TooltipProvider = TooltipPrimitive.Provider\r\n\r\nconst Tooltip = TooltipPrimitive.Root\r\n\r\nconst TooltipTrigger = TooltipPrimitive.Trigger\r\n\r\nconst TooltipContent = React.forwardRef<\r\n React.ElementRef<typeof TooltipPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <TooltipPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md 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\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\r\n","import * as pdfjsLib from 'pdfjs-dist';\r\nimport { PDFDocument } from 'pdf-lib';\r\nimport type { PageImage } from '../types';\r\n\r\n// Set up PDF.js worker - use the self-hosted PDF.js worker\r\nif (typeof window !== 'undefined') {\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/build/pdf.worker.mjs';\r\n}\r\n\r\n/**\r\n * Converts a PDF document to an array of rendered page images\r\n *\r\n * @param pdfBytes - The PDF document as a Uint8Array\r\n * @param options - Optional configuration\r\n * @param options.hideFormFields - If true, hides existing form fields during rendering\r\n * @returns Promise resolving to array of PageImage objects with rendered images\r\n * @throws {Error} If PDF is invalid or rendering fails\r\n *\r\n * @example\r\n * ```ts\r\n * const pages = await pdfToImages(pdfBytes, { hideFormFields: true });\r\n * console.log(`Rendered ${pages.length} pages`);\r\n * ```\r\n */\r\nexport async function pdfToImages(\r\n pdfBytes: Uint8Array,\r\n options?: { hideFormFields?: boolean }\r\n): Promise<PageImage[]> {\r\n try {\r\n // Check if it starts with PDF header\r\n const header = new TextDecoder().decode(pdfBytes.slice(0, 10));\r\n\r\n if (!header.startsWith('%PDF-')) {\r\n console.error('Invalid PDF: Does not start with %PDF- header');\r\n throw new Error('Invalid PDF format: Missing PDF header');\r\n }\r\n\r\n // Set up PDF.js worker\r\n if (typeof window !== 'undefined') {\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/build/pdf.worker.mjs';\r\n }\r\n\r\n // Load PDF with PDF.js\r\n const loadingTask = pdfjsLib.getDocument({\r\n data: pdfBytes,\r\n verbosity: 0,\r\n });\r\n const pdfDoc = await loadingTask.promise;\r\n\r\n const pages: PageImage[] = [];\r\n\r\n // Try to load with pdf-lib for dimension comparison (optional)\r\n let pdfLibDoc = null;\r\n try {\r\n pdfLibDoc = await PDFDocument.load(pdfBytes);\r\n } catch {\r\n // PDF.js dimensions will be used instead\r\n }\r\n\r\n for (let pageNum = 1; pageNum <= pdfDoc.numPages; pageNum++) {\r\n const page = await pdfDoc.getPage(pageNum);\r\n const viewport = page.getViewport({ scale: 2.0 });\r\n\r\n // Get actual PDF dimensions (for coordinate conversion)\r\n let pdfWidth = viewport.width / 2.0;\r\n let pdfHeight = viewport.height / 2.0;\r\n\r\n // Use pdf-lib dimensions if available for consistency\r\n if (pdfLibDoc) {\r\n try {\r\n const pdfLibPage = pdfLibDoc.getPage(pageNum - 1);\r\n const pdfLibWidth = pdfLibPage.getWidth();\r\n const pdfLibHeight = pdfLibPage.getHeight();\r\n\r\n // Use pdf-lib dimensions for consistency\r\n pdfWidth = pdfLibWidth;\r\n pdfHeight = pdfLibHeight;\r\n } catch {\r\n // Use PDF.js dimensions as fallback\r\n }\r\n }\r\n\r\n // Create canvas at the scaled size for high quality rendering\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d')!;\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n\r\n // Render PDF page to canvas\r\n const hideFormFields = options?.hideFormFields ?? false;\r\n const renderContext = {\r\n canvasContext: context,\r\n viewport: viewport,\r\n // Hide annotations/form fields when specified\r\n renderInteractiveForms: !hideFormFields,\r\n // Additional options to ensure form fields are hidden\r\n ...(hideFormFields && {\r\n annotationMode: 0, // Disable annotations\r\n renderAnnotations: false,\r\n renderForms: false,\r\n }),\r\n };\r\n\r\n await page.render(renderContext).promise;\r\n\r\n // Convert canvas to data URL\r\n const imageUrl = canvas.toDataURL('image/png');\r\n\r\n pages.push({\r\n imageUrl,\r\n width: pdfWidth,\r\n height: pdfHeight,\r\n });\r\n }\r\n\r\n return pages;\r\n } catch (error) {\r\n console.error('Error converting PDF to images with PDF.js:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Converts an image file to a PDF document with a single page\r\n *\r\n * @param imageFile - The image file to convert (supports common image formats)\r\n * @returns Promise resolving to PDF bytes as Uint8Array\r\n * @throws {Error} If image fails to load or convert\r\n *\r\n * @example\r\n * ```ts\r\n * const pdfBytes = await imageToPdf(imageFile);\r\n * ```\r\n */\r\nexport async function imageToPdf(imageFile: File): Promise<Uint8Array> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d')!;\r\n\r\n img.onload = async () => {\r\n try {\r\n // Set canvas size to image size\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n // Draw image on canvas\r\n ctx.drawImage(img, 0, 0);\r\n\r\n // Convert canvas to PNG image data (canvas.toBlob defaults to PNG)\r\n canvas.toBlob(\r\n async (blob) => {\r\n if (!blob) {\r\n reject(new Error('Failed to convert image to blob'));\r\n return;\r\n }\r\n\r\n const imageBytes = new Uint8Array(await blob.arrayBuffer());\r\n\r\n // Create PDF with the image\r\n const pdfDoc = await PDFDocument.create();\r\n\r\n // Always embed as PNG since canvas.toBlob() produces PNG data\r\n const embeddedImage = await pdfDoc.embedPng(imageBytes);\r\n\r\n // Calculate dimensions to fit page while maintaining aspect ratio\r\n const { width, height } = embeddedImage.scale(1);\r\n const maxWidth = 595; // A4 width in points\r\n const maxHeight = 842; // A4 height in points\r\n\r\n let pageWidth = width;\r\n let pageHeight = height;\r\n\r\n // Scale down if image is larger than A4\r\n if (width > maxWidth || height > maxHeight) {\r\n const scale = Math.min(maxWidth / width, maxHeight / height);\r\n pageWidth = width * scale;\r\n pageHeight = height * scale;\r\n }\r\n\r\n // Create page with calculated dimensions\r\n const page = pdfDoc.addPage([\r\n Math.max(pageWidth, 100),\r\n Math.max(pageHeight, 100),\r\n ]);\r\n\r\n // Draw image centered on page\r\n const x = (page.getWidth() - pageWidth) / 2;\r\n const y = (page.getHeight() - pageHeight) / 2;\r\n\r\n page.drawImage(embeddedImage, {\r\n x: Math.max(x, 0),\r\n y: Math.max(y, 0),\r\n width: pageWidth,\r\n height: pageHeight,\r\n });\r\n\r\n const pdfBytes = await pdfDoc.save();\r\n resolve(pdfBytes);\r\n },\r\n 'image/png',\r\n 0.95\r\n ); // Explicitly specify PNG format with high quality\r\n } catch (error) {\r\n reject(error);\r\n }\r\n };\r\n\r\n img.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n\r\n // Create object URL from file and set as image source\r\n const objectUrl = URL.createObjectURL(imageFile);\r\n img.src = objectUrl;\r\n });\r\n}\r\n\r\n/**\r\n * Create a blob URL from PDF bytes for preview\r\n *\r\n * @param pdfBytes - The PDF document as Uint8Array\r\n * @returns Blob URL string\r\n *\r\n * @example\r\n * ```ts\r\n * const url = createPdfBlobUrl(pdfBytes);\r\n * // Remember to revoke: URL.revokeObjectURL(url);\r\n * ```\r\n */\r\nexport function createPdfBlobUrl(pdfBytes: Uint8Array): string {\r\n const blob = new Blob([pdfBytes as unknown as BlobPart], {\r\n type: 'application/pdf',\r\n });\r\n return URL.createObjectURL(blob);\r\n}\r\n\r\n/**\r\n * Triggers a browser download of a PDF file\r\n *\r\n * @param pdfBytes - The PDF document as Uint8Array\r\n * @param filename - The filename for the downloaded file (e.g., 'document.pdf')\r\n *\r\n * @example\r\n * ```ts\r\n * downloadPdf(pdfBytes, 'assembled-document.pdf');\r\n * ```\r\n */\r\nexport function downloadPdf(pdfBytes: Uint8Array, filename: string): void {\r\n const blob = new Blob([pdfBytes as unknown as BlobPart], {\r\n type: 'application/pdf',\r\n });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n}\r\n","/**\r\n * PDF Field Extraction Utilities\r\n * Extract form fields from PDFs with metadata support for preserving field properties\r\n */\r\n\r\nimport { PDFDocument, PDFName, PDFString, PDFTextField, PDFCheckBox, PDFDropdown, PDFRadioGroup } from 'pdf-lib';\r\n\r\n/**\r\n * Extracted field information\r\n */\r\nexport interface ExtractedField {\r\n name: string;\r\n type: 'text' | 'signature' | 'initials' | 'date' | 'checkbox' | 'radio' | 'dropdown' | 'text_label';\r\n page: number;\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n required: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n options?: string[];\r\n fieldId?: string;\r\n signer?: string;\r\n}\r\n\r\n/**\r\n * SigniphiMetadata structure stored in PDF Info dictionary\r\n */\r\ninterface SigniphiMetadata {\r\n version: string;\r\n fields: Record<string, {\r\n fieldId?: string;\r\n label?: string;\r\n signer?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n options?: string[];\r\n acknowledgements?: Array<{ id: string; title: string; description: string }>;\r\n }>;\r\n fieldIdIndex?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Extract SigniphiMetadata from a PDF document\r\n */\r\nexport function getSigniphiMetadata(pdfDoc: PDFDocument): SigniphiMetadata | null {\r\n try {\r\n const infoRef = pdfDoc.context.trailerInfo.Info;\r\n if (!infoRef) {\r\n return null;\r\n }\r\n\r\n const infoObj = pdfDoc.context.lookup(infoRef);\r\n if (!infoObj || typeof (infoObj as any).get !== 'function') {\r\n return null;\r\n }\r\n\r\n const infoDict = infoObj as any;\r\n const metadataObj = infoDict.get(PDFName.of('SigniphiMetadata'));\r\n\r\n if (!metadataObj) {\r\n return null;\r\n }\r\n\r\n // PDFString objects are encoded as \"(content)\" in their toString() representation\r\n const metadataStr = metadataObj.toString();\r\n\r\n // Extract content from PDF string format: (content)\r\n let jsonStr = metadataStr;\r\n if (metadataStr.startsWith('(') && metadataStr.endsWith(')')) {\r\n jsonStr = metadataStr.slice(1, -1);\r\n } else if (metadataStr.startsWith('<') && metadataStr.endsWith('>')) {\r\n jsonStr = metadataStr.slice(1, -1);\r\n }\r\n\r\n const metadata = JSON.parse(jsonStr);\r\n return metadata;\r\n } catch (error) {\r\n console.error('Failed to load Signiphi metadata:', error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Parse an encoded field name to extract base name (without __LABEL__, __SIGNER__, __PLACEHOLDER__)\r\n */\r\nfunction getBaseFieldName(encodedName: string): string {\r\n let baseName = encodedName;\r\n\r\n // Remove __SIGNER__ and everything after\r\n if (baseName.includes('__SIGNER__')) {\r\n baseName = baseName.split('__SIGNER__')[0];\r\n }\r\n\r\n // Remove __LABEL__ and everything after\r\n if (baseName.includes('__LABEL__')) {\r\n baseName = baseName.split('__LABEL__')[0];\r\n }\r\n\r\n // Remove __PLACEHOLDER__ and everything after\r\n if (baseName.includes('__PLACEHOLDER__')) {\r\n baseName = baseName.split('__PLACEHOLDER__')[0];\r\n }\r\n\r\n return baseName;\r\n}\r\n\r\n/**\r\n * Extract signer email from encoded field name\r\n */\r\nfunction getSignerFromFieldName(encodedName: string): string | undefined {\r\n if (encodedName.includes('__SIGNER__')) {\r\n const parts = encodedName.split('__SIGNER__');\r\n if (parts[1]) {\r\n // The signer might have additional encoding after it, but typically it's the last part\r\n return parts[1].split('__')[0] || parts[1];\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Determine field type from field name or widget type\r\n * Uses base name (without __SIGNER__, __LABEL__ encoding) to prevent false matches\r\n */\r\nfunction determineFieldType(fieldName: string, widgetType?: string): ExtractedField['type'] {\r\n // IMPORTANT: Use base name to prevent \"__SIGNER__\" from matching \"sign\" patterns\r\n const baseName = getBaseFieldName(fieldName);\r\n const nameLower = baseName.toLowerCase();\r\n\r\n // Check for specific suffixes/patterns\r\n if (nameLower.includes('_signature') || nameLower.includes('signature')) {\r\n return 'signature';\r\n }\r\n if (nameLower.includes('_initials') || nameLower.includes('initials')) {\r\n return 'initials';\r\n }\r\n if (nameLower.includes('_date') || nameLower.includes('date')) {\r\n return 'date';\r\n }\r\n if (widgetType === 'checkbox' || nameLower.includes('checkbox')) {\r\n return 'checkbox';\r\n }\r\n if (widgetType === 'radio' || nameLower.includes('radio')) {\r\n return 'radio';\r\n }\r\n if (widgetType === 'dropdown' || widgetType === 'select' || nameLower.includes('dropdown')) {\r\n return 'dropdown';\r\n }\r\n\r\n return 'text';\r\n}\r\n\r\n/**\r\n * Extract form fields from a PDF document\r\n * @param pdfBytes - PDF bytes\r\n * @returns Array of extracted fields with all properties\r\n */\r\nexport async function extractFieldsFromPdf(pdfBytes: Uint8Array): Promise<ExtractedField[]> {\r\n const pdfDoc = await PDFDocument.load(pdfBytes);\r\n const fields: ExtractedField[] = [];\r\n\r\n // Get SigniphiMetadata for field properties\r\n const metadata = getSigniphiMetadata(pdfDoc);\r\n\r\n // Get form and fields from pdf-lib\r\n const form = pdfDoc.getForm();\r\n const pdfFields = form.getFields();\r\n\r\n for (const field of pdfFields) {\r\n const fieldName = field.getName();\r\n const widgets = field.acroField.getWidgets();\r\n\r\n // Parse encoded field name to extract base name and signer\r\n const baseName = getBaseFieldName(fieldName);\r\n const signerFromName = getSignerFromFieldName(fieldName);\r\n\r\n // Get field-specific properties\r\n let required = false;\r\n let options: string[] | undefined;\r\n let widgetType: string | undefined;\r\n\r\n // Determine required flag and options based on field type\r\n if (field instanceof PDFTextField) {\r\n required = field.isRequired();\r\n console.log(`[field-extraction] PDFTextField \"${fieldName}\" isRequired=${required}`);\r\n } else if (field instanceof PDFCheckBox) {\r\n widgetType = 'checkbox';\r\n required = field.isRequired();\r\n console.log(`[field-extraction] PDFCheckBox \"${fieldName}\" isRequired=${required}`);\r\n } else if (field instanceof PDFDropdown) {\r\n widgetType = 'dropdown';\r\n required = field.isRequired();\r\n options = field.getOptions();\r\n console.log(`[field-extraction] PDFDropdown \"${fieldName}\" isRequired=${required}`);\r\n } else if (field instanceof PDFRadioGroup) {\r\n widgetType = 'radio';\r\n required = field.isRequired();\r\n options = field.getOptions();\r\n console.log(`[field-extraction] PDFRadioGroup \"${fieldName}\" isRequired=${required}`);\r\n } else {\r\n console.log(`[field-extraction] Unknown field type \"${fieldName}\" - defaulting required=false`);\r\n }\r\n\r\n // Process each widget (field can appear on multiple pages)\r\n for (const widget of widgets) {\r\n const rect = widget.getRectangle();\r\n const pageRef = widget.P();\r\n\r\n // Find page number\r\n let pageNumber = 1;\r\n if (pageRef) {\r\n const pages = pdfDoc.getPages();\r\n for (let i = 0; i < pages.length; i++) {\r\n if (pages[i].ref === pageRef) {\r\n pageNumber = i + 1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Get metadata for this field - try page-qualified key first (for combined PDFs),\r\n // then full name, then base name\r\n const pageQualifiedKey = `${baseName}_p${pageNumber}`;\r\n let fieldMetadata = metadata?.fields?.[pageQualifiedKey];\r\n if (!fieldMetadata) {\r\n fieldMetadata = metadata?.fields?.[fieldName];\r\n }\r\n if (!fieldMetadata && baseName !== fieldName) {\r\n fieldMetadata = metadata?.fields?.[baseName];\r\n }\r\n\r\n // Determine required and options, with metadata overrides\r\n let fieldRequired = required;\r\n let fieldOptions = options;\r\n if (fieldMetadata?.required !== undefined) {\r\n fieldRequired = fieldMetadata.required;\r\n }\r\n if (fieldMetadata?.options?.length) {\r\n fieldOptions = fieldMetadata.options;\r\n }\r\n\r\n const page = pdfDoc.getPage(pageNumber - 1);\r\n const pageHeight = page.getHeight();\r\n\r\n const extractedField: ExtractedField = {\r\n name: baseName, // Use clean base name without __SIGNER__ encoding (signer stored in signer property)\r\n type: determineFieldType(fieldName, widgetType), // Uses base name internally\r\n page: pageNumber,\r\n x: rect.x,\r\n y: pageHeight - rect.y - rect.height, // Convert from PDF coords (bottom-left) to top-left\r\n width: rect.width,\r\n height: rect.height,\r\n required: fieldRequired,\r\n options: fieldOptions,\r\n signer: signerFromName, // Extract signer from encoded name\r\n };\r\n\r\n // Apply metadata properties\r\n if (fieldMetadata) {\r\n if (fieldMetadata.fieldId) {\r\n extractedField.fieldId = fieldMetadata.fieldId;\r\n }\r\n if (fieldMetadata.label) {\r\n extractedField.label = fieldMetadata.label;\r\n }\r\n // Prefer signer from name encoding over metadata\r\n if (!extractedField.signer && fieldMetadata.signer) {\r\n extractedField.signer = fieldMetadata.signer;\r\n }\r\n if (fieldMetadata.placeholder) {\r\n extractedField.placeholder = fieldMetadata.placeholder;\r\n }\r\n }\r\n\r\n fields.push(extractedField);\r\n }\r\n }\r\n\r\n // Deduplicate fields by BASE name AND page\r\n // This consolidates signer-encoded variants (e.g., checkbox_123__SIGNER__aa@bb.cc)\r\n // into a single field with the signer assignment preserved\r\n // This matches dm-web's behavior where multi-signer PDFs show clean, deduplicated fields\r\n const deduplicatedFields = fields.reduce((acc, field) => {\r\n const newBaseName = getBaseFieldName(field.name);\r\n const existingIndex = acc.findIndex(f => {\r\n const existingBaseName = getBaseFieldName(f.name);\r\n return existingBaseName === newBaseName && f.page === field.page;\r\n });\r\n\r\n if (existingIndex === -1) {\r\n // No existing field with this base name on this page - add it\r\n acc.push(field);\r\n } else {\r\n // Found existing field with same base name - MERGE properties from both\r\n // This ensures we don't lose metadata when consolidating signer variants\r\n const existing = acc[existingIndex];\r\n acc[existingIndex] = {\r\n ...existing,\r\n // Prefer non-empty values from either field\r\n label: existing.label || field.label,\r\n placeholder: existing.placeholder || field.placeholder,\r\n required: existing.required || field.required,\r\n options: existing.options?.length ? existing.options : field.options,\r\n fieldId: existing.fieldId || field.fieldId,\r\n // Prefer signer from the field that has it\r\n signer: existing.signer || field.signer,\r\n };\r\n }\r\n return acc;\r\n }, [] as ExtractedField[]);\r\n\r\n return deduplicatedFields;\r\n}\r\n\r\n/**\r\n * Set SigniphiMetadata in a PDF document\r\n */\r\nexport function setSigniphiMetadata(pdfDoc: PDFDocument, metadata: SigniphiMetadata): void {\r\n try {\r\n const infoRef = pdfDoc.context.trailerInfo.Info;\r\n const infoObj = pdfDoc.context.lookup(infoRef);\r\n if (!infoObj || typeof (infoObj as any).set !== 'function') {\r\n throw new Error('Info object is not a PDFDict or does not have set method');\r\n }\r\n const infoDict = infoObj as any;\r\n const metadataString = JSON.stringify(metadata);\r\n\r\n infoDict.set(PDFName.of('SigniphiMetadata'), PDFString.of(metadataString));\r\n } catch (error) {\r\n console.error('Failed to set Signiphi metadata:', error);\r\n throw error;\r\n }\r\n}\r\n","/**\r\n * Add Form Fields to PDF\r\n * Re-adds form fields to a PDF after page assembly operations\r\n * This is the key to preserving form fields - don't try to preserve during copyPages,\r\n * instead extract fields first, copy pages, then re-add fields with adjusted positions.\r\n */\r\n\r\nimport { PDFDocument, PDFName, PDFString, rgb, StandardFonts } from 'pdf-lib';\r\n\r\n/**\r\n * Form field type enum matching document-prepare\r\n */\r\nexport enum FormFieldType {\r\n TEXT = 'text',\r\n SIGNATURE = 'signature',\r\n INITIALS = 'initials',\r\n DATE = 'date',\r\n CHECKBOX = 'checkbox',\r\n RADIO = 'radio',\r\n DROPDOWN = 'dropdown',\r\n TEXT_LABEL = 'text_label',\r\n}\r\n\r\n/**\r\n * Form field position\r\n */\r\nexport interface FormFieldPosition {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n page: number; // 1-indexed\r\n}\r\n\r\n/**\r\n * Form field for adding to PDF\r\n */\r\nexport interface FormFieldForPdf {\r\n name: string;\r\n type: FormFieldType | string;\r\n position: FormFieldPosition;\r\n label?: string;\r\n required?: boolean;\r\n options?: string[];\r\n defaultValue?: string;\r\n placeholder?: string;\r\n fontSize?: number;\r\n multiline?: boolean;\r\n maxLength?: number;\r\n assignedSignerEmail?: string;\r\n}\r\n\r\n/**\r\n * Parse an encoded field name to extract base name, label, and signer\r\n * Handles names like: \"checkbox_123__LABEL__My Label__SIGNER__aa@bb.cc\"\r\n * @public - exported for use in field extraction\r\n */\r\nexport function parseEncodedFieldName(encodedName: string): {\r\n baseName: string;\r\n label?: string;\r\n signer?: string;\r\n} {\r\n let baseName = encodedName;\r\n let label: string | undefined;\r\n let signer: string | undefined;\r\n\r\n // Extract signer if present\r\n if (baseName.includes('__SIGNER__')) {\r\n const parts = baseName.split('__SIGNER__');\r\n baseName = parts[0];\r\n signer = parts[1];\r\n }\r\n\r\n // Extract label if present\r\n if (baseName.includes('__LABEL__')) {\r\n const parts = baseName.split('__LABEL__');\r\n baseName = parts[0];\r\n label = parts[1];\r\n }\r\n\r\n // Extract placeholder if present (just remove it from base name)\r\n if (baseName.includes('__PLACEHOLDER__')) {\r\n const parts = baseName.split('__PLACEHOLDER__');\r\n baseName = parts[0];\r\n }\r\n\r\n return { baseName, label, signer };\r\n}\r\n\r\n/**\r\n * Encode field name with signer info (for multi-signer documents)\r\n * Prevents double-encoding by parsing the name first\r\n */\r\nfunction encodeFieldNameWithSigner(fieldName: string, signerEmail?: string): string {\r\n // Parse the name to check if it's already encoded\r\n const { baseName, signer: existingSigner } = parseEncodedFieldName(fieldName);\r\n\r\n // Use existing signer if present, otherwise use provided signerEmail\r\n const finalSigner = existingSigner || signerEmail;\r\n\r\n if (!finalSigner) return baseName;\r\n return `${baseName}__SIGNER__${finalSigner}`;\r\n}\r\n\r\n/**\r\n * Encode field name with label and signer\r\n * Prevents double-encoding by parsing the name first\r\n */\r\nfunction encodeFieldNameWithLabelAndSigner(fieldName: string, label?: string, signerEmail?: string): string {\r\n // Parse the name to check if it's already encoded\r\n const { baseName, label: existingLabel, signer: existingSigner } = parseEncodedFieldName(fieldName);\r\n\r\n // Use existing values if present, otherwise use provided values\r\n const finalLabel = existingLabel || label;\r\n const finalSigner = existingSigner || signerEmail;\r\n\r\n let name = baseName;\r\n if (finalLabel && finalLabel.trim()) {\r\n name = `${name}__LABEL__${finalLabel.trim()}`;\r\n }\r\n if (finalSigner) {\r\n name = `${name}__SIGNER__${finalSigner}`;\r\n }\r\n return name;\r\n}\r\n\r\n/**\r\n * Add form fields to a PDF document\r\n *\r\n * @param pdfBytes - The PDF document bytes\r\n * @param formFields - Array of form fields to add\r\n * @param options - Options for field addition\r\n * @returns Modified PDF bytes with form fields added\r\n */\r\nexport async function addFormFieldsToPdf(\r\n pdfBytes: Uint8Array,\r\n formFields: FormFieldForPdf[],\r\n options: {\r\n removeExistingFields?: boolean;\r\n drawLabels?: boolean;\r\n } = {}\r\n): Promise<Uint8Array> {\r\n const { removeExistingFields = false, drawLabels = false } = options;\r\n\r\n const pdfDoc = await PDFDocument.load(pdfBytes);\r\n const form = pdfDoc.getForm();\r\n const pages = pdfDoc.getPages();\r\n\r\n // Remove existing fields if requested\r\n if (removeExistingFields) {\r\n const existingFields = form.getFields();\r\n for (const field of existingFields) {\r\n try {\r\n // Robust widget cleanup\r\n const acroField = (field as any).acroField;\r\n if (acroField && typeof acroField.getWidgets === 'function') {\r\n let widgets = acroField.getWidgets();\r\n let safetyCounter = 0;\r\n const maxIterations = widgets.length + 5;\r\n\r\n while (widgets.length > 0 && safetyCounter < maxIterations) {\r\n try {\r\n acroField.removeWidget(widgets.length - 1);\r\n widgets = acroField.getWidgets();\r\n } catch {\r\n break;\r\n }\r\n safetyCounter++;\r\n }\r\n }\r\n form.removeField(field);\r\n } catch (error) {\r\n console.warn(`Failed to remove field ${field.getName()}:`, error);\r\n try {\r\n form.removeField(field);\r\n } catch {\r\n // Ignore fallback failure\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Embed font for labels\r\n const font = await pdfDoc.embedFont(StandardFonts.Helvetica);\r\n\r\n // Detect which field names appear on multiple pages (need unique suffixes)\r\n const fieldNamePages = new Map<string, Set<number>>();\r\n for (const field of formFields) {\r\n const baseName = field.name;\r\n if (!fieldNamePages.has(baseName)) {\r\n fieldNamePages.set(baseName, new Set());\r\n }\r\n fieldNamePages.get(baseName)!.add(field.position.page);\r\n }\r\n // Field names that need _p{page} suffix (appear on multiple pages)\r\n const conflictingNames = new Set<string>();\r\n for (const [name, pages] of fieldNamePages) {\r\n if (pages.size > 1) {\r\n conflictingNames.add(name);\r\n }\r\n }\r\n\r\n // Add each field\r\n for (const field of formFields) {\r\n const pageIndex = field.position.page - 1;\r\n\r\n if (pageIndex < 0 || pageIndex >= pages.length) {\r\n console.warn(`Field ${field.name} references page ${field.position.page} but PDF only has ${pages.length} pages`);\r\n continue;\r\n }\r\n\r\n const page = pages[pageIndex];\r\n const { height: pageHeight } = page.getSize();\r\n\r\n // Convert coordinates from top-left (UI) to bottom-left (PDF)\r\n const pdfX = field.position.x;\r\n const pdfY = pageHeight - field.position.y - field.position.height;\r\n\r\n // Only add _p{page} suffix when field name appears on multiple pages\r\n // This preserves per-page properties (required, etc.) for conflicting names\r\n const uniqueFieldName = conflictingNames.has(field.name)\r\n ? `${field.name}_p${field.position.page}`\r\n : field.name;\r\n\r\n try {\r\n const fieldType = typeof field.type === 'string' ? field.type : field.type;\r\n\r\n switch (fieldType) {\r\n case FormFieldType.TEXT:\r\n case 'text': {\r\n const encodedName = encodeFieldNameWithSigner(uniqueFieldName, field.assignedSignerEmail);\r\n const textField = form.createTextField(encodedName);\r\n textField.addToPage(page, {\r\n x: pdfX,\r\n y: pdfY,\r\n width: field.position.width,\r\n height: field.position.height,\r\n borderColor: rgb(0.5, 0.5, 0.5),\r\n backgroundColor: rgb(1, 1, 1),\r\n });\r\n\r\n // Store label in TU metadata\r\n if (field.label && field.label.trim()) {\r\n textField.acroField.dict.set(PDFName.of('TU'), PDFString.of(field.label));\r\n\r\n if (drawLabels) {\r\n const fontSize = Math.min(10, field.position.height * 0.4);\r\n const labelY = pdfY + field.position.height + 5;\r\n page.drawText(field.label, { x: pdfX, y: labelY, size: fontSize, font, color: rgb(0, 0, 0) });\r\n }\r\n }\r\n\r\n if (field.defaultValue && field.defaultValue.trim()) {\r\n textField.setText(field.defaultValue);\r\n }\r\n\r\n if (field.fontSize && field.fontSize >= 8 && field.fontSize <= 72) {\r\n try { textField.setFontSize(field.fontSize); } catch { /* ignore */ }\r\n }\r\n\r\n if (field.multiline) {\r\n try { textField.enableMultiline(); } catch { /* ignore */ }\r\n }\r\n\r\n if (field.maxLength && field.maxLength > 0) {\r\n try { textField.setMaxLength(field.maxLength); } catch { /* ignore */ }\r\n }\r\n\r\n if (field.required) {\r\n textField.enableRequired();\r\n }\r\n break;\r\n }\r\n\r\n case FormFieldType.CHECKBOX:\r\n case 'checkbox': {\r\n const encodedName = encodeFieldNameWithSigner(uniqueFieldName, field.assignedSignerEmail);\r\n const checkBox = form.createCheckBox(encodedName);\r\n checkBox.addToPage(page, {\r\n x: pdfX,\r\n y: pdfY,\r\n width: field.position.width,\r\n height: field.position.height,\r\n borderColor: rgb(0.5, 0.5, 0.5),\r\n backgroundColor: rgb(1, 1, 1),\r\n });\r\n\r\n if (field.defaultValue === 'true' || field.defaultValue === 'checked') {\r\n checkBox.check();\r\n }\r\n\r\n if (field.required) {\r\n checkBox.enableRequired();\r\n }\r\n\r\n if (field.label && field.label.trim()) {\r\n try { checkBox.acroField.dict.set(PDFName.of('TU'), PDFString.of(field.label)); } catch { /* ignore */ }\r\n\r\n if (drawLabels) {\r\n const fontSize = Math.min(12, field.position.height * 0.6);\r\n const labelX = pdfX + field.position.width + 5;\r\n const labelY = pdfY + (field.position.height - fontSize) / 2;\r\n page.drawText(field.label, { x: labelX, y: labelY, size: fontSize, font, color: rgb(0, 0, 0) });\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case FormFieldType.SIGNATURE:\r\n case 'signature': {\r\n const baseWithSuffix = field.name.endsWith('_signature') ? field.name : `${field.name}_signature`;\r\n const finalName = conflictingNames.has(field.name) ? `${baseWithSuffix}_p${field.position.page}` : baseWithSuffix;\r\n const encodedName = encodeFieldNameWithLabelAndSigner(finalName, field.label, field.assignedSignerEmail);\r\n const sigField = form.createTextField(encodedName);\r\n sigField.addToPage(page, {\r\n x: pdfX,\r\n y: pdfY,\r\n width: field.position.width,\r\n height: field.position.height,\r\n borderColor: rgb(0, 0, 1),\r\n backgroundColor: rgb(0.9, 0.9, 1),\r\n });\r\n\r\n if (field.label && field.label.trim()) {\r\n sigField.acroField.dict.set(PDFName.of('TU'), PDFString.of(field.label));\r\n }\r\n\r\n sigField.enableReadOnly();\r\n\r\n if (field.required) {\r\n sigField.enableRequired();\r\n }\r\n break;\r\n }\r\n\r\n case FormFieldType.INITIALS:\r\n case 'initials': {\r\n const baseWithSuffix = field.name.endsWith('_initials') ? field.name : `${field.name}_initials`;\r\n const finalName = conflictingNames.has(field.name) ? `${baseWithSuffix}_p${field.position.page}` : baseWithSuffix;\r\n const encodedName = encodeFieldNameWithLabelAndSigner(finalName, field.label, field.assignedSignerEmail);\r\n const initField = form.createTextField(encodedName);\r\n initField.addToPage(page, {\r\n x: pdfX,\r\n y: pdfY,\r\n width: field.position.width,\r\n height: field.position.height,\r\n borderColor: rgb(0.5, 0, 0.5),\r\n backgroundColor: rgb(1, 0.95, 1),\r\n });\r\n\r\n if (field.label && field.label.trim()) {\r\n initField.acroField.dict.set(PDFName.of('TU'), PDFString.of(field.label));\r\n }\r\n\r\n initField.enableReadOnly();\r\n\r\n if (field.required) {\r\n initField.enableRequired();\r\n }\r\n break;\r\n }\r\n\r\n case FormFieldType.DATE:\r\n case 'date': {\r\n const baseWithSuffix = field.name.endsWith('_date') ? field.name : `${field.name}_date`;\r\n const finalName = conflictingNames.has(field.name) ? `${baseWithSuffix}_p${field.position.page}` : baseWithSuffix;\r\n const encodedName = encodeFieldNameWithLabelAndSigner(finalName, field.label, field.assignedSignerEmail);\r\n const dateField = form.createTextField(encodedName);\r\n dateField.addToPage(page, {\r\n x: pdfX,\r\n y: pdfY,\r\n width: field.position.width,\r\n height: field.position.height,\r\n borderColor: rgb(0, 0.5, 0),\r\n backgroundColor: rgb(0.95, 1, 0.95),\r\n });\r\n\r\n if (field.label && field.label.trim()) {\r\n dateField.acroField.dict.set(PDFName.of('TU'), PDFString.of(field.label));\r\n }\r\n\r\n if (field.required) {\r\n dateField.enableRequired();\r\n }\r\n break;\r\n }\r\n\r\n case FormFieldType.DROPDOWN:\r\n case 'dropdown': {\r\n const encodedName = encodeFieldNameWithSigner(uniqueFieldName, field.assignedSignerEmail);\r\n const dropdown = form.createDropdown(encodedName);\r\n dropdown.addToPage(page, {\r\n x: pdfX,\r\n y: pdfY,\r\n width: field.position.width,\r\n height: field.position.height,\r\n borderColor: rgb(0.5, 0.5, 0.5),\r\n backgroundColor: rgb(1, 1, 1),\r\n });\r\n\r\n if (field.options && field.options.length > 0) {\r\n dropdown.addOptions(field.options);\r\n if (field.defaultValue && field.options.includes(field.defaultValue)) {\r\n dropdown.select(field.defaultValue);\r\n }\r\n }\r\n\r\n if (field.label && field.label.trim()) {\r\n try { dropdown.acroField.dict.set(PDFName.of('TU'), PDFString.of(field.label)); } catch { /* ignore */ }\r\n\r\n if (drawLabels) {\r\n const fontSize = Math.min(10, field.position.height * 0.4);\r\n const labelY = pdfY + field.position.height + 5;\r\n page.drawText(field.label, { x: pdfX, y: labelY, size: fontSize, font, color: rgb(0, 0, 0) });\r\n }\r\n }\r\n\r\n if (field.required) {\r\n dropdown.enableRequired();\r\n }\r\n break;\r\n }\r\n\r\n case FormFieldType.RADIO:\r\n case 'radio': {\r\n const encodedName = encodeFieldNameWithSigner(uniqueFieldName, field.assignedSignerEmail);\r\n const radioGroup = form.createRadioGroup(encodedName);\r\n\r\n if (field.options && field.options.length > 0) {\r\n // Calculate spacing for radio buttons\r\n const optionHeight = Math.min(20, field.position.height / field.options.length);\r\n const spacing = field.position.height / field.options.length;\r\n\r\n field.options.forEach((option, index) => {\r\n const optionY = pdfY + field.position.height - (index + 1) * spacing + (spacing - optionHeight) / 2;\r\n radioGroup.addOptionToPage(option, page, {\r\n x: pdfX,\r\n y: optionY,\r\n width: optionHeight,\r\n height: optionHeight,\r\n borderColor: rgb(0.5, 0.5, 0.5),\r\n backgroundColor: rgb(1, 1, 1),\r\n });\r\n\r\n // Draw option label\r\n if (drawLabels) {\r\n const labelX = pdfX + optionHeight + 5;\r\n const labelY = optionY + optionHeight / 4;\r\n page.drawText(option, { x: labelX, y: labelY, size: 10, font, color: rgb(0, 0, 0) });\r\n }\r\n });\r\n\r\n if (field.defaultValue && field.options.includes(field.defaultValue)) {\r\n radioGroup.select(field.defaultValue);\r\n }\r\n }\r\n\r\n if (field.label && field.label.trim()) {\r\n try { radioGroup.acroField.dict.set(PDFName.of('TU'), PDFString.of(field.label)); } catch { /* ignore */ }\r\n\r\n if (drawLabels) {\r\n const fontSize = 10;\r\n const labelY = pdfY + field.position.height + 5;\r\n page.drawText(field.label, { x: pdfX, y: labelY, size: fontSize, font, color: rgb(0, 0, 0) });\r\n }\r\n }\r\n\r\n if (field.required) {\r\n radioGroup.enableRequired();\r\n }\r\n break;\r\n }\r\n\r\n default:\r\n console.warn(`Unknown field type: ${fieldType} for field ${field.name}`);\r\n }\r\n } catch (error) {\r\n console.error(`Error adding field ${field.name}:`, error);\r\n }\r\n }\r\n\r\n return await pdfDoc.save();\r\n}\r\n\r\n/**\r\n * Map field positions after page assembly\r\n * Updates field page numbers based on the final page arrangement\r\n *\r\n * @param fields - Original fields with positions\r\n * @param pageMapping - Map of \"originalFileId_originalPageIndex\" -> newPageNumber\r\n * @returns Fields with updated page positions\r\n */\r\nexport function mapFieldPositionsAfterAssembly<T extends { position: FormFieldPosition }>(\r\n fields: T[],\r\n pageMapping: Map<string, number>\r\n): T[] {\r\n return fields.map(field => {\r\n // Try to find new page number from mapping\r\n // This requires the caller to track originalFileId and originalPageIndex\r\n // For simple cases where mapping key is just the page number, use that\r\n const mappingKey = String(field.position.page - 1); // 0-indexed for mapping\r\n const newPageNumber = pageMapping.get(mappingKey);\r\n\r\n if (newPageNumber !== undefined) {\r\n return {\r\n ...field,\r\n position: { ...field.position, page: newPageNumber }\r\n };\r\n }\r\n\r\n return field;\r\n }).filter(field => {\r\n // Filter out fields whose pages no longer exist\r\n const mappingKey = String(field.position.page - 1);\r\n return pageMapping.has(mappingKey) || pageMapping.size === 0;\r\n });\r\n}\r\n","import React, { \r\n useState, \r\n useCallback, \r\n useEffect, \r\n useRef, \r\n forwardRef, \r\n useImperativeHandle, \r\n useReducer,\r\n useMemo\r\n} from 'react';\r\nimport { DndProvider, useDrag, useDrop } from 'react-dnd';\r\nimport { HTML5Backend } from 'react-dnd-html5-backend';\r\nimport { \r\n Upload, \r\n FileText, \r\n Image as ImageIcon, \r\n Trash2, \r\n MoreHorizontal,\r\n GripVertical,\r\n Check,\r\n X,\r\n FolderOpen\r\n} from 'lucide-react';\r\n\r\nimport {\r\n Button,\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n CardTitle,\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n Badge,\r\n Input,\r\n Label,\r\n Tooltip,\r\n TooltipContent,\r\n TooltipProvider,\r\n TooltipTrigger\r\n} from '../lib/ui';\r\n\r\nimport { pdfToImages, imageToPdf } from '../utils/pdf-helpers';\r\nimport { extractFieldsFromPdf } from '../utils/field-extraction';\r\nimport { addFormFieldsToPdf, type FormFieldForPdf } from '../utils/add-form-fields';\r\nimport { cn } from '../lib/utils';\r\nimport type { PageInfo, FileInfo, PageAssemblerState, PageAssemblerProps, PageAssemblerHandle, TrackedFormField } from '../types';\r\n\r\n// Multi-select utilities\r\nconst isMultiSelectModifier = (event: React.MouseEvent): boolean => {\r\n return event.ctrlKey || event.metaKey;\r\n};\r\n\r\nconst isRangeSelectModifier = (event: React.MouseEvent): boolean => {\r\n return event.shiftKey;\r\n};\r\n\r\nconst handleContextMenu = (event: React.MouseEvent): void => {\r\n if (event.ctrlKey && /Mac|iPod|iPhone|iPad/.test(navigator.userAgent)) {\r\n event.preventDefault();\r\n }\r\n};\r\n\r\nconst getPageRange = (files: FileInfo[], startPageId: string, endPageId: string): string[] => {\r\n const allPages: { id: string; fileId: string }[] = [];\r\n files.forEach(file => {\r\n file.pages.forEach(page => {\r\n allPages.push({ id: page.id, fileId: file.id });\r\n });\r\n });\r\n\r\n const startIndex = allPages.findIndex(p => p.id === startPageId);\r\n const endIndex = allPages.findIndex(p => p.id === endPageId);\r\n\r\n if (startIndex === -1 || endIndex === -1) return [];\r\n\r\n const start = Math.min(startIndex, endIndex);\r\n const end = Math.max(startIndex, endIndex);\r\n\r\n return allPages.slice(start, end + 1).map(p => p.id);\r\n};\r\n\r\n// Action types for reducer\r\ntype AssemblerAction = \r\n | { type: 'ADD_FILE'; payload: FileInfo }\r\n | { type: 'REMOVE_FILE'; payload: string }\r\n | { type: 'UPDATE_FILE'; payload: { fileId: string; updates: Partial<FileInfo> } }\r\n | { type: 'REORDER_PAGES'; payload: { fileId: string; newOrder: PageInfo[] } }\r\n | { type: 'REORDER_FILES'; payload: { newOrder: FileInfo[] } }\r\n | { type: 'MOVE_PAGES'; payload: { pageIds: string[]; targetFileId: string } }\r\n | { type: 'DELETE_PAGES'; payload: string[] }\r\n | { type: 'SET_SELECTION'; payload: string[] }\r\n | { type: 'TOGGLE_PAGE_SELECTION'; payload: { pageId: string; files: FileInfo[] } }\r\n | { type: 'RANGE_SELECT_PAGES'; payload: { pageId: string; files: FileInfo[] } }\r\n | { type: 'SINGLE_SELECT_PAGE'; payload: string }\r\n | { type: 'CLEAR_SELECTION' }\r\n | { type: 'RENAME_FILE'; payload: { fileId: string; name: string } }\r\n | { type: 'RESET'; payload?: PageAssemblerState };\r\n\r\n// Reducer\r\nfunction assemblerReducer(state: PageAssemblerState, action: AssemblerAction): PageAssemblerState {\r\n switch (action.type) {\r\n case 'ADD_FILE': {\r\n const existingFileById = state.files.find(f => f.id === action.payload.id);\r\n if (existingFileById) return state;\r\n \r\n return {\r\n ...state,\r\n files: [...state.files, action.payload]\r\n };\r\n }\r\n \r\n case 'REMOVE_FILE':\r\n return {\r\n ...state,\r\n files: state.files.filter(f => f.id !== action.payload),\r\n selection: state.selection.filter(pageId => \r\n !state.files.find(f => f.id === action.payload)?.pages.some(p => p.id === pageId)\r\n )\r\n };\r\n \r\n case 'UPDATE_FILE':\r\n return {\r\n ...state,\r\n files: state.files.map(f => \r\n f.id === action.payload.fileId \r\n ? { ...f, ...action.payload.updates }\r\n : f\r\n )\r\n };\r\n \r\n case 'REORDER_PAGES':\r\n return {\r\n ...state,\r\n files: state.files.map(f =>\r\n f.id === action.payload.fileId\r\n ? { ...f, pages: action.payload.newOrder }\r\n : f\r\n )\r\n };\r\n \r\n case 'REORDER_FILES':\r\n return {\r\n ...state,\r\n files: action.payload.newOrder\r\n };\r\n \r\n case 'MOVE_PAGES': {\r\n const { pageIds, targetFileId } = action.payload;\r\n const existingPageIds = state.files.flatMap(f => f.pages.map(p => p.id));\r\n const pagesToActuallyMove = pageIds.filter(id => existingPageIds.includes(id));\r\n \r\n if (pagesToActuallyMove.length === 0) return state;\r\n \r\n const pagesToMove: PageInfo[] = [];\r\n \r\n for (const file of state.files) {\r\n for (const page of file.pages) {\r\n if (pagesToActuallyMove.includes(page.id)) {\r\n pagesToMove.push(page);\r\n }\r\n }\r\n }\r\n \r\n const updatedFiles = state.files.map(file => {\r\n if (file.id === targetFileId) {\r\n const existingPageIds = file.pages.map(p => p.id);\r\n const newPages = pagesToMove.filter(p => !existingPageIds.includes(p.id));\r\n \r\n return {\r\n ...file,\r\n pages: [...file.pages, ...newPages]\r\n };\r\n } else {\r\n return {\r\n ...file,\r\n pages: file.pages.filter(page => !pagesToActuallyMove.includes(page.id))\r\n };\r\n }\r\n });\r\n \r\n return {\r\n ...state,\r\n files: updatedFiles,\r\n selection: []\r\n };\r\n }\r\n \r\n case 'DELETE_PAGES': {\r\n const pageIdsToDelete = action.payload;\r\n const existingPageIds = state.files.flatMap(f => f.pages.map(p => p.id));\r\n const pagesToActuallyDelete = pageIdsToDelete.filter(id => existingPageIds.includes(id));\r\n \r\n if (pagesToActuallyDelete.length === 0) return state;\r\n \r\n const updatedFiles = state.files.map(file => {\r\n const remainingPages = file.pages.filter(page => !pagesToActuallyDelete.includes(page.id));\r\n return {\r\n ...file,\r\n pages: remainingPages\r\n };\r\n }).filter(file => file.pages.length > 0);\r\n \r\n return {\r\n ...state,\r\n files: updatedFiles,\r\n selection: state.selection.filter(id => !pagesToActuallyDelete.includes(id))\r\n };\r\n }\r\n \r\n case 'SET_SELECTION':\r\n return {\r\n ...state,\r\n selection: action.payload\r\n };\r\n \r\n case 'TOGGLE_PAGE_SELECTION': {\r\n const { pageId } = action.payload;\r\n const isSelected = state.selection.includes(pageId);\r\n \r\n if (isSelected) {\r\n return {\r\n ...state,\r\n selection: state.selection.filter(id => id !== pageId),\r\n lastSelectedPageId: pageId\r\n };\r\n } else {\r\n return {\r\n ...state,\r\n selection: [...state.selection, pageId],\r\n lastSelectedPageId: pageId\r\n };\r\n }\r\n }\r\n \r\n case 'RANGE_SELECT_PAGES': {\r\n const { pageId, files } = action.payload;\r\n \r\n if (!state.lastSelectedPageId) {\r\n return {\r\n ...state,\r\n selection: [pageId],\r\n lastSelectedPageId: pageId\r\n };\r\n }\r\n \r\n const rangePageIds = getPageRange(files, state.lastSelectedPageId, pageId);\r\n const newSelection = [...new Set([...state.selection, ...rangePageIds])];\r\n \r\n return {\r\n ...state,\r\n selection: newSelection,\r\n lastSelectedPageId: pageId\r\n };\r\n }\r\n \r\n case 'SINGLE_SELECT_PAGE': {\r\n return {\r\n ...state,\r\n selection: [action.payload],\r\n lastSelectedPageId: action.payload\r\n };\r\n }\r\n \r\n case 'CLEAR_SELECTION':\r\n return {\r\n ...state,\r\n selection: [],\r\n lastSelectedPageId: undefined\r\n };\r\n \r\n case 'RENAME_FILE':\r\n return {\r\n ...state,\r\n files: state.files.map(f =>\r\n f.id === action.payload.fileId\r\n ? { ...f, name: action.payload.name }\r\n : f\r\n )\r\n };\r\n \r\n case 'RESET':\r\n return action.payload || { files: [], selection: [], lastSelectedPageId: undefined };\r\n \r\n default:\r\n return state;\r\n }\r\n}\r\n\r\n// Drag and drop types\r\nconst DND_TYPES = {\r\n PAGE: 'page',\r\n FILE: 'file'\r\n} as const;\r\n\r\n// DraggablePageThumbnail Component\r\ninterface DraggablePageThumbnailProps {\r\n page: PageInfo;\r\n fileId: string;\r\n index: number;\r\n isSelected: boolean;\r\n onSingleSelect: (pageId: string) => void;\r\n onToggleSelect: (pageId: string) => void;\r\n onRangeSelect: (pageId: string) => void;\r\n movePageInFile: (dragIndex: number, hoverIndex: number) => void;\r\n isDraggingPageRef?: React.MutableRefObject<boolean>;\r\n}\r\n\r\nconst DraggablePageThumbnail: React.FC<DraggablePageThumbnailProps> = ({\r\n page,\r\n fileId,\r\n index,\r\n isSelected,\r\n onSingleSelect,\r\n onToggleSelect,\r\n onRangeSelect,\r\n movePageInFile,\r\n isDraggingPageRef\r\n}) => {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const [{ isDragging }, drag] = useDrag({\r\n type: DND_TYPES.PAGE,\r\n item: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = true;\r\n }\r\n return { pageId: page.id, fileId, index };\r\n },\r\n collect: (monitor) => ({\r\n isDragging: monitor.isDragging(),\r\n }),\r\n end: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = false;\r\n }\r\n }\r\n });\r\n\r\n const [{ handlerId }, drop] = useDrop<\r\n { pageId: string; fileId: string; index: number },\r\n void,\r\n { handlerId: string | symbol | null }\r\n >({\r\n accept: DND_TYPES.PAGE,\r\n collect(monitor) {\r\n return {\r\n handlerId: monitor.getHandlerId(),\r\n };\r\n },\r\n hover(item, monitor) {\r\n if (!ref.current) return;\r\n if (item.fileId !== fileId) return;\r\n\r\n const dragIndex = item.index;\r\n const hoverIndex = index;\r\n\r\n if (dragIndex === hoverIndex) return;\r\n\r\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\r\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\r\n const clientOffset = monitor.getClientOffset();\r\n const hoverClientY = clientOffset!.y - hoverBoundingRect.top;\r\n\r\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) return;\r\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) return;\r\n\r\n movePageInFile(dragIndex, hoverIndex);\r\n item.index = hoverIndex;\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n drag(drop(ref));\r\n }, [drag, drop]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n handleContextMenu(e);\r\n \r\n if (isRangeSelectModifier(e)) {\r\n onRangeSelect(page.id);\r\n } else if (isMultiSelectModifier(e)) {\r\n onToggleSelect(page.id);\r\n } else {\r\n onSingleSelect(page.id);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n data-handler-id={handlerId}\r\n className={cn(\r\n \"relative group cursor-pointer border-2 rounded-lg overflow-hidden bg-white transition-all\",\r\n isDragging && \"opacity-50 scale-95\",\r\n isSelected ? \"border-primary shadow-md\" : \"border-gray-200 hover:border-gray-300\"\r\n )}\r\n onClick={handleClick}\r\n >\r\n <div className=\"absolute top-1 right-1 opacity-0 group-hover:opacity-100 transition-opacity bg-black/50 rounded p-1 z-10\">\r\n <GripVertical className=\"h-3 w-3 text-white\" />\r\n </div>\r\n \r\n <div\r\n className=\"absolute top-2 left-2 z-10\"\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n checked={isSelected}\r\n onChange={(e) => {\r\n const nativeEvent = e.nativeEvent;\r\n if (nativeEvent && 'shiftKey' in nativeEvent && nativeEvent.shiftKey) {\r\n onRangeSelect(page.id);\r\n } else if (nativeEvent && (('ctrlKey' in nativeEvent && nativeEvent.ctrlKey) || ('metaKey' in nativeEvent && nativeEvent.metaKey))) {\r\n onToggleSelect(page.id);\r\n } else {\r\n onSingleSelect(page.id);\r\n }\r\n }}\r\n onContextMenu={handleContextMenu}\r\n className=\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary focus:ring-2 bg-white/90 cursor-pointer\"\r\n />\r\n </div>\r\n \r\n <div className=\"aspect-[3/4] relative\">\r\n <img\r\n src={page.thumbUrl}\r\n alt={`Page ${index + 1}`}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n \r\n <Badge\r\n variant=\"secondary\"\r\n className=\"absolute bottom-1 right-1 text-xs px-1 py-0\"\r\n >\r\n {index + 1}\r\n </Badge>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ReorderablePageGrid Component\r\ninterface ReorderablePageGridProps {\r\n file: FileInfo;\r\n selectedPageIds: string[];\r\n onSingleSelectPage: (pageId: string) => void;\r\n onTogglePageSelect: (pageId: string) => void;\r\n onRangeSelectPage: (pageId: string) => void;\r\n onReorderPages: (fileId: string, newOrder: PageInfo[]) => void;\r\n isDraggingPageRef?: React.MutableRefObject<boolean>;\r\n}\r\n\r\nconst ReorderablePageGrid: React.FC<ReorderablePageGridProps> = ({\r\n file,\r\n selectedPageIds,\r\n onSingleSelectPage,\r\n onTogglePageSelect,\r\n onRangeSelectPage,\r\n onReorderPages,\r\n isDraggingPageRef\r\n}) => {\r\n const movePageInFile = useCallback((dragIndex: number, hoverIndex: number) => {\r\n const newPages = [...file.pages];\r\n const draggedPage = newPages[dragIndex];\r\n \r\n newPages.splice(dragIndex, 1);\r\n newPages.splice(hoverIndex, 0, draggedPage);\r\n \r\n onReorderPages(file.id, newPages);\r\n }, [file.id, file.pages, onReorderPages]);\r\n\r\n return (\r\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4\">\r\n {file.pages.map((page, index) => (\r\n <DraggablePageThumbnail\r\n key={page.id}\r\n page={page}\r\n fileId={file.id}\r\n index={index}\r\n isSelected={selectedPageIds.includes(page.id)}\r\n onSingleSelect={onSingleSelectPage}\r\n onToggleSelect={onTogglePageSelect}\r\n onRangeSelect={onRangeSelectPage}\r\n movePageInFile={movePageInFile}\r\n isDraggingPageRef={isDraggingPageRef}\r\n />\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\n// File drop zone component\r\ninterface FileDropZoneProps {\r\n targetIndex: number;\r\n onReorderFiles: (newOrder: FileInfo[]) => void;\r\n files: FileInfo[];\r\n}\r\n\r\nconst FileDropZone: React.FC<FileDropZoneProps> = ({\r\n targetIndex,\r\n onReorderFiles,\r\n files\r\n}) => {\r\n const [{ isOver, canDrop }, drop] = useDrop<\r\n { fileId: string; file: FileInfo },\r\n void,\r\n { isOver: boolean; canDrop: boolean }\r\n >({\r\n accept: DND_TYPES.FILE,\r\n drop: (item) => {\r\n const currentIndex = files.findIndex(f => f.id === item.fileId);\r\n if (currentIndex === -1) return;\r\n \r\n let newIndex = targetIndex;\r\n if (currentIndex < targetIndex) {\r\n newIndex = targetIndex - 1;\r\n }\r\n \r\n if (currentIndex === newIndex) return;\r\n \r\n const newFiles = [...files];\r\n const [movedFile] = newFiles.splice(currentIndex, 1);\r\n newFiles.splice(newIndex, 0, movedFile);\r\n \r\n onReorderFiles(newFiles);\r\n },\r\n collect: (monitor) => ({\r\n isOver: monitor.isOver(),\r\n canDrop: monitor.canDrop(),\r\n }),\r\n });\r\n\r\n const isActive = isOver && canDrop;\r\n\r\n return (\r\n <div\r\n ref={drop as unknown as React.Ref<HTMLDivElement>}\r\n className={cn(\r\n \"h-2 transition-all duration-200 mx-4\",\r\n isActive ? \"h-8 bg-primary/20 border-2 border-dashed border-primary rounded-lg\" : \"\"\r\n )}\r\n >\r\n {isActive && (\r\n <div className=\"flex items-center justify-center h-full text-primary text-sm font-medium\">\r\n Drop here to reorder\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// FileCard component\r\ninterface FileCardProps {\r\n file: FileInfo;\r\n selectedPageIds: string[];\r\n onSingleSelectPage: (pageId: string) => void;\r\n onTogglePageSelect: (pageId: string) => void;\r\n onRangeSelectPage: (pageId: string) => void;\r\n onSelectAllInFile: (fileId: string) => void;\r\n onRemoveFile: (fileId: string) => void;\r\n onRenameFile: (fileId: string, name: string) => void;\r\n onReorderPages: (fileId: string, newOrder: PageInfo[]) => void;\r\n isDraggingPageRef?: React.MutableRefObject<boolean>;\r\n}\r\n\r\nconst FileCard: React.FC<FileCardProps> = ({\r\n file,\r\n selectedPageIds,\r\n onSingleSelectPage,\r\n onTogglePageSelect,\r\n onRangeSelectPage,\r\n onSelectAllInFile,\r\n onRemoveFile,\r\n onRenameFile,\r\n onReorderPages,\r\n isDraggingPageRef\r\n}) => {\r\n const [isRenaming, setIsRenaming] = useState(false);\r\n const [newName, setNewName] = useState(file.name);\r\n const fileSelectedPages = file.pages.filter(p => selectedPageIds.includes(p.id));\r\n const allPagesSelected = file.pages.length > 0 && fileSelectedPages.length === file.pages.length;\r\n\r\n const [{ isDraggingFile }, dragFile] = useDrag({\r\n type: DND_TYPES.FILE,\r\n item: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = true;\r\n }\r\n return { fileId: file.id, file };\r\n },\r\n collect: (monitor) => ({\r\n isDraggingFile: monitor.isDragging(),\r\n }),\r\n end: () => {\r\n if (isDraggingPageRef?.current !== undefined) {\r\n isDraggingPageRef.current = false;\r\n }\r\n }\r\n });\r\n\r\n const [, drop] = useDrop<\r\n { pageId: string; fileId: string; index: number },\r\n void,\r\n object\r\n >({\r\n accept: DND_TYPES.PAGE,\r\n drop: (_item) => {\r\n // Moving between files handled in parent\r\n },\r\n });\r\n\r\n const handleRename = () => {\r\n if (newName.trim() && newName !== file.name) {\r\n onRenameFile(file.id, newName.trim());\r\n }\r\n setIsRenaming(false);\r\n };\r\n\r\n const combineRefs = useCallback((el: HTMLDivElement | null) => {\r\n drop(el);\r\n dragFile(el);\r\n }, [drop, dragFile]);\r\n\r\n return (\r\n <Card \r\n className={cn(\r\n \"mb-6 transition-all cursor-move\",\r\n isDraggingFile ? \"opacity-50 rotate-2 scale-105 shadow-2xl z-50\" : \"opacity-100\"\r\n )} \r\n ref={combineRefs}\r\n >\r\n <CardHeader className=\"pb-3\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-3\">\r\n {file.type === 'pdf' ? (\r\n <FileText className=\"h-5 w-5 text-red-500\" />\r\n ) : (\r\n <ImageIcon className=\"h-5 w-5 text-blue-500\" />\r\n )}\r\n \r\n {isRenaming ? (\r\n <div className=\"flex items-center gap-2\">\r\n <Input\r\n value={newName}\r\n onChange={(e) => setNewName(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') handleRename();\r\n if (e.key === 'Escape') {\r\n setIsRenaming(false);\r\n setNewName(file.name);\r\n }\r\n }}\r\n className=\"h-8 text-sm\"\r\n autoFocus\r\n />\r\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={handleRename}>\r\n <Check className=\"h-3 w-3\" />\r\n </Button>\r\n <Button \r\n type=\"button\"\r\n size=\"sm\" \r\n variant=\"ghost\" \r\n onClick={() => {\r\n setIsRenaming(false);\r\n setNewName(file.name);\r\n }}\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </Button>\r\n </div>\r\n ) : (\r\n <div>\r\n <CardTitle className=\"text-base\">{file.name}</CardTitle>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {file.pages.length} page{file.pages.length !== 1 ? 's' : ''}\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n \r\n <div className=\"flex items-center gap-2\">\r\n <TooltipProvider>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onSelectAllInFile(file.id)}\r\n disabled={file.pages.length === 0}\r\n >\r\n {allPagesSelected && <Check className=\"h-3 w-3 mr-2\" />}\r\n Select All\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent>\r\n Select all pages in this file\r\n </TooltipContent>\r\n </Tooltip>\r\n </TooltipProvider>\r\n \r\n <DropdownMenu>\r\n <DropdownMenuTrigger asChild>\r\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"hover:bg-gray-100 rounded-lg\">\r\n <MoreHorizontal className=\"h-4 w-4\" />\r\n </Button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\" className=\"w-52\">\r\n <DropdownMenuItem onClick={() => setIsRenaming(true)}>\r\n <svg className=\"h-4 w-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" />\r\n </svg>\r\n Rename File\r\n </DropdownMenuItem>\r\n <DropdownMenuItem \r\n onClick={() => onRemoveFile(file.id)}\r\n className=\"text-red-600 hover:text-red-700 hover:bg-red-50 focus:text-red-700 focus:bg-red-50\"\r\n >\r\n <Trash2 className=\"h-4 w-4 mr-2\" />\r\n Remove File\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n </div>\r\n </div>\r\n </CardHeader>\r\n \r\n <CardContent>\r\n <ReorderablePageGrid\r\n file={file}\r\n selectedPageIds={selectedPageIds}\r\n onSingleSelectPage={onSingleSelectPage}\r\n onTogglePageSelect={onTogglePageSelect}\r\n onRangeSelectPage={onRangeSelectPage}\r\n onReorderPages={onReorderPages}\r\n isDraggingPageRef={isDraggingPageRef}\r\n />\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\n// Bulk action bar\r\ninterface BulkActionBarProps {\r\n selectedCount: number;\r\n files: FileInfo[];\r\n onMovePages: (targetFileId: string) => void;\r\n onDeletePages: () => void;\r\n onClearSelection: () => void;\r\n}\r\n\r\nconst BulkActionBar: React.FC<BulkActionBarProps> = ({\r\n selectedCount,\r\n files,\r\n onMovePages,\r\n onDeletePages,\r\n onClearSelection\r\n}) => {\r\n if (selectedCount === 0) return null;\r\n\r\n return (\r\n <div className=\"sticky top-4 z-10 mb-4\">\r\n <Card className=\"p-4 shadow-lg border-primary/20 bg-blue-50\">\r\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\r\n <div className=\"flex items-center gap-4 flex-wrap\">\r\n <span \r\n className=\"inline-flex items-center text-sm font-medium text-white rounded-full\"\r\n style={{ \r\n backgroundColor: '#0099cd',\r\n padding: '6px 14px',\r\n }}\r\n >\r\n {selectedCount} page{selectedCount !== 1 ? 's' : ''} selected\r\n </span>\r\n \r\n {files.length > 1 && (\r\n <div className=\"flex items-center gap-2\">\r\n <TooltipProvider>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Label htmlFor=\"move-select\" className=\"text-sm font-medium text-gray-700\">\r\n Move to file:\r\n </Label>\r\n </TooltipTrigger>\r\n <TooltipContent>\r\n <p>Move selected pages to another file</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n </TooltipProvider>\r\n <Select onValueChange={onMovePages}>\r\n <SelectTrigger id=\"move-select\" className=\"w-48 bg-white\">\r\n <SelectValue placeholder=\"Choose file...\" />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {files.map((file) => (\r\n <SelectItem key={file.id} value={file.id}>\r\n <div className=\"flex items-center gap-2\">\r\n {file.type === 'pdf' ? (\r\n <FileText className=\"h-4 w-4\" />\r\n ) : (\r\n <ImageIcon className=\"h-4 w-4\" />\r\n )}\r\n <span className=\"truncate\">{file.name}</span>\r\n </div>\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n )}\r\n </div>\r\n \r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n type=\"button\"\r\n variant=\"destructive\"\r\n size=\"sm\"\r\n onClick={onDeletePages}\r\n >\r\n <Trash2 className=\"h-4 w-4 mr-2\" />\r\n Delete Selected\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={onClearSelection}\r\n className=\"bg-white\"\r\n >\r\n Clear Selection\r\n </Button>\r\n </div>\r\n </div>\r\n </Card>\r\n </div>\r\n );\r\n};\r\n\r\n// Main PageAssembler component\r\nexport const PageAssembler = forwardRef<PageAssemblerHandle, PageAssemblerProps>(\r\n (props, ref) => {\r\n const { \r\n initialPdf, \r\n initialState, \r\n onChange, \r\n onValidityChange, \r\n limits, \r\n disableFileUpload = false,\r\n className \r\n } = props;\r\n \r\n const [state, dispatch] = useReducer(assemblerReducer, \r\n initialState || { \r\n files: [], \r\n selection: [], \r\n lastSelectedPageId: undefined\r\n });\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [processingStatus, setProcessingStatus] = useState<string>('');\r\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\r\n const [showRemoveFileConfirm, setShowRemoveFileConfirm] = useState(false);\r\n const [fileToRemove, setFileToRemove] = useState<{ id: string; name: string; pageCount: number } | null>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n \r\n const processedInitialPdfRef = useRef<string | null>(null);\r\n const isDraggingPage = useRef<boolean>(false);\r\n const onChangeRef = useRef(onChange);\r\n\r\n // Store original bytes for all files ever added, so pages moved from deleted files can still be copied\r\n const originalBytesCache = useRef<Map<string, Uint8Array>>(new Map());\r\n \r\n const summary = useMemo(() => ({\r\n totalFiles: state.files.length,\r\n totalPages: state.files.reduce((sum, file) => sum + file.pages.length, 0)\r\n }), [state.files]);\r\n \r\n const isValid = summary.totalPages > 0;\r\n\r\n useEffect(() => {\r\n onChangeRef.current = onChange;\r\n }, [onChange]);\r\n\r\n const debouncedOnChange = useMemo(\r\n () => debounce((newState: PageAssemblerState) => {\r\n onChangeRef.current?.(newState);\r\n }, 200),\r\n []\r\n );\r\n\r\n useEffect(() => {\r\n debouncedOnChange(state);\r\n }, [state, debouncedOnChange]);\r\n\r\n useEffect(() => {\r\n onValidityChange?.(isValid);\r\n }, [isValid, onValidityChange]);\r\n\r\n // Process initial PDF\r\n const processInitialPdf = useCallback(async (pdf: File | Blob | ArrayBuffer | Uint8Array) => {\r\n setIsLoading(true);\r\n setProcessingStatus('Processing initial PDF...');\r\n \r\n try {\r\n let pdfBytes: Uint8Array;\r\n \r\n if (pdf instanceof Blob) {\r\n const arrayBuffer = await pdf.arrayBuffer();\r\n pdfBytes = new Uint8Array(arrayBuffer);\r\n } else if (pdf instanceof ArrayBuffer) {\r\n pdfBytes = new Uint8Array(pdf);\r\n } else {\r\n pdfBytes = new Uint8Array(pdf);\r\n }\r\n\r\n const defensiveCopy = new Uint8Array(pdfBytes);\r\n const pages = await pdfToImages(defensiveCopy, { hideFormFields: true });\r\n \r\n if (pages.length === 0) {\r\n throw new Error('Failed to process PDF pages');\r\n }\r\n\r\n let originalBytes: Uint8Array;\r\n let originalFile: File;\r\n \r\n try {\r\n new Uint8Array(pdfBytes.buffer || pdfBytes, 0, 1);\r\n originalBytes = new Uint8Array(pdfBytes);\r\n originalFile = new File([pdfBytes.buffer as ArrayBuffer], 'Initial Document.pdf', { type: 'application/pdf' });\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n if (errorMessage.includes('detached') || errorMessage.includes('ArrayBuffer')) {\r\n throw new Error('Initial PDF data is no longer available. Please try refreshing the page.');\r\n }\r\n throw error;\r\n }\r\n\r\n const fileName = (pdf instanceof File) ? pdf.name : 'Initial Document.pdf';\r\n const fileId = generateId();\r\n \r\n const file: FileInfo = {\r\n id: fileId,\r\n name: fileName,\r\n type: 'pdf',\r\n originalFile,\r\n originalBytes,\r\n pages: pages.map((page, index) => ({\r\n id: generateId(),\r\n srcIndex: index,\r\n thumbUrl: page.imageUrl,\r\n width: page.width,\r\n height: page.height,\r\n mime: 'application/pdf',\r\n originalFileId: fileId\r\n }))\r\n };\r\n\r\n // Cache original bytes so pages can be copied even if file is later deleted\r\n originalBytesCache.current.set(fileId, originalBytes);\r\n\r\n dispatch({ type: 'ADD_FILE', payload: file });\r\n } catch (error) {\r\n console.error('Error processing initial PDF:', error);\r\n } finally {\r\n setIsLoading(false);\r\n setProcessingStatus('');\r\n }\r\n }, []);\r\n\r\n // Initialize with initial PDF if provided\r\n useEffect(() => {\r\n if (initialPdf && !initialState) {\r\n const pdfIdentifier = initialPdf instanceof Uint8Array \r\n ? `uint8array-${initialPdf.length}-${initialPdf[0]}-${initialPdf[initialPdf.length-1]}` \r\n : `${initialPdf.constructor.name}-${(initialPdf as File | Blob).size || (initialPdf as ArrayBuffer).byteLength}`;\r\n \r\n if (processedInitialPdfRef.current === pdfIdentifier) {\r\n return;\r\n }\r\n \r\n processedInitialPdfRef.current = pdfIdentifier;\r\n processInitialPdf(initialPdf);\r\n }\r\n }, [initialPdf, initialState, processInitialPdf]);\r\n\r\n // Handle initialState changes\r\n useEffect(() => {\r\n if (initialState) {\r\n dispatch({ type: 'RESET', payload: initialState });\r\n }\r\n }, [initialState]);\r\n\r\n // File processing\r\n const processFiles = useCallback(async (files: FileList | File[]) => {\r\n const fileArray = Array.from(files);\r\n const maxFileSize = (limits?.maxFileSizeMB || 10) * 1024 * 1024;\r\n \r\n setIsLoading(true);\r\n setProcessingStatus(`Processing ${fileArray.length} file${fileArray.length !== 1 ? 's' : ''}...`);\r\n\r\n for (const file of fileArray) {\r\n try {\r\n if (file.size > maxFileSize) {\r\n console.error(`File ${file.name} is too large`);\r\n continue;\r\n }\r\n\r\n const validTypes = ['application/pdf', 'image/png', 'image/jpeg', 'image/jpg', 'image/webp'];\r\n if (!validTypes.includes(file.type)) {\r\n console.error(`Unsupported file type: ${file.name}`);\r\n continue;\r\n }\r\n\r\n const fileInfo: FileInfo = {\r\n id: generateId(),\r\n name: file.name,\r\n type: file.type === 'application/pdf' ? 'pdf' : 'image',\r\n originalFile: file,\r\n originalBytes: new Uint8Array(),\r\n pages: []\r\n };\r\n\r\n if (file.type === 'application/pdf') {\r\n setProcessingStatus(`Processing PDF: ${file.name}`);\r\n const arrayBuffer = await file.arrayBuffer();\r\n const pdfBytes = new Uint8Array(arrayBuffer);\r\n fileInfo.originalBytes = new Uint8Array(pdfBytes);\r\n\r\n // Cache original bytes so pages can be copied even if file is later deleted\r\n originalBytesCache.current.set(fileInfo.id, fileInfo.originalBytes);\r\n\r\n const defensiveCopy = new Uint8Array(pdfBytes);\r\n const pages = await pdfToImages(defensiveCopy, { hideFormFields: true });\r\n fileInfo.pages = pages.map((page, index) => ({\r\n id: generateId(),\r\n srcIndex: index,\r\n thumbUrl: page.imageUrl,\r\n width: page.width,\r\n height: page.height,\r\n mime: file.type,\r\n originalFileId: fileInfo.id\r\n }));\r\n } else {\r\n setProcessingStatus(`Processing image: ${file.name}`);\r\n\r\n const arrayBuffer = await file.arrayBuffer();\r\n const imageBytes = new Uint8Array(arrayBuffer);\r\n fileInfo.originalBytes = new Uint8Array(imageBytes);\r\n\r\n // Cache original bytes so pages can be copied even if file is later deleted\r\n originalBytesCache.current.set(fileInfo.id, fileInfo.originalBytes);\r\n\r\n const thumbUrl = URL.createObjectURL(file);\r\n\r\n const img = new Image();\r\n const dimensions = await new Promise<{ width: number; height: number }>((resolve) => {\r\n img.onload = () => resolve({ width: img.width, height: img.height });\r\n img.src = thumbUrl;\r\n });\r\n\r\n const maxWidth = 595;\r\n const maxHeight = 842;\r\n\r\n let pdfWidth = dimensions.width;\r\n let pdfHeight = dimensions.height;\r\n\r\n if (dimensions.width > maxWidth || dimensions.height > maxHeight) {\r\n const scaleX = maxWidth / dimensions.width;\r\n const scaleY = maxHeight / dimensions.height;\r\n const scale = Math.min(scaleX, scaleY);\r\n\r\n pdfWidth = dimensions.width * scale;\r\n pdfHeight = dimensions.height * scale;\r\n }\r\n\r\n fileInfo.pages = [{\r\n id: generateId(),\r\n srcIndex: 0,\r\n thumbUrl,\r\n width: Math.max(pdfWidth, 100),\r\n height: Math.max(pdfHeight, 100),\r\n mime: file.type,\r\n originalFileId: fileInfo.id\r\n }];\r\n }\r\n\r\n dispatch({ type: 'ADD_FILE', payload: fileInfo });\r\n } catch (error) {\r\n console.error(`Error processing file ${file.name}:`, error);\r\n }\r\n }\r\n\r\n setIsLoading(false);\r\n setProcessingStatus('');\r\n }, [limits]);\r\n\r\n // File upload handlers\r\n const handleFileUpload = useCallback(() => {\r\n fileInputRef.current?.click();\r\n }, []);\r\n\r\n const handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const files = e.target.files;\r\n if (files) {\r\n processFiles(files);\r\n }\r\n if (fileInputRef.current) {\r\n fileInputRef.current.value = '';\r\n }\r\n }, [processFiles]);\r\n\r\n const handleDrop = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n \r\n const files = e.dataTransfer.files;\r\n if (files && files.length > 0) {\r\n if (isDraggingPage.current) {\r\n return;\r\n }\r\n processFiles(files);\r\n }\r\n }, [processFiles]);\r\n\r\n const handleDragOver = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n }, []);\r\n\r\n // Selection handlers\r\n const handleSingleSelectPage = useCallback((pageId: string) => {\r\n dispatch({ type: 'SINGLE_SELECT_PAGE', payload: pageId });\r\n }, []);\r\n\r\n const handleTogglePageSelect = useCallback((pageId: string) => {\r\n dispatch({ type: 'TOGGLE_PAGE_SELECTION', payload: { pageId, files: state.files } });\r\n }, [state.files]);\r\n\r\n const handleRangeSelectPage = useCallback((pageId: string) => {\r\n dispatch({ type: 'RANGE_SELECT_PAGES', payload: { pageId, files: state.files } });\r\n }, [state.files]);\r\n\r\n const handleSelectAllInFile = useCallback((fileId: string) => {\r\n const file = state.files.find(f => f.id === fileId);\r\n if (!file) return;\r\n \r\n const filePageIds = file.pages.map(p => p.id);\r\n const allSelected = filePageIds.every(id => state.selection.includes(id));\r\n \r\n if (allSelected) {\r\n dispatch({ \r\n type: 'SET_SELECTION', \r\n payload: state.selection.filter(id => !filePageIds.includes(id)) \r\n });\r\n } else {\r\n const newSelection = [...new Set([...state.selection, ...filePageIds])];\r\n dispatch({ type: 'SET_SELECTION', payload: newSelection });\r\n }\r\n }, [state.files, state.selection]);\r\n\r\n // Bulk operations\r\n const handleMovePages = useCallback((targetFileId: string) => {\r\n if (state.selection.length === 0) return;\r\n \r\n dispatch({ type: 'MOVE_PAGES', payload: { pageIds: state.selection, targetFileId } });\r\n }, [state.selection]);\r\n\r\n const handleDeletePages = useCallback(() => {\r\n setShowDeleteConfirm(true);\r\n }, []);\r\n\r\n const confirmDeletePages = useCallback(() => {\r\n dispatch({ type: 'DELETE_PAGES', payload: state.selection });\r\n setShowDeleteConfirm(false);\r\n }, [state.selection]);\r\n\r\n const handleRemoveFile = useCallback((fileId: string) => {\r\n const file = state.files.find(f => f.id === fileId);\r\n if (!file) return;\r\n\r\n if (file.pages.length > 0) {\r\n setFileToRemove({\r\n id: file.id,\r\n name: file.name,\r\n pageCount: file.pages.length\r\n });\r\n setShowRemoveFileConfirm(true);\r\n } else {\r\n dispatch({ type: 'REMOVE_FILE', payload: fileId });\r\n }\r\n }, [state.files]);\r\n\r\n const confirmRemoveFile = useCallback(() => {\r\n if (fileToRemove) {\r\n dispatch({ type: 'REMOVE_FILE', payload: fileToRemove.id });\r\n setFileToRemove(null);\r\n }\r\n setShowRemoveFileConfirm(false);\r\n }, [fileToRemove]);\r\n\r\n const handleRenameFile = useCallback((fileId: string, name: string) => {\r\n dispatch({ type: 'RENAME_FILE', payload: { fileId, name } });\r\n }, []);\r\n \r\n const handleReorderFiles = useCallback((newOrder: FileInfo[]) => {\r\n dispatch({ type: 'REORDER_FILES', payload: { newOrder } });\r\n }, []);\r\n\r\n // Imperative API\r\n useImperativeHandle(ref, () => ({\r\n assemble: async () => {\r\n setIsLoading(true);\r\n setProcessingStatus('Assembling PDF...');\r\n\r\n try {\r\n const { PDFDocument, PDFName, PDFString } = await import('pdf-lib');\r\n\r\n const loadedPdfs = new Map<string, import('pdf-lib').PDFDocument>();\r\n const fileMap = new Map<string, FileInfo>();\r\n\r\n // Count PDF files and check if we can preserve form fields\r\n const pdfFiles = state.files.filter(f => f.type === 'pdf' && f.originalBytes?.length > 0);\r\n const imageFiles = state.files.filter(f => f.type === 'image');\r\n\r\n // Check if this is a single-PDF scenario\r\n const isSinglePdfScenario = pdfFiles.length === 1 && imageFiles.length === 0;\r\n\r\n for (const file of state.files) {\r\n fileMap.set(file.id, file);\r\n\r\n if (file.type === 'pdf' && file.originalBytes && file.originalBytes.length > 0) {\r\n try {\r\n const sourcePdf = await PDFDocument.load(file.originalBytes);\r\n loadedPdfs.set(file.id, sourcePdf);\r\n } catch (error) {\r\n console.error(`Error loading PDF for file ${file.id}:`, error);\r\n }\r\n }\r\n }\r\n\r\n // Also load PDFs for any pages that reference deleted files (from cache)\r\n // This handles the case where pages were moved from file B to file A, then file B was deleted\r\n const referencedFileIds = new Set<string>();\r\n for (const file of state.files) {\r\n for (const page of file.pages) {\r\n const originalFileId = page.originalFileId || file.id;\r\n if (!loadedPdfs.has(originalFileId)) {\r\n referencedFileIds.add(originalFileId);\r\n }\r\n }\r\n }\r\n\r\n // Load PDFs from cache for referenced but deleted files\r\n for (const fileId of referencedFileIds) {\r\n const cachedBytes = originalBytesCache.current.get(fileId);\r\n if (cachedBytes && cachedBytes.length > 0) {\r\n try {\r\n console.log(`[PageAssembler] Loading PDF from cache for deleted file ${fileId}`);\r\n const sourcePdf = await PDFDocument.load(cachedBytes);\r\n loadedPdfs.set(fileId, sourcePdf);\r\n } catch (error) {\r\n console.error(`Error loading cached PDF for file ${fileId}:`, error);\r\n }\r\n }\r\n }\r\n\r\n // Single PDF scenario: check if we can return original bytes\r\n console.log('[PageAssembler] Checking single PDF scenario:', {\r\n isSinglePdfScenario,\r\n pdfFilesCount: pdfFiles.length,\r\n imageFilesCount: imageFiles.length,\r\n });\r\n\r\n if (isSinglePdfScenario && pdfFiles[0]) {\r\n const sourceFile = pdfFiles[0];\r\n const sourcePdf = loadedPdfs.get(sourceFile.id);\r\n\r\n console.log('[PageAssembler] Single PDF check:', {\r\n sourcePdfLoaded: !!sourcePdf,\r\n pagesCount: sourceFile.pages.length,\r\n originalBytesLength: sourceFile.originalBytes?.length,\r\n });\r\n\r\n if (sourcePdf) {\r\n const desiredPageIndices = sourceFile.pages.map(p => p.srcIndex);\r\n const originalPageCount = sourcePdf.getPageCount();\r\n\r\n const allPagesFromSameFile = sourceFile.pages.every(\r\n p => (p.originalFileId || sourceFile.id) === sourceFile.id\r\n );\r\n\r\n const isOriginalOrder = desiredPageIndices.length === originalPageCount &&\r\n desiredPageIndices.every((idx, i) => idx === i);\r\n\r\n console.log('[PageAssembler] Original bytes check:', {\r\n allPagesFromSameFile,\r\n isOriginalOrder,\r\n desiredPageIndices,\r\n originalPageCount,\r\n });\r\n\r\n if (allPagesFromSameFile && isOriginalOrder) {\r\n // No changes - return original bytes to preserve EVERYTHING\r\n console.log('[PageAssembler] ✅ Returning ORIGINAL bytes (form fields preserved)');\r\n const arrayBuffer = sourceFile.originalBytes.buffer.slice(\r\n sourceFile.originalBytes.byteOffset,\r\n sourceFile.originalBytes.byteOffset + sourceFile.originalBytes.byteLength\r\n ) as ArrayBuffer;\r\n const blob = new Blob([arrayBuffer], { type: 'application/pdf' });\r\n return blob;\r\n } else {\r\n console.log('[PageAssembler] ⚠️ Pages modified, will use copyPages (form fields may be lost)');\r\n }\r\n }\r\n }\r\n\r\n // ===== MULTI-PDF FIELD PRESERVATION APPROACH =====\r\n // 1. Extract fields from ALL source PDFs BEFORE copyPages\r\n // 2. Build page mapping (original page -> new page in combined doc)\r\n // 3. Copy pages (which loses widget annotations)\r\n // 4. Re-add ALL extracted fields with adjusted page numbers\r\n\r\n console.log('[PageAssembler] Starting multi-PDF assembly with field preservation');\r\n\r\n // Step 1: Extract fields from all source PDFs and collect metadata\r\n const allExtractedFields: TrackedFormField[] = [];\r\n const mergedMetadata: {\r\n version: string;\r\n fields: Record<string, any>;\r\n fieldIdIndex: Record<string, string>;\r\n } = {\r\n version: '1.0',\r\n fields: {},\r\n fieldIdIndex: {}\r\n };\r\n\r\n // Build a map of fileId -> { srcPageIndex -> pages in state that use this srcPageIndex }\r\n // This helps us track which pages from each source PDF are included and where they end up\r\n const filePageUsage = new Map<string, Map<number, PageInfo[]>>();\r\n\r\n for (const file of state.files) {\r\n for (const page of file.pages) {\r\n const originalFileId = page.originalFileId || file.id;\r\n if (!filePageUsage.has(originalFileId)) {\r\n filePageUsage.set(originalFileId, new Map());\r\n }\r\n const pageUsage = filePageUsage.get(originalFileId)!;\r\n if (!pageUsage.has(page.srcIndex)) {\r\n pageUsage.set(page.srcIndex, []);\r\n }\r\n pageUsage.get(page.srcIndex)!.push(page);\r\n }\r\n }\r\n\r\n // Calculate what page number each page will end up at in the combined document\r\n // We need to iterate in the order pages will be added to combined doc\r\n let combinedPageIndex = 0;\r\n const pageIdToNewPageNumber = new Map<string, number>();\r\n\r\n for (const file of state.files) {\r\n for (const page of file.pages) {\r\n combinedPageIndex++;\r\n pageIdToNewPageNumber.set(page.id, combinedPageIndex); // 1-indexed\r\n }\r\n }\r\n\r\n console.log('[PageAssembler] Page mapping:', Object.fromEntries(pageIdToNewPageNumber));\r\n\r\n // Helper function to extract fields from a PDF and map to new page numbers\r\n const extractAndMapFields = async (\r\n fileId: string,\r\n fileName: string,\r\n pdfBytes: Uint8Array,\r\n sourcePdf: import('pdf-lib').PDFDocument | undefined\r\n ) => {\r\n // Extract SigniphiMetadata from source PDF (we'll merge it per-field below)\r\n let sourceMetadata: { fields?: Record<string, any>; fieldIdIndex?: Record<string, string> } | null = null;\r\n if (sourcePdf) {\r\n try {\r\n const sourceInfoRef = sourcePdf.context.trailerInfo.Info;\r\n if (sourceInfoRef) {\r\n const sourceInfoDict = sourcePdf.context.lookup(sourceInfoRef);\r\n if (sourceInfoDict && typeof (sourceInfoDict as any).get === 'function') {\r\n const metadataObj = (sourceInfoDict as any).get(PDFName.of('SigniphiMetadata'));\r\n if (metadataObj) {\r\n const metadataStr = metadataObj.toString();\r\n let jsonStr = metadataStr;\r\n if (metadataStr.startsWith('(') && metadataStr.endsWith(')')) {\r\n jsonStr = metadataStr.slice(1, -1);\r\n }\r\n sourceMetadata = JSON.parse(jsonStr);\r\n }\r\n }\r\n }\r\n } catch (metadataError) {\r\n console.warn(`Could not read metadata from PDF ${fileName}:`, metadataError);\r\n }\r\n }\r\n\r\n // Extract form fields using pdf-lib\r\n console.log(`[PageAssembler] Extracting fields from \"${fileName}\"`);\r\n const extractedFields = await extractFieldsFromPdf(pdfBytes);\r\n console.log(`[PageAssembler] Found ${extractedFields.length} fields in \"${fileName}\"`);\r\n\r\n // Get which pages from this file are being used\r\n const pageUsageForFile = filePageUsage.get(fileId) || new Map();\r\n\r\n // Map extracted fields to their new page numbers\r\n for (const field of extractedFields) {\r\n const originalPage = field.page; // 1-indexed page in source PDF\r\n const srcIndex = originalPage - 1; // Convert to 0-indexed\r\n\r\n // Find all page instances that use this srcIndex from this file\r\n const pageInstances = pageUsageForFile.get(srcIndex) || [];\r\n\r\n for (const pageInstance of pageInstances) {\r\n const newPageNumber = pageIdToNewPageNumber.get(pageInstance.id);\r\n\r\n if (newPageNumber !== undefined) {\r\n // Create a tracked field with updated page number (keep original field name)\r\n const trackedField: TrackedFormField = {\r\n name: field.name,\r\n type: field.type,\r\n position: {\r\n x: field.x,\r\n y: field.y,\r\n width: field.width,\r\n height: field.height,\r\n page: newPageNumber, // Updated to new page number\r\n },\r\n pageId: pageInstance.id,\r\n originalFileId: fileId,\r\n label: field.label,\r\n required: field.required,\r\n options: field.options,\r\n placeholder: field.placeholder,\r\n fieldId: field.fieldId,\r\n assignedSignerEmail: field.signer,\r\n };\r\n\r\n allExtractedFields.push(trackedField);\r\n console.log(`[PageAssembler] Mapped field \"${field.name}\" from page ${originalPage} to page ${newPageNumber}`);\r\n\r\n // Merge metadata using page-qualified key to prevent overwrites\r\n // when combining PDFs with same field names but different properties\r\n const metadataKey = `${field.name}_p${newPageNumber}`;\r\n if (sourceMetadata?.fields?.[field.name]) {\r\n mergedMetadata.fields[metadataKey] = sourceMetadata.fields[field.name];\r\n }\r\n if (sourceMetadata?.fieldIdIndex?.[field.name]) {\r\n mergedMetadata.fieldIdIndex[metadataKey] = sourceMetadata.fieldIdIndex[field.name];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Extract fields from current PDF files in state\r\n const processedFileIds = new Set<string>();\r\n for (const file of state.files) {\r\n if (file.type !== 'pdf' || !file.originalBytes || file.originalBytes.length === 0) continue;\r\n\r\n try {\r\n await extractAndMapFields(file.id, file.name, file.originalBytes, loadedPdfs.get(file.id));\r\n processedFileIds.add(file.id);\r\n } catch (extractError) {\r\n console.error(`Error extracting fields from ${file.name}:`, extractError);\r\n }\r\n }\r\n\r\n // Also extract fields from cached PDFs (deleted files that still have pages in use)\r\n for (const fileId of referencedFileIds) {\r\n if (processedFileIds.has(fileId)) continue;\r\n\r\n const cachedBytes = originalBytesCache.current.get(fileId);\r\n if (cachedBytes && cachedBytes.length > 0) {\r\n try {\r\n console.log(`[PageAssembler] Extracting fields from cached file ${fileId}`);\r\n await extractAndMapFields(fileId, `Cached file ${fileId}`, cachedBytes, loadedPdfs.get(fileId));\r\n } catch (extractError) {\r\n console.error(`Error extracting fields from cached file ${fileId}:`, extractError);\r\n }\r\n }\r\n }\r\n\r\n console.log(`[PageAssembler] Total extracted fields: ${allExtractedFields.length}`);\r\n console.log(`[PageAssembler] Field names:`, allExtractedFields.map(f => `${f.name} (page ${f.position.page})`));\r\n\r\n // Step 2: Create combined document and copy pages\r\n const combinedDoc = await PDFDocument.create();\r\n\r\n for (const file of state.files) {\r\n if (file.pages.length === 0) continue;\r\n\r\n for (const page of file.pages) {\r\n const originalFileId = page.originalFileId || file.id;\r\n const sourceFile = fileMap.get(originalFileId);\r\n\r\n if (!sourceFile) {\r\n console.warn(`Source file not found for page ${page.id}`);\r\n continue;\r\n }\r\n\r\n if (sourceFile.type === 'pdf') {\r\n const sourcePdf = loadedPdfs.get(originalFileId);\r\n if (!sourcePdf) {\r\n console.warn(`Source PDF not loaded for page ${page.id}`);\r\n continue;\r\n }\r\n\r\n const sourcePageCount = sourcePdf.getPageCount();\r\n\r\n if (page.srcIndex >= 0 && page.srcIndex < sourcePageCount) {\r\n try {\r\n const copiedPages = await combinedDoc.copyPages(sourcePdf, [page.srcIndex]);\r\n copiedPages.forEach(copiedPage => {\r\n // Remove widget annotations from copied page to prevent duplicates\r\n // Widget annotations are form field visuals that get copied but orphaned\r\n // We'll re-add proper form fields later via addFormFieldsToPdf\r\n try {\r\n const annotsRef = copiedPage.node.get(PDFName.of('Annots'));\r\n if (annotsRef) {\r\n copiedPage.node.delete(PDFName.of('Annots'));\r\n }\r\n } catch (annotError) {\r\n console.warn('Could not remove annotations from copied page:', annotError);\r\n }\r\n combinedDoc.addPage(copiedPage);\r\n });\r\n } catch (copyError) {\r\n console.error(`Error copying page ${page.srcIndex}:`, copyError);\r\n throw new Error(`Failed to copy page: ${copyError instanceof Error ? copyError.message : String(copyError)}`);\r\n }\r\n }\r\n } else if (sourceFile.type === 'image' && sourceFile.originalFile) {\r\n try {\r\n const imagePdfBytes = await imageToPdf(sourceFile.originalFile);\r\n const imagePdf = await PDFDocument.load(imagePdfBytes);\r\n const copiedPages = await combinedDoc.copyPages(imagePdf, [0]);\r\n copiedPages.forEach(copiedPage => combinedDoc.addPage(copiedPage));\r\n } catch (imageError) {\r\n console.error(`Error converting image page:`, imageError);\r\n throw new Error(`Failed to convert image: ${imageError instanceof Error ? imageError.message : String(imageError)}`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Step 3: Write merged SigniphiMetadata to combined document\r\n if (Object.keys(mergedMetadata.fields).length > 0) {\r\n try {\r\n const newInfoRef = combinedDoc.context.trailerInfo.Info;\r\n if (newInfoRef) {\r\n const newInfoDict = combinedDoc.context.lookup(newInfoRef);\r\n if (newInfoDict && typeof (newInfoDict as any).set === 'function') {\r\n (newInfoDict as any).set(\r\n PDFName.of('SigniphiMetadata'),\r\n PDFString.of(JSON.stringify(mergedMetadata))\r\n );\r\n }\r\n }\r\n } catch (metadataError) {\r\n console.warn('Could not write merged metadata:', metadataError);\r\n }\r\n }\r\n\r\n // Save the combined document (without form fields - copyPages loses them)\r\n let pdfBytes = await combinedDoc.save();\r\n\r\n // Step 4: Re-add all extracted fields to the combined document\r\n if (allExtractedFields.length > 0) {\r\n console.log(`[PageAssembler] Re-adding ${allExtractedFields.length} fields to combined document`);\r\n\r\n // Convert TrackedFormField to FormFieldForPdf format\r\n const fieldsForPdf: FormFieldForPdf[] = allExtractedFields.map(field => ({\r\n name: field.name,\r\n type: field.type,\r\n position: field.position,\r\n label: field.label,\r\n required: field.required,\r\n options: field.options,\r\n placeholder: field.placeholder,\r\n assignedSignerEmail: field.assignedSignerEmail,\r\n }));\r\n\r\n try {\r\n pdfBytes = await addFormFieldsToPdf(pdfBytes, fieldsForPdf, {\r\n removeExistingFields: true, // Remove any orphaned field references\r\n drawLabels: false,\r\n });\r\n console.log('[PageAssembler] ✅ Successfully re-added form fields to combined PDF');\r\n } catch (addFieldsError) {\r\n console.error('[PageAssembler] Error re-adding fields:', addFieldsError);\r\n // Continue with the PDF without fields rather than failing completely\r\n }\r\n }\r\n\r\n // Create ArrayBuffer from Uint8Array (TypeScript 5.9+ has stricter typing)\r\n const arrayBuffer = pdfBytes.buffer.slice(pdfBytes.byteOffset, pdfBytes.byteOffset + pdfBytes.byteLength) as ArrayBuffer;\r\n const blob = new Blob([arrayBuffer], { type: 'application/pdf' });\r\n\r\n return blob;\r\n } catch (error) {\r\n console.error('Error assembling PDF:', error);\r\n throw error;\r\n } finally {\r\n setIsLoading(false);\r\n setProcessingStatus('');\r\n }\r\n },\r\n \r\n getSummary: () => summary,\r\n \r\n isBusy: () => isLoading,\r\n \r\n getState: () => state,\r\n }), [state, summary, isLoading]);\r\n\r\n return (\r\n <TooltipProvider>\r\n <DndProvider backend={HTML5Backend}>\r\n <div className={cn(\"space-y-3\", className)}>\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"text-lg font-medium\">Page Assembly</h3>\r\n <p className=\"text-sm text-muted-foreground\">\r\n Upload, arrange, and combine pages into a single PDF document\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex items-center gap-4\">\r\n {summary.totalPages > 0 && (\r\n <span className=\"text-sm text-gray-500\">\r\n {summary.totalFiles} file{summary.totalFiles !== 1 ? 's' : ''}, {summary.totalPages} page{summary.totalPages !== 1 ? 's' : ''}\r\n </span>\r\n )}\r\n \r\n {!disableFileUpload && (\r\n <>\r\n <Button type=\"button\" onClick={handleFileUpload} disabled={isLoading}>\r\n <Upload className=\"h-4 w-4 mr-2\" />\r\n Add Files\r\n </Button>\r\n \r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n multiple\r\n accept=\".pdf,image/*\"\r\n onChange={handleFileChange}\r\n className=\"hidden\"\r\n />\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Loading indicator */}\r\n {isLoading && (\r\n <Card className=\"p-4\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-primary\"></div>\r\n <span className=\"text-sm\">{processingStatus}</span>\r\n </div>\r\n </Card>\r\n )}\r\n\r\n {/* Bulk actions */}\r\n <BulkActionBar\r\n selectedCount={state.selection.length}\r\n files={state.files}\r\n onMovePages={handleMovePages}\r\n onDeletePages={handleDeletePages}\r\n onClearSelection={() => dispatch({ type: 'CLEAR_SELECTION' })}\r\n />\r\n\r\n {/* Files */}\r\n {state.files.length > 0 ? (\r\n <div\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n >\r\n <FileDropZone\r\n targetIndex={0}\r\n onReorderFiles={handleReorderFiles}\r\n files={state.files}\r\n />\r\n \r\n {state.files.map((file, index) => (\r\n <div key={file.id}>\r\n <FileCard\r\n file={file}\r\n selectedPageIds={state.selection}\r\n onSingleSelectPage={handleSingleSelectPage}\r\n onTogglePageSelect={handleTogglePageSelect}\r\n onRangeSelectPage={handleRangeSelectPage}\r\n onSelectAllInFile={handleSelectAllInFile}\r\n onRemoveFile={handleRemoveFile}\r\n onRenameFile={handleRenameFile}\r\n onReorderPages={(fileId, newOrder) => \r\n dispatch({ type: 'REORDER_PAGES', payload: { fileId, newOrder } })\r\n }\r\n isDraggingPageRef={isDraggingPage}\r\n />\r\n \r\n <FileDropZone\r\n targetIndex={index + 1}\r\n onReorderFiles={handleReorderFiles}\r\n files={state.files}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n !disableFileUpload && (\r\n <div \r\n className=\"p-12 rounded-lg bg-card text-card-foreground cursor-pointer transition-all border-2 border-dashed border-border hover:border-primary/60 hover:bg-primary/10\"\r\n onClick={handleFileUpload}\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n >\r\n <div className=\"text-center\">\r\n <FolderOpen className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\r\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No files added</h3>\r\n <p className=\"text-gray-500 mb-4\">\r\n Upload PDF files and images to start building your document\r\n </p>\r\n <Button type=\"button\" variant=\"outline\">\r\n <Upload className=\"h-4 w-4 mr-2\" />\r\n Choose Files\r\n </Button>\r\n </div>\r\n </div>\r\n )\r\n )}\r\n\r\n {/* Delete confirmation dialog */}\r\n <AlertDialog open={showDeleteConfirm} onOpenChange={setShowDeleteConfirm}>\r\n <AlertDialogContent>\r\n <AlertDialogHeader>\r\n <AlertDialogTitle>Delete Pages</AlertDialogTitle>\r\n <AlertDialogDescription>\r\n Are you sure you want to delete {state.selection.length} selected page\r\n {state.selection.length !== 1 ? 's' : ''}? This action cannot be undone.\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n <AlertDialogFooter>\r\n <AlertDialogCancel>Cancel</AlertDialogCancel>\r\n <AlertDialogAction \r\n className=\"bg-destructive text-white hover:bg-destructive/90\"\r\n onClick={confirmDeletePages}\r\n >\r\n Delete\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n\r\n {/* Remove file confirmation dialog */}\r\n <AlertDialog open={showRemoveFileConfirm} onOpenChange={setShowRemoveFileConfirm}>\r\n <AlertDialogContent>\r\n <AlertDialogHeader>\r\n <AlertDialogTitle>Remove File</AlertDialogTitle>\r\n <AlertDialogDescription>\r\n Are you sure you want to remove \"{fileToRemove?.name}\" and all its {fileToRemove?.pageCount} page\r\n {fileToRemove?.pageCount !== 1 ? 's' : ''}? This action cannot be undone.\r\n </AlertDialogDescription>\r\n </AlertDialogHeader>\r\n <AlertDialogFooter>\r\n <AlertDialogCancel onClick={() => {\r\n setFileToRemove(null);\r\n setShowRemoveFileConfirm(false);\r\n }}>Cancel</AlertDialogCancel>\r\n <AlertDialogAction \r\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\r\n onClick={confirmRemoveFile}\r\n >\r\n Remove File\r\n </AlertDialogAction>\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n </div>\r\n </DndProvider>\r\n </TooltipProvider>\r\n );\r\n }\r\n);\r\n\r\nPageAssembler.displayName = 'PageAssembler';\r\n\r\n// Utility functions\r\nfunction generateId(): string {\r\n return `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n}\r\n\r\nfunction debounce<T extends (...args: never[]) => unknown>(\r\n func: T,\r\n wait: number\r\n): T {\r\n let timeout: NodeJS.Timeout | undefined;\r\n return ((...args: Parameters<T>) => {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => func(...args), wait);\r\n }) as T;\r\n}\r\n\r\nexport default PageAssembler;\r\n"]}