@signiphi/page-assembly 0.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +296 -0
- package/dist/index.d.mts +178 -0
- package/dist/index.d.ts +178 -0
- package/dist/index.js +1872 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1837 -0
- package/dist/index.mjs.map +1 -0
- package/dist/styles/index.css +1762 -0
- package/package.json +85 -0
- package/src/styles/index.css +109 -0
|
@@ -0,0 +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, { \n useState, \n useCallback, \n useEffect, \n useRef, \n forwardRef, \n useImperativeHandle, \n useReducer,\n useMemo\n} from 'react';\nimport { DndProvider, useDrag, useDrop } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { \n Upload, \n FileText, \n Image as ImageIcon, \n Trash2, \n MoreHorizontal,\n GripVertical,\n Check,\n X,\n FolderOpen\n} from 'lucide-react';\n\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Badge,\n Input,\n Label,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger\n} from '../lib/ui';\n\nimport { pdfToImages, imageToPdf } from '../utils/pdf-helpers';\nimport { cn } from '../lib/utils';\nimport type { PageInfo, FileInfo, PageAssemblerState, PageAssemblerProps, PageAssemblerHandle } from '../types';\n\n// Multi-select utilities\nconst isMultiSelectModifier = (event: React.MouseEvent): boolean => {\n return event.ctrlKey || event.metaKey;\n};\n\nconst isRangeSelectModifier = (event: React.MouseEvent): boolean => {\n return event.shiftKey;\n};\n\nconst handleContextMenu = (event: React.MouseEvent): void => {\n if (event.ctrlKey && /Mac|iPod|iPhone|iPad/.test(navigator.userAgent)) {\n event.preventDefault();\n }\n};\n\nconst getPageRange = (files: FileInfo[], startPageId: string, endPageId: string): string[] => {\n const allPages: { id: string; fileId: string }[] = [];\n files.forEach(file => {\n file.pages.forEach(page => {\n allPages.push({ id: page.id, fileId: file.id });\n });\n });\n\n const startIndex = allPages.findIndex(p => p.id === startPageId);\n const endIndex = allPages.findIndex(p => p.id === endPageId);\n\n if (startIndex === -1 || endIndex === -1) return [];\n\n const start = Math.min(startIndex, endIndex);\n const end = Math.max(startIndex, endIndex);\n\n return allPages.slice(start, end + 1).map(p => p.id);\n};\n\n// Action types for reducer\ntype AssemblerAction = \n | { type: 'ADD_FILE'; payload: FileInfo }\n | { type: 'REMOVE_FILE'; payload: string }\n | { type: 'UPDATE_FILE'; payload: { fileId: string; updates: Partial<FileInfo> } }\n | { type: 'REORDER_PAGES'; payload: { fileId: string; newOrder: PageInfo[] } }\n | { type: 'REORDER_FILES'; payload: { newOrder: FileInfo[] } }\n | { type: 'MOVE_PAGES'; payload: { pageIds: string[]; targetFileId: string } }\n | { type: 'DELETE_PAGES'; payload: string[] }\n | { type: 'SET_SELECTION'; payload: string[] }\n | { type: 'TOGGLE_PAGE_SELECTION'; payload: { pageId: string; files: FileInfo[] } }\n | { type: 'RANGE_SELECT_PAGES'; payload: { pageId: string; files: FileInfo[] } }\n | { type: 'SINGLE_SELECT_PAGE'; payload: string }\n | { type: 'CLEAR_SELECTION' }\n | { type: 'RENAME_FILE'; payload: { fileId: string; name: string } }\n | { type: 'RESET'; payload?: PageAssemblerState };\n\n// Reducer\nfunction assemblerReducer(state: PageAssemblerState, action: AssemblerAction): PageAssemblerState {\n switch (action.type) {\n case 'ADD_FILE': {\n const existingFileById = state.files.find(f => f.id === action.payload.id);\n if (existingFileById) return state;\n \n return {\n ...state,\n files: [...state.files, action.payload]\n };\n }\n \n case 'REMOVE_FILE':\n return {\n ...state,\n files: state.files.filter(f => f.id !== action.payload),\n selection: state.selection.filter(pageId => \n !state.files.find(f => f.id === action.payload)?.pages.some(p => p.id === pageId)\n )\n };\n \n case 'UPDATE_FILE':\n return {\n ...state,\n files: state.files.map(f => \n f.id === action.payload.fileId \n ? { ...f, ...action.payload.updates }\n : f\n )\n };\n \n case 'REORDER_PAGES':\n return {\n ...state,\n files: state.files.map(f =>\n f.id === action.payload.fileId\n ? { ...f, pages: action.payload.newOrder }\n : f\n )\n };\n \n case 'REORDER_FILES':\n return {\n ...state,\n files: action.payload.newOrder\n };\n \n case 'MOVE_PAGES': {\n const { pageIds, targetFileId } = action.payload;\n const existingPageIds = state.files.flatMap(f => f.pages.map(p => p.id));\n const pagesToActuallyMove = pageIds.filter(id => existingPageIds.includes(id));\n \n if (pagesToActuallyMove.length === 0) return state;\n \n const pagesToMove: PageInfo[] = [];\n \n for (const file of state.files) {\n for (const page of file.pages) {\n if (pagesToActuallyMove.includes(page.id)) {\n pagesToMove.push(page);\n }\n }\n }\n \n const updatedFiles = state.files.map(file => {\n if (file.id === targetFileId) {\n const existingPageIds = file.pages.map(p => p.id);\n const newPages = pagesToMove.filter(p => !existingPageIds.includes(p.id));\n \n return {\n ...file,\n pages: [...file.pages, ...newPages]\n };\n } else {\n return {\n ...file,\n pages: file.pages.filter(page => !pagesToActuallyMove.includes(page.id))\n };\n }\n });\n \n return {\n ...state,\n files: updatedFiles,\n selection: []\n };\n }\n \n case 'DELETE_PAGES': {\n const pageIdsToDelete = action.payload;\n const existingPageIds = state.files.flatMap(f => f.pages.map(p => p.id));\n const pagesToActuallyDelete = pageIdsToDelete.filter(id => existingPageIds.includes(id));\n \n if (pagesToActuallyDelete.length === 0) return state;\n \n const updatedFiles = state.files.map(file => {\n const remainingPages = file.pages.filter(page => !pagesToActuallyDelete.includes(page.id));\n return {\n ...file,\n pages: remainingPages\n };\n }).filter(file => file.pages.length > 0);\n \n return {\n ...state,\n files: updatedFiles,\n selection: state.selection.filter(id => !pagesToActuallyDelete.includes(id))\n };\n }\n \n case 'SET_SELECTION':\n return {\n ...state,\n selection: action.payload\n };\n \n case 'TOGGLE_PAGE_SELECTION': {\n const { pageId } = action.payload;\n const isSelected = state.selection.includes(pageId);\n \n if (isSelected) {\n return {\n ...state,\n selection: state.selection.filter(id => id !== pageId),\n lastSelectedPageId: pageId\n };\n } else {\n return {\n ...state,\n selection: [...state.selection, pageId],\n lastSelectedPageId: pageId\n };\n }\n }\n \n case 'RANGE_SELECT_PAGES': {\n const { pageId, files } = action.payload;\n \n if (!state.lastSelectedPageId) {\n return {\n ...state,\n selection: [pageId],\n lastSelectedPageId: pageId\n };\n }\n \n const rangePageIds = getPageRange(files, state.lastSelectedPageId, pageId);\n const newSelection = [...new Set([...state.selection, ...rangePageIds])];\n \n return {\n ...state,\n selection: newSelection,\n lastSelectedPageId: pageId\n };\n }\n \n case 'SINGLE_SELECT_PAGE': {\n return {\n ...state,\n selection: [action.payload],\n lastSelectedPageId: action.payload\n };\n }\n \n case 'CLEAR_SELECTION':\n return {\n ...state,\n selection: [],\n lastSelectedPageId: undefined\n };\n \n case 'RENAME_FILE':\n return {\n ...state,\n files: state.files.map(f =>\n f.id === action.payload.fileId\n ? { ...f, name: action.payload.name }\n : f\n )\n };\n \n case 'RESET':\n return action.payload || { files: [], selection: [], lastSelectedPageId: undefined };\n \n default:\n return state;\n }\n}\n\n// Drag and drop types\nconst DND_TYPES = {\n PAGE: 'page',\n FILE: 'file'\n} as const;\n\n// DraggablePageThumbnail Component\ninterface DraggablePageThumbnailProps {\n page: PageInfo;\n fileId: string;\n index: number;\n isSelected: boolean;\n onSingleSelect: (pageId: string) => void;\n onToggleSelect: (pageId: string) => void;\n onRangeSelect: (pageId: string) => void;\n movePageInFile: (dragIndex: number, hoverIndex: number) => void;\n isDraggingPageRef?: React.MutableRefObject<boolean>;\n}\n\nconst DraggablePageThumbnail: React.FC<DraggablePageThumbnailProps> = ({\n page,\n fileId,\n index,\n isSelected,\n onSingleSelect,\n onToggleSelect,\n onRangeSelect,\n movePageInFile,\n isDraggingPageRef\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const [{ isDragging }, drag] = useDrag({\n type: DND_TYPES.PAGE,\n item: () => {\n if (isDraggingPageRef?.current !== undefined) {\n isDraggingPageRef.current = true;\n }\n return { pageId: page.id, fileId, index };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n end: () => {\n if (isDraggingPageRef?.current !== undefined) {\n isDraggingPageRef.current = false;\n }\n }\n });\n\n const [{ handlerId }, drop] = useDrop<\n { pageId: string; fileId: string; index: number },\n void,\n { handlerId: string | symbol | null }\n >({\n accept: DND_TYPES.PAGE,\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n };\n },\n hover(item, monitor) {\n if (!ref.current) return;\n if (item.fileId !== fileId) return;\n\n const dragIndex = item.index;\n const hoverIndex = index;\n\n if (dragIndex === hoverIndex) return;\n\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset!.y - hoverBoundingRect.top;\n\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) return;\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) return;\n\n movePageInFile(dragIndex, hoverIndex);\n item.index = hoverIndex;\n },\n });\n\n useEffect(() => {\n drag(drop(ref));\n }, [drag, drop]);\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n handleContextMenu(e);\n \n if (isRangeSelectModifier(e)) {\n onRangeSelect(page.id);\n } else if (isMultiSelectModifier(e)) {\n onToggleSelect(page.id);\n } else {\n onSingleSelect(page.id);\n }\n };\n\n return (\n <div\n ref={ref}\n data-handler-id={handlerId}\n className={cn(\n \"relative group cursor-pointer border-2 rounded-lg overflow-hidden bg-white transition-all\",\n isDragging && \"opacity-50 scale-95\",\n isSelected ? \"border-primary shadow-md\" : \"border-gray-200 hover:border-gray-300\"\n )}\n onClick={handleClick}\n >\n <div className=\"absolute top-1 right-1 opacity-0 group-hover:opacity-100 transition-opacity bg-black/50 rounded p-1 z-10\">\n <GripVertical className=\"h-3 w-3 text-white\" />\n </div>\n \n <div\n className=\"absolute top-2 left-2 z-10\"\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => {\n const nativeEvent = e.nativeEvent;\n if (nativeEvent && 'shiftKey' in nativeEvent && nativeEvent.shiftKey) {\n onRangeSelect(page.id);\n } else if (nativeEvent && (('ctrlKey' in nativeEvent && nativeEvent.ctrlKey) || ('metaKey' in nativeEvent && nativeEvent.metaKey))) {\n onToggleSelect(page.id);\n } else {\n onSingleSelect(page.id);\n }\n }}\n onContextMenu={handleContextMenu}\n className=\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary focus:ring-2 bg-white/90 cursor-pointer\"\n />\n </div>\n \n <div className=\"aspect-[3/4] relative\">\n <img\n src={page.thumbUrl}\n alt={`Page ${index + 1}`}\n className=\"w-full h-full object-cover\"\n />\n \n <Badge\n variant=\"secondary\"\n className=\"absolute bottom-1 right-1 text-xs px-1 py-0\"\n >\n {index + 1}\n </Badge>\n </div>\n </div>\n );\n};\n\n// ReorderablePageGrid Component\ninterface ReorderablePageGridProps {\n file: FileInfo;\n selectedPageIds: string[];\n onSingleSelectPage: (pageId: string) => void;\n onTogglePageSelect: (pageId: string) => void;\n onRangeSelectPage: (pageId: string) => void;\n onReorderPages: (fileId: string, newOrder: PageInfo[]) => void;\n isDraggingPageRef?: React.MutableRefObject<boolean>;\n}\n\nconst ReorderablePageGrid: React.FC<ReorderablePageGridProps> = ({\n file,\n selectedPageIds,\n onSingleSelectPage,\n onTogglePageSelect,\n onRangeSelectPage,\n onReorderPages,\n isDraggingPageRef\n}) => {\n const movePageInFile = useCallback((dragIndex: number, hoverIndex: number) => {\n const newPages = [...file.pages];\n const draggedPage = newPages[dragIndex];\n \n newPages.splice(dragIndex, 1);\n newPages.splice(hoverIndex, 0, draggedPage);\n \n onReorderPages(file.id, newPages);\n }, [file.id, file.pages, onReorderPages]);\n\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4\">\n {file.pages.map((page, index) => (\n <DraggablePageThumbnail\n key={page.id}\n page={page}\n fileId={file.id}\n index={index}\n isSelected={selectedPageIds.includes(page.id)}\n onSingleSelect={onSingleSelectPage}\n onToggleSelect={onTogglePageSelect}\n onRangeSelect={onRangeSelectPage}\n movePageInFile={movePageInFile}\n isDraggingPageRef={isDraggingPageRef}\n />\n ))}\n </div>\n );\n};\n\n// File drop zone component\ninterface FileDropZoneProps {\n targetIndex: number;\n onReorderFiles: (newOrder: FileInfo[]) => void;\n files: FileInfo[];\n}\n\nconst FileDropZone: React.FC<FileDropZoneProps> = ({\n targetIndex,\n onReorderFiles,\n files\n}) => {\n const [{ isOver, canDrop }, drop] = useDrop<\n { fileId: string; file: FileInfo },\n void,\n { isOver: boolean; canDrop: boolean }\n >({\n accept: DND_TYPES.FILE,\n drop: (item) => {\n const currentIndex = files.findIndex(f => f.id === item.fileId);\n if (currentIndex === -1) return;\n \n let newIndex = targetIndex;\n if (currentIndex < targetIndex) {\n newIndex = targetIndex - 1;\n }\n \n if (currentIndex === newIndex) return;\n \n const newFiles = [...files];\n const [movedFile] = newFiles.splice(currentIndex, 1);\n newFiles.splice(newIndex, 0, movedFile);\n \n onReorderFiles(newFiles);\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n }),\n });\n\n const isActive = isOver && canDrop;\n\n return (\n <div\n ref={drop as unknown as React.Ref<HTMLDivElement>}\n className={cn(\n \"h-2 transition-all duration-200 mx-4\",\n isActive ? \"h-8 bg-primary/20 border-2 border-dashed border-primary rounded-lg\" : \"\"\n )}\n >\n {isActive && (\n <div className=\"flex items-center justify-center h-full text-primary text-sm font-medium\">\n Drop here to reorder\n </div>\n )}\n </div>\n );\n};\n\n// FileCard component\ninterface FileCardProps {\n file: FileInfo;\n selectedPageIds: string[];\n onSingleSelectPage: (pageId: string) => void;\n onTogglePageSelect: (pageId: string) => void;\n onRangeSelectPage: (pageId: string) => void;\n onSelectAllInFile: (fileId: string) => void;\n onRemoveFile: (fileId: string) => void;\n onRenameFile: (fileId: string, name: string) => void;\n onReorderPages: (fileId: string, newOrder: PageInfo[]) => void;\n isDraggingPageRef?: React.MutableRefObject<boolean>;\n}\n\nconst FileCard: React.FC<FileCardProps> = ({\n file,\n selectedPageIds,\n onSingleSelectPage,\n onTogglePageSelect,\n onRangeSelectPage,\n onSelectAllInFile,\n onRemoveFile,\n onRenameFile,\n onReorderPages,\n isDraggingPageRef\n}) => {\n const [isRenaming, setIsRenaming] = useState(false);\n const [newName, setNewName] = useState(file.name);\n const fileSelectedPages = file.pages.filter(p => selectedPageIds.includes(p.id));\n const allPagesSelected = file.pages.length > 0 && fileSelectedPages.length === file.pages.length;\n\n const [{ isDraggingFile }, dragFile] = useDrag({\n type: DND_TYPES.FILE,\n item: () => {\n if (isDraggingPageRef?.current !== undefined) {\n isDraggingPageRef.current = true;\n }\n return { fileId: file.id, file };\n },\n collect: (monitor) => ({\n isDraggingFile: monitor.isDragging(),\n }),\n end: () => {\n if (isDraggingPageRef?.current !== undefined) {\n isDraggingPageRef.current = false;\n }\n }\n });\n\n const [, drop] = useDrop<\n { pageId: string; fileId: string; index: number },\n void,\n object\n >({\n accept: DND_TYPES.PAGE,\n drop: (_item) => {\n // Moving between files handled in parent\n },\n });\n\n const handleRename = () => {\n if (newName.trim() && newName !== file.name) {\n onRenameFile(file.id, newName.trim());\n }\n setIsRenaming(false);\n };\n\n const combineRefs = useCallback((el: HTMLDivElement | null) => {\n drop(el);\n dragFile(el);\n }, [drop, dragFile]);\n\n return (\n <Card \n className={cn(\n \"mb-6 transition-all cursor-move\",\n isDraggingFile ? \"opacity-50 rotate-2 scale-105 shadow-2xl z-50\" : \"opacity-100\"\n )} \n ref={combineRefs}\n >\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {file.type === 'pdf' ? (\n <FileText className=\"h-5 w-5 text-red-500\" />\n ) : (\n <ImageIcon className=\"h-5 w-5 text-blue-500\" />\n )}\n \n {isRenaming ? (\n <div className=\"flex items-center gap-2\">\n <Input\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleRename();\n if (e.key === 'Escape') {\n setIsRenaming(false);\n setNewName(file.name);\n }\n }}\n className=\"h-8 text-sm\"\n autoFocus\n />\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={handleRename}>\n <Check className=\"h-3 w-3\" />\n </Button>\n <Button \n type=\"button\"\n size=\"sm\" \n variant=\"ghost\" \n onClick={() => {\n setIsRenaming(false);\n setNewName(file.name);\n }}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n </div>\n ) : (\n <div>\n <CardTitle className=\"text-base\">{file.name}</CardTitle>\n <p className=\"text-sm text-muted-foreground\">\n {file.pages.length} page{file.pages.length !== 1 ? 's' : ''}\n </p>\n </div>\n )}\n </div>\n \n <div className=\"flex items-center gap-2\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onSelectAllInFile(file.id)}\n disabled={file.pages.length === 0}\n >\n {allPagesSelected && <Check className=\"h-3 w-3 mr-2\" />}\n Select All\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n Select all pages in this file\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n \n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"hover:bg-gray-100 rounded-lg\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-52\">\n <DropdownMenuItem onClick={() => setIsRenaming(true)}>\n <svg className=\"h-4 w-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\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\" />\n </svg>\n Rename File\n </DropdownMenuItem>\n <DropdownMenuItem \n onClick={() => onRemoveFile(file.id)}\n className=\"text-red-600 hover:text-red-700 hover:bg-red-50 focus:text-red-700 focus:bg-red-50\"\n >\n <Trash2 className=\"h-4 w-4 mr-2\" />\n Remove File\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n </CardHeader>\n \n <CardContent>\n <ReorderablePageGrid\n file={file}\n selectedPageIds={selectedPageIds}\n onSingleSelectPage={onSingleSelectPage}\n onTogglePageSelect={onTogglePageSelect}\n onRangeSelectPage={onRangeSelectPage}\n onReorderPages={onReorderPages}\n isDraggingPageRef={isDraggingPageRef}\n />\n </CardContent>\n </Card>\n );\n};\n\n// Bulk action bar\ninterface BulkActionBarProps {\n selectedCount: number;\n files: FileInfo[];\n onMovePages: (targetFileId: string) => void;\n onDeletePages: () => void;\n onClearSelection: () => void;\n}\n\nconst BulkActionBar: React.FC<BulkActionBarProps> = ({\n selectedCount,\n files,\n onMovePages,\n onDeletePages,\n onClearSelection\n}) => {\n if (selectedCount === 0) return null;\n\n return (\n <div className=\"sticky top-4 z-10 mb-4\">\n <Card className=\"p-4 shadow-lg border-primary/20 bg-blue-50\">\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div className=\"flex items-center gap-4 flex-wrap\">\n <span \n className=\"inline-flex items-center text-sm font-medium text-white rounded-full\"\n style={{ \n backgroundColor: '#0099cd',\n padding: '6px 14px',\n }}\n >\n {selectedCount} page{selectedCount !== 1 ? 's' : ''} selected\n </span>\n \n {files.length > 1 && (\n <div className=\"flex items-center gap-2\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Label htmlFor=\"move-select\" className=\"text-sm font-medium text-gray-700\">\n Move to file:\n </Label>\n </TooltipTrigger>\n <TooltipContent>\n <p>Move selected pages to another file</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <Select onValueChange={onMovePages}>\n <SelectTrigger id=\"move-select\" className=\"w-48 bg-white\">\n <SelectValue placeholder=\"Choose file...\" />\n </SelectTrigger>\n <SelectContent>\n {files.map((file) => (\n <SelectItem key={file.id} value={file.id}>\n <div className=\"flex items-center gap-2\">\n {file.type === 'pdf' ? (\n <FileText className=\"h-4 w-4\" />\n ) : (\n <ImageIcon className=\"h-4 w-4\" />\n )}\n <span className=\"truncate\">{file.name}</span>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n \n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={onDeletePages}\n >\n <Trash2 className=\"h-4 w-4 mr-2\" />\n Delete Selected\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onClearSelection}\n className=\"bg-white\"\n >\n Clear Selection\n </Button>\n </div>\n </div>\n </Card>\n </div>\n );\n};\n\n// Main PageAssembler component\nexport const PageAssembler = forwardRef<PageAssemblerHandle, PageAssemblerProps>(\n (props, ref) => {\n const { \n initialPdf, \n initialState, \n onChange, \n onValidityChange, \n limits, \n disableFileUpload = false,\n className \n } = props;\n \n const [state, dispatch] = useReducer(assemblerReducer, \n initialState || { \n files: [], \n selection: [], \n lastSelectedPageId: undefined\n });\n const [isLoading, setIsLoading] = useState(false);\n const [processingStatus, setProcessingStatus] = useState<string>('');\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [showRemoveFileConfirm, setShowRemoveFileConfirm] = useState(false);\n const [fileToRemove, setFileToRemove] = useState<{ id: string; name: string; pageCount: number } | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n \n const processedInitialPdfRef = useRef<string | null>(null);\n const isDraggingPage = useRef<boolean>(false);\n const onChangeRef = useRef(onChange);\n \n const summary = useMemo(() => ({\n totalFiles: state.files.length,\n totalPages: state.files.reduce((sum, file) => sum + file.pages.length, 0)\n }), [state.files]);\n \n const isValid = summary.totalPages > 0;\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const debouncedOnChange = useMemo(\n () => debounce((newState: PageAssemblerState) => {\n onChangeRef.current?.(newState);\n }, 200),\n []\n );\n\n useEffect(() => {\n debouncedOnChange(state);\n }, [state, debouncedOnChange]);\n\n useEffect(() => {\n onValidityChange?.(isValid);\n }, [isValid, onValidityChange]);\n\n // Process initial PDF\n const processInitialPdf = useCallback(async (pdf: File | Blob | ArrayBuffer | Uint8Array) => {\n setIsLoading(true);\n setProcessingStatus('Processing initial PDF...');\n \n try {\n let pdfBytes: Uint8Array;\n \n if (pdf instanceof Blob) {\n const arrayBuffer = await pdf.arrayBuffer();\n pdfBytes = new Uint8Array(arrayBuffer);\n } else if (pdf instanceof ArrayBuffer) {\n pdfBytes = new Uint8Array(pdf);\n } else {\n pdfBytes = new Uint8Array(pdf);\n }\n\n const defensiveCopy = new Uint8Array(pdfBytes);\n const pages = await pdfToImages(defensiveCopy, { hideFormFields: true });\n \n if (pages.length === 0) {\n throw new Error('Failed to process PDF pages');\n }\n\n let originalBytes: Uint8Array;\n let originalFile: File;\n \n try {\n new Uint8Array(pdfBytes.buffer || pdfBytes, 0, 1);\n originalBytes = new Uint8Array(pdfBytes);\n originalFile = new File([pdfBytes.buffer as ArrayBuffer], 'Initial Document.pdf', { type: 'application/pdf' });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (errorMessage.includes('detached') || errorMessage.includes('ArrayBuffer')) {\n throw new Error('Initial PDF data is no longer available. Please try refreshing the page.');\n }\n throw error;\n }\n\n const fileName = (pdf instanceof File) ? pdf.name : 'Initial Document.pdf';\n const fileId = generateId();\n \n const file: FileInfo = {\n id: fileId,\n name: fileName,\n type: 'pdf',\n originalFile,\n originalBytes,\n pages: pages.map((page, index) => ({\n id: generateId(),\n srcIndex: index,\n thumbUrl: page.imageUrl,\n width: page.width,\n height: page.height,\n mime: 'application/pdf',\n originalFileId: fileId\n }))\n };\n \n dispatch({ type: 'ADD_FILE', payload: file });\n } catch (error) {\n console.error('Error processing initial PDF:', error);\n } finally {\n setIsLoading(false);\n setProcessingStatus('');\n }\n }, []);\n\n // Initialize with initial PDF if provided\n useEffect(() => {\n if (initialPdf && !initialState) {\n const pdfIdentifier = initialPdf instanceof Uint8Array \n ? `uint8array-${initialPdf.length}-${initialPdf[0]}-${initialPdf[initialPdf.length-1]}` \n : `${initialPdf.constructor.name}-${(initialPdf as File | Blob).size || (initialPdf as ArrayBuffer).byteLength}`;\n \n if (processedInitialPdfRef.current === pdfIdentifier) {\n return;\n }\n \n processedInitialPdfRef.current = pdfIdentifier;\n processInitialPdf(initialPdf);\n }\n }, [initialPdf, initialState, processInitialPdf]);\n\n // Handle initialState changes\n useEffect(() => {\n if (initialState) {\n dispatch({ type: 'RESET', payload: initialState });\n }\n }, [initialState]);\n\n // File processing\n const processFiles = useCallback(async (files: FileList | File[]) => {\n const fileArray = Array.from(files);\n const maxFileSize = (limits?.maxFileSizeMB || 10) * 1024 * 1024;\n \n setIsLoading(true);\n setProcessingStatus(`Processing ${fileArray.length} file${fileArray.length !== 1 ? 's' : ''}...`);\n\n for (const file of fileArray) {\n try {\n if (file.size > maxFileSize) {\n console.error(`File ${file.name} is too large`);\n continue;\n }\n\n const validTypes = ['application/pdf', 'image/png', 'image/jpeg', 'image/jpg', 'image/webp'];\n if (!validTypes.includes(file.type)) {\n console.error(`Unsupported file type: ${file.name}`);\n continue;\n }\n\n const fileInfo: FileInfo = {\n id: generateId(),\n name: file.name,\n type: file.type === 'application/pdf' ? 'pdf' : 'image',\n originalFile: file,\n originalBytes: new Uint8Array(),\n pages: []\n };\n\n if (file.type === 'application/pdf') {\n setProcessingStatus(`Processing PDF: ${file.name}`);\n const arrayBuffer = await file.arrayBuffer();\n const pdfBytes = new Uint8Array(arrayBuffer);\n fileInfo.originalBytes = new Uint8Array(pdfBytes);\n \n const defensiveCopy = new Uint8Array(pdfBytes);\n const pages = await pdfToImages(defensiveCopy, { hideFormFields: true });\n fileInfo.pages = pages.map((page, index) => ({\n id: generateId(),\n srcIndex: index,\n thumbUrl: page.imageUrl,\n width: page.width,\n height: page.height,\n mime: file.type,\n originalFileId: fileInfo.id\n }));\n } else {\n setProcessingStatus(`Processing image: ${file.name}`);\n\n const arrayBuffer = await file.arrayBuffer();\n const imageBytes = new Uint8Array(arrayBuffer);\n fileInfo.originalBytes = new Uint8Array(imageBytes);\n\n const thumbUrl = URL.createObjectURL(file);\n\n const img = new Image();\n const dimensions = await new Promise<{ width: number; height: number }>((resolve) => {\n img.onload = () => resolve({ width: img.width, height: img.height });\n img.src = thumbUrl;\n });\n\n const maxWidth = 595;\n const maxHeight = 842;\n\n let pdfWidth = dimensions.width;\n let pdfHeight = dimensions.height;\n\n if (dimensions.width > maxWidth || dimensions.height > maxHeight) {\n const scaleX = maxWidth / dimensions.width;\n const scaleY = maxHeight / dimensions.height;\n const scale = Math.min(scaleX, scaleY);\n\n pdfWidth = dimensions.width * scale;\n pdfHeight = dimensions.height * scale;\n }\n\n fileInfo.pages = [{\n id: generateId(),\n srcIndex: 0,\n thumbUrl,\n width: Math.max(pdfWidth, 100),\n height: Math.max(pdfHeight, 100),\n mime: file.type,\n originalFileId: fileInfo.id\n }];\n }\n\n dispatch({ type: 'ADD_FILE', payload: fileInfo });\n } catch (error) {\n console.error(`Error processing file ${file.name}:`, error);\n }\n }\n\n setIsLoading(false);\n setProcessingStatus('');\n }, [limits]);\n\n // File upload handlers\n const handleFileUpload = useCallback(() => {\n fileInputRef.current?.click();\n }, []);\n\n const handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files) {\n processFiles(files);\n }\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }, [processFiles]);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n \n const files = e.dataTransfer.files;\n if (files && files.length > 0) {\n if (isDraggingPage.current) {\n return;\n }\n processFiles(files);\n }\n }, [processFiles]);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n }, []);\n\n // Selection handlers\n const handleSingleSelectPage = useCallback((pageId: string) => {\n dispatch({ type: 'SINGLE_SELECT_PAGE', payload: pageId });\n }, []);\n\n const handleTogglePageSelect = useCallback((pageId: string) => {\n dispatch({ type: 'TOGGLE_PAGE_SELECTION', payload: { pageId, files: state.files } });\n }, [state.files]);\n\n const handleRangeSelectPage = useCallback((pageId: string) => {\n dispatch({ type: 'RANGE_SELECT_PAGES', payload: { pageId, files: state.files } });\n }, [state.files]);\n\n const handleSelectAllInFile = useCallback((fileId: string) => {\n const file = state.files.find(f => f.id === fileId);\n if (!file) return;\n \n const filePageIds = file.pages.map(p => p.id);\n const allSelected = filePageIds.every(id => state.selection.includes(id));\n \n if (allSelected) {\n dispatch({ \n type: 'SET_SELECTION', \n payload: state.selection.filter(id => !filePageIds.includes(id)) \n });\n } else {\n const newSelection = [...new Set([...state.selection, ...filePageIds])];\n dispatch({ type: 'SET_SELECTION', payload: newSelection });\n }\n }, [state.files, state.selection]);\n\n // Bulk operations\n const handleMovePages = useCallback((targetFileId: string) => {\n if (state.selection.length === 0) return;\n \n dispatch({ type: 'MOVE_PAGES', payload: { pageIds: state.selection, targetFileId } });\n }, [state.selection]);\n\n const handleDeletePages = useCallback(() => {\n setShowDeleteConfirm(true);\n }, []);\n\n const confirmDeletePages = useCallback(() => {\n dispatch({ type: 'DELETE_PAGES', payload: state.selection });\n setShowDeleteConfirm(false);\n }, [state.selection]);\n\n const handleRemoveFile = useCallback((fileId: string) => {\n const file = state.files.find(f => f.id === fileId);\n if (!file) return;\n\n if (file.pages.length > 0) {\n setFileToRemove({\n id: file.id,\n name: file.name,\n pageCount: file.pages.length\n });\n setShowRemoveFileConfirm(true);\n } else {\n dispatch({ type: 'REMOVE_FILE', payload: fileId });\n }\n }, [state.files]);\n\n const confirmRemoveFile = useCallback(() => {\n if (fileToRemove) {\n dispatch({ type: 'REMOVE_FILE', payload: fileToRemove.id });\n setFileToRemove(null);\n }\n setShowRemoveFileConfirm(false);\n }, [fileToRemove]);\n\n const handleRenameFile = useCallback((fileId: string, name: string) => {\n dispatch({ type: 'RENAME_FILE', payload: { fileId, name } });\n }, []);\n \n const handleReorderFiles = useCallback((newOrder: FileInfo[]) => {\n dispatch({ type: 'REORDER_FILES', payload: { newOrder } });\n }, []);\n\n // Imperative API\n useImperativeHandle(ref, () => ({\n assemble: async () => {\n setIsLoading(true);\n setProcessingStatus('Assembling PDF...');\n \n try {\n const { PDFDocument } = await import('pdf-lib');\n const combinedDoc = await PDFDocument.create();\n \n const loadedPdfs = new Map<string, import('pdf-lib').PDFDocument>();\n const fileMap = new Map<string, FileInfo>();\n \n for (const file of state.files) {\n fileMap.set(file.id, file);\n if (file.type === 'pdf' && file.originalBytes) {\n try {\n const sourcePdf = await PDFDocument.load(file.originalBytes);\n loadedPdfs.set(file.id, sourcePdf);\n } catch (error) {\n console.error(`Error loading PDF for file ${file.id}:`, error);\n }\n }\n }\n \n for (const file of state.files) {\n if (file.pages.length === 0) continue;\n \n for (const page of file.pages) {\n const originalFileId = page.originalFileId || file.id;\n const sourceFile = fileMap.get(originalFileId);\n \n if (!sourceFile) {\n console.warn(`Source file not found for page ${page.id}`);\n continue;\n }\n \n if (sourceFile.type === 'pdf') {\n const sourcePdf = loadedPdfs.get(originalFileId);\n if (!sourcePdf) {\n console.warn(`Source PDF not loaded for page ${page.id}`);\n continue;\n }\n \n const sourcePageCount = sourcePdf.getPageCount();\n \n if (page.srcIndex >= 0 && page.srcIndex < sourcePageCount) {\n try {\n const copiedPages = await combinedDoc.copyPages(sourcePdf, [page.srcIndex]);\n copiedPages.forEach(copiedPage => combinedDoc.addPage(copiedPage));\n } catch (copyError) {\n console.error(`Error copying page ${page.srcIndex}:`, copyError);\n throw new Error(`Failed to copy page: ${copyError instanceof Error ? copyError.message : String(copyError)}`);\n }\n }\n } else if (sourceFile.type === 'image' && sourceFile.originalFile) {\n try {\n const imagePdfBytes = await imageToPdf(sourceFile.originalFile);\n const imagePdf = await PDFDocument.load(imagePdfBytes);\n const copiedPages = await combinedDoc.copyPages(imagePdf, [0]);\n copiedPages.forEach(copiedPage => combinedDoc.addPage(copiedPage));\n } catch (imageError) {\n console.error(`Error converting image page:`, imageError);\n throw new Error(`Failed to convert image: ${imageError instanceof Error ? imageError.message : String(imageError)}`);\n }\n }\n }\n }\n \n const pdfBytes = await combinedDoc.save();\n const blob = new Blob([pdfBytes.buffer as ArrayBuffer], { type: 'application/pdf' });\n \n return blob;\n } catch (error) {\n console.error('Error assembling PDF:', error);\n throw error;\n } finally {\n setIsLoading(false);\n setProcessingStatus('');\n }\n },\n \n getSummary: () => summary,\n \n isBusy: () => isLoading,\n \n getState: () => state,\n }), [state, summary, isLoading]);\n\n return (\n <TooltipProvider>\n <DndProvider backend={HTML5Backend}>\n <div className={cn(\"space-y-6 pb-6\", className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-lg font-medium\">Page Assembly</h3>\n <p className=\"text-sm text-muted-foreground\">\n Upload, arrange, and combine pages into a single PDF document\n </p>\n </div>\n \n <div className=\"flex items-center gap-4\">\n {summary.totalPages > 0 && (\n <span className=\"text-sm text-gray-500\">\n {summary.totalFiles} file{summary.totalFiles !== 1 ? 's' : ''}, {summary.totalPages} page{summary.totalPages !== 1 ? 's' : ''}\n </span>\n )}\n \n {!disableFileUpload && (\n <>\n <Button type=\"button\" onClick={handleFileUpload} disabled={isLoading}>\n <Upload className=\"h-4 w-4 mr-2\" />\n Add Files\n </Button>\n \n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept=\".pdf,image/*\"\n onChange={handleFileChange}\n className=\"hidden\"\n />\n </>\n )}\n </div>\n </div>\n\n {/* Loading indicator */}\n {isLoading && (\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-primary\"></div>\n <span className=\"text-sm\">{processingStatus}</span>\n </div>\n </Card>\n )}\n\n {/* Bulk actions */}\n <BulkActionBar\n selectedCount={state.selection.length}\n files={state.files}\n onMovePages={handleMovePages}\n onDeletePages={handleDeletePages}\n onClearSelection={() => dispatch({ type: 'CLEAR_SELECTION' })}\n />\n\n {/* Files */}\n {state.files.length > 0 ? (\n <div\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n >\n <FileDropZone\n targetIndex={0}\n onReorderFiles={handleReorderFiles}\n files={state.files}\n />\n \n {state.files.map((file, index) => (\n <div key={file.id}>\n <FileCard\n file={file}\n selectedPageIds={state.selection}\n onSingleSelectPage={handleSingleSelectPage}\n onTogglePageSelect={handleTogglePageSelect}\n onRangeSelectPage={handleRangeSelectPage}\n onSelectAllInFile={handleSelectAllInFile}\n onRemoveFile={handleRemoveFile}\n onRenameFile={handleRenameFile}\n onReorderPages={(fileId, newOrder) => \n dispatch({ type: 'REORDER_PAGES', payload: { fileId, newOrder } })\n }\n isDraggingPageRef={isDraggingPage}\n />\n \n <FileDropZone\n targetIndex={index + 1}\n onReorderFiles={handleReorderFiles}\n files={state.files}\n />\n </div>\n ))}\n </div>\n ) : (\n !disableFileUpload && (\n <Card \n className=\"p-12 border-dashed border-2 border-gray-300 hover:border-gray-400 transition-colors cursor-pointer\"\n onClick={handleFileUpload}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n >\n <div className=\"text-center\">\n <FolderOpen className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">No files added</h3>\n <p className=\"text-gray-500 mb-4\">\n Upload PDF files and images to start building your document\n </p>\n <Button type=\"button\" variant=\"outline\">\n <Upload className=\"h-4 w-4 mr-2\" />\n Choose Files\n </Button>\n </div>\n </Card>\n )\n )}\n\n {/* Delete confirmation dialog */}\n <AlertDialog open={showDeleteConfirm} onOpenChange={setShowDeleteConfirm}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete Pages</AlertDialogTitle>\n <AlertDialogDescription>\n Are you sure you want to delete {state.selection.length} selected page\n {state.selection.length !== 1 ? 's' : ''}? This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction \n className=\"bg-destructive text-white hover:bg-destructive/90\"\n onClick={confirmDeletePages}\n >\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n {/* Remove file confirmation dialog */}\n <AlertDialog open={showRemoveFileConfirm} onOpenChange={setShowRemoveFileConfirm}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remove File</AlertDialogTitle>\n <AlertDialogDescription>\n Are you sure you want to remove \"{fileToRemove?.name}\" and all its {fileToRemove?.pageCount} page\n {fileToRemove?.pageCount !== 1 ? 's' : ''}? This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={() => {\n setFileToRemove(null);\n setShowRemoveFileConfirm(false);\n }}>Cancel</AlertDialogCancel>\n <AlertDialogAction \n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={confirmRemoveFile}\n >\n Remove File\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </DndProvider>\n </TooltipProvider>\n );\n }\n);\n\nPageAssembler.displayName = 'PageAssembler';\n\n// Utility functions\nfunction generateId(): string {\n return `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\nfunction debounce<T extends (...args: never[]) => unknown>(\n func: T,\n wait: number\n): T {\n let timeout: NodeJS.Timeout | undefined;\n return ((...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n }) as T;\n}\n\nexport default PageAssembler;\n"]}
|