@maayan-albert/moab-sdk 1.0.2 → 1.0.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawingTool.d.ts","sourceRoot":"","sources":["../../src/components/DrawingTool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DrawingTool.d.ts","sourceRoot":"","sources":["../../src/components/DrawingTool.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAIxE,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAmoBlD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx"],"names":["jsx","jsxs","useRef","useState","useEffect","useCallback","html2canvas","Fragment","Trash2","X"],"mappings":"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","file":"components.js","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","import React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx"],"names":["jsx","jsxs","useRef","useState","useEffect","useCallback","html2canvas","Fragment","Trash2","X"],"mappings":"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","file":"components.js","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","\"use client\";\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n"]}
|
package/dist/components.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx"],"names":["jsx","jsxs"],"mappings":";;;;;;AAkBO,IAAM,SAAgC,CAAC;AAAA,EAC5C,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,QAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,UAAA,GACJ,gGAAA;AAEF,EAAA,MAAM,aAAA,GAA+C;AAAA,IACnD,OAAA,EAAS,8DAAA;AAAA,IACT,SAAA,EAAW,8DAAA;AAAA,IACX,OAAA,EACE;AAAA,GACJ;AAEA,EAAA,MAAM,UAAA,GAAyC;AAAA,IAC7C,KAAA,EAAO,qBAAA;AAAA,IACP,MAAA,EAAQ,qBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,MAAM,cAAA,GAAiB,WACnB,+BAAA,GACA,gBAAA;AAEJ,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,cAAc,OAAO,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA,EAAI,cAAc,IAAI,SAAS,CAAA,CAAA;AAAA,MACrG,QAAA;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEA,IAAO,cAAA,GAAQ;AChDR,IAAM,OAA4B,CAAC;AAAA,EACxC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,4DAA4D,SAAS,CAAA,CAAA;AAAA,MAC/E,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4CAA4C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAEjE;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,IAAO,YAAA,GAAQ;ACdR,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,WAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,8CAAA,EACd,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,MACA,4BAAYD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACpD,CAAA;AAAA,oBAEFA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA,EAAW,mIAAmI,SAAS,CAAA,CAAA;AAAA,QACtJ,GAAG;AAAA;AAAA;AACN,GAAA,EACF,CAAA;AAEJ;AAEA,IAAO,aAAA,GAAQ;ACjCR,IAAM,cAA0C,CAAC;AAAA,EACtD,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,OAAA,GAAU,IAAA;AAAA,EACV,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GAAY,OAA0B,IAAI,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,SAAA;AACnB,EAAA,MAAM,SAAA,GAAY,CAAA;AAClB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA,CAAS,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,CAAA;AACpE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAE1B,cAAc,CAAA;AAChB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AACzD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,KAAK,CAAA;AAG9D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,aAAa,MAAM;AACvB,QAAA,aAAA,CAAc;AAAA,UACZ,OAAO,MAAA,CAAO,UAAA;AAAA,UACd,QAAQ,MAAA,CAAO;AAAA,SAChB,CAAA;AAAA,MACH,CAAA;AACA,MAAA,UAAA,EAAW;AACX,MAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,UAAU,CAAA;AAC5C,MAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AAAA,IAC9D,CAAA,MAAO;AACL,MAAA,aAAA,CAAc;AAAA,QACZ,OAAO,KAAA,IAAS,GAAA;AAAA,QAChB,QAAQ,MAAA,IAAU;AAAA,OACnB,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,KAAA,EAAO,MAAM,CAAC,CAAA;AAG3B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,IAAU,UAAA,CAAW,UAAU,CAAA,IAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AAElE,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAClC,IAAA,IAAI,CAAC,GAAA,EAAK;AAGV,IAAA,MAAA,CAAO,QAAQ,UAAA,CAAW,KAAA;AAC1B,IAAA,MAAA,CAAO,SAAS,UAAA,CAAW,MAAA;AAG3B,IAAA,GAAA,CAAI,WAAA,GAAc,UAAA;AAClB,IAAA,GAAA,CAAI,SAAA,GAAY,SAAA;AAChB,IAAA,GAAA,CAAI,OAAA,GAAU,OAAA;AACd,IAAA,GAAA,CAAI,QAAA,GAAW,OAAA;AAGf,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,UAAA,EAAY,UAAA,EAAY,SAAS,CAAC,CAAA;AAGtC,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,CACE,CAAA,KAGG;AACH,MAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,MAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAE;AAEjC,MAAA,MAAM,IAAA,GAAO,OAAO,qBAAA,EAAsB;AAC1C,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,KAAA;AACnC,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA;AAEpC,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,OAAO;AAAA,UACL,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,GAAU,KAAK,IAAA,IAAQ,MAAA;AAAA,UACxC,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,GAAU,KAAK,GAAA,IAAO;AAAA,SACzC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAO;AAAA,UACL,CAAA,EAAA,CAAI,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,MAAA;AAAA,UAC7B,CAAA,EAAA,CAAI,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,GAAA,IAAO;AAAA,SAC9B;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAGA,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CACE,CAAA,KAGG;AACH,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,MAAA,MAAM,GAAA,GAAM,MAAA,EAAQ,UAAA,CAAW,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK;AAErB,MAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,eAAe,CAAC,CAAA;AACjC,MAAA,GAAA,CAAI,SAAA,EAAU;AACd,MAAA,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AACf,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,SAAS,cAAc;AAAA,GAC1B;AAGA,EAAA,MAAM,IAAA,GAAO,WAAA;AAAA,IACX,CACE,CAAA,KAGG;AACH,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,MAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,MAAA,MAAM,GAAA,GAAM,MAAA,EAAQ,UAAA,CAAW,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK;AAErB,MAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,eAAe,CAAC,CAAA;AACjC,MAAA,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AACf,MAAA,GAAA,CAAI,MAAA,EAAO;AACX,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,WAAW,cAAc;AAAA,GAC5B;AAGA,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,MAAM,GAAA,GAAM,MAAA,EAAQ,UAAA,CAAW,IAAI,CAAA;AACnC,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK;AAErB,IAAA,GAAA,CAAI,UAAU,CAAA,EAAG,CAAA,EAAG,MAAA,CAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AAC/C,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,cAAA,GAAiB,YAAY,YAAY;AAC7C,IAAA,IAAI;AAEF,MAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,MAAM,OAAA,GAAU,GAAA;AAAA,MAC1B;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,QAAA,CAAS,IAAA,EAAM;AAAA,QAC9C,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,KAAA;AAAA,QACT,aAAa,MAAA,CAAO,UAAA;AAAA,QACpB,cAAc,MAAA,CAAO;AAAA,OACtB,CAAA;AAGD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,MAAM,OAAA,GAAU,EAAA;AAAA,MAC1B;AAGA,MAAA,MAAA,CAAO,MAAA,CAAO,OAAO,IAAA,KAAS;AAC5B,QAAA,IAAI,CAAC,IAAA,EAAM;AAEX,QAAA,IAAI;AAEF,UAAA,MAAM,SAAA,CAAU,UAAU,KAAA,CAAM;AAAA,YAC9B,IAAI,aAAA,CAAc;AAAA,cAChB,WAAA,EAAa;AAAA,aACd;AAAA,WACF,CAAA;AAAA,QACH,SAAS,GAAA,EAAK;AACZ,UAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,GAAG,CAAA;AAEjD,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,UAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,UAAA,CAAA,CAAE,IAAA,GAAO,GAAA;AACT,UAAA,CAAA,CAAE,QAAA,GAAW,gBAAA;AACb,UAAA,CAAA,CAAE,KAAA,EAAM;AACR,UAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAAA,QACzB;AAAA,MACF,GAAG,WAAW,CAAA;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAAA,IACnD;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,MAAM,GAAA,GAAM,MAAA,EAAQ,UAAA,CAAW,IAAI,CAAA;AACnC,IAAA,IAAI,CAAC,GAAA,EAAK;AAEV,IAAA,GAAA,CAAI,WAAA,GAAc,UAAA;AAClB,IAAA,GAAA,CAAI,SAAA,GAAY,SAAA;AAAA,EAClB,CAAA,EAAG,CAAC,UAAA,EAAY,SAAS,CAAC,CAAA;AAG1B,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,MAAA,EAAgB,MAAA,EAAgB,QAAA,EAAkB,QAAA,KAAqB;AACtE,MAAA,MAAM,SAAS,QAAA,GAAW,MAAA;AAC1B,MAAA,MAAM,SAAS,QAAA,GAAW,MAAA;AAC1B,MAAA,MAAM,SAAA,GAAY,EAAA;AAGlB,MAAA,IAAI,IAAA,CAAK,IAAI,MAAM,CAAA,GAAI,aAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,SAAA,EAAW;AAChE,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,MAAM,gBAAgB,MAAA,CAAO,UAAA;AAC7B,MAAA,MAAM,iBAAiB,MAAA,CAAO,WAAA;AAG9B,MAAA,MAAM,UAAA,GAAa,QAAA,GAAW,aAAA,GAAgB,CAAA,GAAI,MAAA,GAAS,OAAA;AAC3D,MAAA,MAAM,QAAA,GAAW,QAAA,GAAW,cAAA,GAAiB,CAAA,GAAI,KAAA,GAAQ,QAAA;AAGzD,MAAA,IAAI,QAAA,KAAa,KAAA,IAAS,UAAA,KAAe,MAAA,EAAQ,OAAO,UAAA;AACxD,MAAA,IAAI,QAAA,KAAa,KAAA,IAAS,UAAA,KAAe,OAAA,EAAS,OAAO,WAAA;AACzD,MAAA,IAAI,QAAA,KAAa,QAAA,IAAY,UAAA,KAAe,MAAA,EAAQ,OAAO,aAAA;AAC3D,MAAA,IAAI,QAAA,KAAa,YAAY,UAAA,KAAe,OAAA;AAC1C,QAAA,OAAO,cAAA;AAET,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAC,GACH;AAGA,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,CAAC,CAAA,KAAwC;AAE3E,IAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,YAAA,CAAa;AAAA,MACX,GAAG,CAAA,CAAE,OAAA;AAAA,MACL,GAAG,CAAA,CAAE;AAAA,KACN,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,MAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAGlB,MAAA,MAAM,YAAA,GAAe,eAAA;AAAA,QACnB,SAAA,CAAU,CAAA;AAAA,QACV,SAAA,CAAU,CAAA;AAAA,QACV,CAAA,CAAE,OAAA;AAAA,QACF,CAAA,CAAE;AAAA,OACJ;AAGA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,SAAA,CAAU,YAAY,CAAA;AAAA,MACxB,CAAA,MAAO;AAEL,QAAA,MAAM,gBAAgB,MAAA,CAAO,UAAA;AAC7B,QAAA,MAAM,iBAAiB,MAAA,CAAO,WAAA;AAC9B,QAAA,MAAM,UAAA,GAAa,CAAA,CAAE,OAAA,GAAU,aAAA,GAAgB,IAAI,MAAA,GAAS,OAAA;AAC5D,QAAA,MAAM,QAAA,GAAW,CAAA,CAAE,OAAA,GAAU,cAAA,GAAiB,IAAI,KAAA,GAAQ,QAAA;AAE1D,QAAA,IAAI,QAAA,KAAa,KAAA,IAAS,UAAA,KAAe,MAAA,YAAkB,UAAU,CAAA;AAAA,aAAA,IAC5D,QAAA,KAAa,SAAS,UAAA,KAAe,OAAA;AAC5C,UAAA,SAAA,CAAU,WAAW,CAAA;AAAA,aAAA,IACd,QAAA,KAAa,YAAY,UAAA,KAAe,MAAA;AAC/C,UAAA,SAAA,CAAU,aAAa,CAAA;AAAA,uBACV,cAAc,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAkB;AACvC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,CAAA;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,eAAA,EAAiB;AAAA,QACtD,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA,QAAA,CAAS,iBAAiB,SAAA,EAAW,aAAA,EAAe,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,IACxE;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,eAAe,CAAA;AACzD,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA,IACvD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,SAAA,EAAW,eAAe,CAAC,CAAA;AAE3C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEC,KAAA,QAAA,EAAA,EAEE,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,SAAA;AAAA,UACL,WAAA,EAAa,YAAA;AAAA,UACb,WAAA,EAAa,IAAA;AAAA,UACb,SAAA,EAAW,WAAA;AAAA,UACX,YAAA,EAAc,WAAA;AAAA,UACd,YAAA,EAAc,YAAA;AAAA,UACd,WAAA,EAAa,IAAA;AAAA,UACb,UAAA,EAAY,WAAA;AAAA,UACZ,WAAW,CAAA,sDAAA,EACT,OAAA,IAAW,CAAC,UAAA,GACR,qDACA,+BACN,CAAA,CAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,CAAA,EAAG,UAAA,CAAW,KAAK,CAAA,EAAA,CAAA;AAAA,YAC1B,MAAA,EAAQ,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA,EAAA;AAAA;AAC9B;AAAA,OACF;AAAA,sBAGAC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,UAAA;AAAA,UACL,WAAW,CAAA,0FAAA,EACT,UAAA,GAAa,iBAAA,GAAoB,aACnC,IAAI,SAAS,CAAA,CAAA;AAAA,UACb,KAAA,EAAO;AAAA,YACL,GAAA,EAAK,UAAU,KAAA,GAAQ,KAAA;AAAA,YACvB,UAAA,EAAY,uBAAA;AAAA,YACZ,GAAI,WAAW,UAAA,GACX,EAAE,KAAK,MAAA,EAAQ,IAAA,EAAM,QAAQ,MAAA,EAAQ,MAAA,EAAQ,OAAO,MAAA,EAAO,GAC3D,WAAW,WAAA,GACX,EAAE,KAAK,MAAA,EAAQ,KAAA,EAAO,QAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAM,MAAA,EAAO,GAC3D,WAAW,aAAA,GACX,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,QAAQ,GAAA,EAAK,MAAA,EAAQ,OAAO,MAAA,EAAO,GAC3D,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAO,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,MAAA;AAAO,WACjE;AAAA,UACA,WAAA,EAAa,eAAA;AAAA,UACZ,GAAG,KAAA;AAAA,UACJ,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,UAGlC,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,+BAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,UAAU,OAAA,GAAU,KAAA;AAAA,kBAC9B,OAAA,EAAS,UAAU,CAAA,GAAI,CAAA;AAAA,kBACvB,UAAA,EACE;AAAA,iBACJ;AAAA,gBAEA,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,sBAAA,cAAA,EAAe;AAAA,oBACjB,CAAA;AAAA,oBACA,SAAA,EAAU,4GAAA;AAAA,oBACV,YAAA,EAAW,iBAAA;AAAA,oBAEX,QAAA,kBAAAC,IAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAM,4BAAA;AAAA,wBACN,KAAA,EAAM,IAAA;AAAA,wBACN,MAAA,EAAO,IAAA;AAAA,wBACP,OAAA,EAAQ,WAAA;AAAA,wBACR,IAAA,EAAK,MAAA;AAAA,wBACL,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY,GAAA;AAAA,wBACZ,aAAA,EAAc,OAAA;AAAA,wBACd,cAAA,EAAe,OAAA;AAAA,wBACf,SAAA,EAAU,sBAAA;AAAA,wBAEV,QAAA,EAAA;AAAA,0CAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oLAAA,EAAqL,CAAA;AAAA,0CAC7LA,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI;AAAA;AAAA;AAAA;AAChC;AAAA;AACF;AAAA,aACF;AAAA,4BAGAC,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,wCAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,UAAU,OAAA,GAAU,KAAA;AAAA,kBAC9B,OAAA,EAAS,UAAU,CAAA,GAAI,CAAA;AAAA,kBACvB,UAAA,EACE;AAAA,iBACJ;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAA,IAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,wBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,wBAAA,WAAA,EAAY;AACZ,wBAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,sBAC3B,CAAA;AAAA,sBACA,cAAc,MAAM;AAClB,wBAAA,IAAI,UAAA,EAAY;AACd,0BAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,wBAC1B;AAAA,sBACF,CAAA;AAAA,sBACA,YAAA,EAAc,MAAM,mBAAA,CAAoB,KAAK,CAAA;AAAA,sBAC7C,UAAU,CAAC,UAAA;AAAA,sBACX,SAAA,EAAU,+GAAA;AAAA,sBACV,YAAA,EAAW,cAAA;AAAA,sBAEX,QAAA,EAAA;AAAA,wCAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iIAAA,EAAkI,CAAA;AAAA,wCACjJA,GAAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACC,IAAA,EAAM,EAAA;AAAA,4BACN,WAAA,EAAa,CAAA;AAAA,4BACb,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,mBACF;AAAA,kBAGC,oBAAoB,UAAA,oBACnBC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gIAAA,EACb,QAAA,EAAA;AAAA,oCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,sCAC9CA,GAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,0BAC3B,CAAA;AAAA,0BACA,WAAA,EAAa,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,0BACtC,SAAA,EAAU,kEAAA;AAAA,0BACV,YAAA,EAAW,iBAAA;AAAA,0BAEX,0BAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA;AAC/B,qBAAA,EACF,CAAA;AAAA,oCAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EAAmC,CAAA,EACpD;AAAA,mBAAA,EACF;AAAA;AAAA;AAAA,aAEJ;AAAA,4BAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAEb,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,UAAA,CAAW,CAAC,OAAO,CAAA;AAAA,kBACrB,CAAA;AAAA,kBACA,SAAA,EAAU,yFAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,OAAA,EAAS,UAAU,CAAA,GAAI,CAAA;AAAA,oBACvB,aAAA,EAAe,UAAU,MAAA,GAAS,MAAA;AAAA,oBAClC,UAAA,EAAY;AAAA,mBACd;AAAA,kBACA,YAAA,EAAW,iBAAA;AAAA,kBAEX,QAAA,kBAAAC,IAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAM,4BAAA;AAAA,sBACN,KAAA,EAAM,IAAA;AAAA,sBACN,MAAA,EAAO,IAAA;AAAA,sBACP,OAAA,EAAQ,WAAA;AAAA,sBACR,IAAA,EAAK,MAAA;AAAA,sBACL,MAAA,EAAO,cAAA;AAAA,sBACP,WAAA,EAAY,GAAA;AAAA,sBACZ,aAAA,EAAc,OAAA;AAAA,sBACd,cAAA,EAAe,OAAA;AAAA,sBACf,SAAA,EAAU,qBAAA;AAAA,sBAEV,QAAA,EAAA;AAAA,wCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa,CAAA;AAAA,wCACrBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yEAAA,EAA0E,CAAA;AAAA,wCAClFA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+DAAA,EAAgE;AAAA;AAAA;AAAA;AAC1E;AAAA,eACF;AAAA,8BAGAA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,UAAA,CAAW,KAAK,CAAA;AAAA,kBAClB,CAAA;AAAA,kBACA,SAAA,EAAU,0GAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,OAAA,EAAS,UAAU,CAAA,GAAI,CAAA;AAAA,oBACvB,aAAA,EAAe,UAAU,MAAA,GAAS,MAAA;AAAA,oBAClC,UAAA,EAAY;AAAA,mBACd;AAAA,kBACA,YAAA,EAAW,OAAA;AAAA,kBAEX,0BAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,aAAa,GAAA,EAAK;AAAA;AAAA;AACjC,aAAA,EACF;AAAA;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,+FAA+F,SAAS,CAAA,CAAA;AAAA,MAClH,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,0FAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,GAAA,EAAK,UAAU,MAAA,GAAS;AAAA,aAC1B;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,MAAM,UAAA,CAAW,CAAC,OAAO,CAAA;AAAA,kBAClC,SAAA,EAAW,CAAA,wGAAA,EACT,OAAA,GACI,sEAAA,GACA,gEACN,CAAA,CAAA;AAAA,kBACA,YAAA,EAAY,UAAU,kBAAA,GAAqB,iBAAA;AAAA,kBAE1C,QAAA,EAAA,OAAA,mBACCA,GAAAA,CAAC,CAAA,EAAA,EAAE,MAAM,EAAA,EAAI,WAAA,EAAa,GAAA,EAAK,CAAA,mBAE/BC,IAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAM,4BAAA;AAAA,sBACN,KAAA,EAAM,IAAA;AAAA,sBACN,MAAA,EAAO,IAAA;AAAA,sBACP,OAAA,EAAQ,WAAA;AAAA,sBACR,IAAA,EAAK,MAAA;AAAA,sBACL,MAAA,EAAO,cAAA;AAAA,sBACP,WAAA,EAAY,GAAA;AAAA,sBACZ,aAAA,EAAc,OAAA;AAAA,sBACd,cAAA,EAAe,OAAA;AAAA,sBACf,SAAA,EAAU,qBAAA;AAAA,sBAEV,QAAA,EAAA;AAAA,wCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa,CAAA;AAAA,wCACrBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yEAAA,EAA0E,CAAA;AAAA,wCAClFA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+DAAA,EAAgE;AAAA;AAAA;AAAA;AAC1E;AAAA,eAEJ;AAAA,8BAGAA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,uEAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,KAAA,EAAO,UAAU,MAAA,GAAS,KAAA;AAAA,oBAC1B,QAAA,EAAU,UAAU,MAAA,GAAS,KAAA;AAAA,oBAC7B,OAAA,EAAS,UAAU,CAAA,GAAI;AAAA,mBACzB;AAAA,kBAEA,QAAA,kBAAAA,GAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,OAAA,EAAS,WAAA;AAAA,sBACT,UAAU,CAAC,UAAA;AAAA,sBACX,SAAA,EAAU,oUAAA;AAAA,sBACV,YAAA,EAAW,cAAA;AAAA,sBAEX,QAAA,kBAAAC,IAAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAM,4BAAA;AAAA,0BACN,KAAA,EAAM,IAAA;AAAA,0BACN,MAAA,EAAO,IAAA;AAAA,0BACP,OAAA,EAAQ,WAAA;AAAA,0BACR,IAAA,EAAK,MAAA;AAAA,0BACL,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe,OAAA;AAAA,0BACf,SAAA,EAAU,8BAAA;AAAA,0BAEV,QAAA,EAAA;AAAA,4CAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa,CAAA;AAAA,4CACrBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wHAAA,EAAyH,CAAA;AAAA,4CACjIA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+DAAA,EAAgE,CAAA;AAAA,4CACxEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY;AAAA;AAAA;AAAA;AACtB;AAAA;AACF;AAAA,eACF;AAAA,8BAGAA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,uEAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,KAAA,EAAO,UAAU,MAAA,GAAS,KAAA;AAAA,oBAC1B,QAAA,EAAU,UAAU,MAAA,GAAS,KAAA;AAAA,oBAC7B,OAAA,EAAS,UAAU,CAAA,GAAI;AAAA,mBACzB;AAAA,kBAEA,QAAA,kBAAAA,GAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,OAAA,EAAS,cAAA;AAAA,sBACT,SAAA,EAAU,gMAAA;AAAA,sBACV,YAAA,EAAW,iBAAA;AAAA,sBAEX,QAAA,kBAAAC,IAAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAM,4BAAA;AAAA,0BACN,KAAA,EAAM,IAAA;AAAA,0BACN,MAAA,EAAO,IAAA;AAAA,0BACP,OAAA,EAAQ,WAAA;AAAA,0BACR,IAAA,EAAK,MAAA;AAAA,0BACL,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe,OAAA;AAAA,0BACf,SAAA,EAAU,sBAAA;AAAA,0BAEV,QAAA,EAAA;AAAA,4CAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oLAAA,EAAqL,CAAA;AAAA,4CAC7LA,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI;AAAA;AAAA;AAAA;AAChC;AAAA;AACF;AAAA;AACF;AAAA;AAAA,SACF;AAAA,wBAGAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,SAAA;AAAA,YACL,WAAA,EAAa,YAAA;AAAA,YACb,WAAA,EAAa,IAAA;AAAA,YACb,SAAA,EAAW,WAAA;AAAA,YACX,YAAA,EAAc,WAAA;AAAA,YACd,YAAA,EAAc,YAAA;AAAA,YACd,WAAA,EAAa,IAAA;AAAA,YACb,UAAA,EAAY,WAAA;AAAA,YACZ,SAAA,EAAW,CAAA,6DAAA,EACT,OAAA,GACI,kDAAA,GACA,+BACN,CAAA,CAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,CAAA,EAAG,UAAA,CAAW,KAAK,CAAA,EAAA,CAAA;AAAA,cAC1B,MAAA,EAAQ,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA,EAAA,CAAA;AAAA,cAC5B,QAAA,EAAU;AAAA;AACZ;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AAEA,IAAO,mBAAA,GAAQ","file":"components.mjs","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","import React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"components.mjs","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","\"use client\";\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx","../src/index.ts"],"names":["jsx","jsxs","useRef","useState","useEffect","useCallback","html2canvas","Fragment","Trash2","X"],"mappings":"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","file":"index.js","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","import React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n","/**\n * Moab SDK\n * Main entry point for the SDK\n */\n\nexport interface MoabSDKOptions {\n [key: string]: any;\n}\n\nexport class MoabSDK {\n options: MoabSDKOptions;\n\n constructor(options: MoabSDKOptions = {}) {\n this.options = options;\n }\n\n /**\n * Example method - replace with your SDK functionality\n */\n hello(): string {\n return \"Hello from Moab SDK!\";\n }\n}\n\nexport default MoabSDK;\n\n// Export UI components (for React apps)\nexport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type ButtonSize,\n} from \"./components/Button\";\nexport { Card, type CardProps } from \"./components/Card\";\nexport { Input, type InputProps } from \"./components/Input\";\nexport { DrawingTool, type DrawingToolProps } from \"./components/DrawingTool\";\n\nexport { default as ButtonDefault } from \"./components/Button\";\nexport { default as CardDefault } from \"./components/Card\";\nexport { default as InputDefault } from \"./components/Input\";\nexport { default as DrawingToolDefault } from \"./components/DrawingTool\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx","../src/index.ts"],"names":["jsx","jsxs","useRef","useState","useEffect","useCallback","html2canvas","Fragment","Trash2","X"],"mappings":"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","file":"index.js","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","\"use client\";\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n","/**\n * Moab SDK\n * Main entry point for the SDK\n */\n\nexport interface MoabSDKOptions {\n [key: string]: any;\n}\n\nexport class MoabSDK {\n options: MoabSDKOptions;\n\n constructor(options: MoabSDKOptions = {}) {\n this.options = options;\n }\n\n /**\n * Example method - replace with your SDK functionality\n */\n hello(): string {\n return \"Hello from Moab SDK!\";\n }\n}\n\nexport default MoabSDK;\n\n// Export UI components (for React apps)\nexport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type ButtonSize,\n} from \"./components/Button\";\nexport { Card, type CardProps } from \"./components/Card\";\nexport { Input, type InputProps } from \"./components/Input\";\nexport { DrawingTool, type DrawingToolProps } from \"./components/DrawingTool\";\n\nexport { default as ButtonDefault } from \"./components/Button\";\nexport { default as CardDefault } from \"./components/Card\";\nexport { default as InputDefault } from \"./components/Input\";\nexport { default as DrawingToolDefault } from \"./components/DrawingTool\";\n"]}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx","../src/index.ts"],"names":["jsx","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","import React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n","/**\n * Moab SDK\n * Main entry point for the SDK\n */\n\nexport interface MoabSDKOptions {\n [key: string]: any;\n}\n\nexport class MoabSDK {\n options: MoabSDKOptions;\n\n constructor(options: MoabSDKOptions = {}) {\n this.options = options;\n }\n\n /**\n * Example method - replace with your SDK functionality\n */\n hello(): string {\n return \"Hello from Moab SDK!\";\n }\n}\n\nexport default MoabSDK;\n\n// Export UI components (for React apps)\nexport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type ButtonSize,\n} from \"./components/Button\";\nexport { Card, type CardProps } from \"./components/Card\";\nexport { Input, type InputProps } from \"./components/Input\";\nexport { DrawingTool, type DrawingToolProps } from \"./components/DrawingTool\";\n\nexport { default as ButtonDefault } from \"./components/Button\";\nexport { default as CardDefault } from \"./components/Card\";\nexport { default as InputDefault } from \"./components/Input\";\nexport { default as DrawingToolDefault } from \"./components/DrawingTool\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Input.tsx","../src/components/DrawingTool.tsx","../src/index.ts"],"names":["jsx","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}\n\n/**\n * Button component\n */\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = \"primary\",\n size = \"medium\",\n disabled = false,\n onClick,\n className = \"\",\n ...props\n}) => {\n const baseStyles =\n \"font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2\";\n\n const variantStyles: Record<ButtonVariant, string> = {\n primary: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\n secondary: \"bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500\",\n outline:\n \"border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500\",\n };\n\n const sizeStyles: Record<ButtonSize, string> = {\n small: \"px-3 py-1.5 text-sm\",\n medium: \"px-4 py-2 text-base\",\n large: \"px-6 py-3 text-lg\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n {children}\n </button>\n );\n};\n\nexport default Button;\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n className?: string;\n}\n\n/**\n * Card component\n */\nexport const Card: React.FC<CardProps> = ({\n children,\n title,\n className = \"\",\n ...props\n}) => {\n return (\n <div\n className={`bg-white rounded-lg shadow-md p-6 border border-gray-200 ${className}`}\n {...props}\n >\n {title && (\n <h3 className=\"text-xl font-semibold mb-4 text-gray-800\">{title}</h3>\n )}\n {children}\n </div>\n );\n};\n\nexport default Card;\n","import React from \"react\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n type?: string;\n placeholder?: string;\n value?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Input component\n */\nexport const Input: React.FC<InputProps> = ({\n label,\n type = \"text\",\n placeholder,\n value,\n onChange,\n required = false,\n className = \"\",\n ...props\n}) => {\n return (\n <div className=\"mb-4\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <input\n type={type}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n required={required}\n className={`w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent ${className}`}\n {...props}\n />\n </div>\n );\n};\n\nexport default Input;\n","\"use client\";\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { X, Trash2 } from \"lucide-react\";\nimport html2canvas from \"html2canvas\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n overlay?: boolean;\n}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\n overlay = true,\n ...props\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#EF4444\"; // Red color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [enabled, setEnabled] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [corner, setCorner] = useState<\n \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n >(\"bottom-right\");\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [showClearTooltip, setShowClearTooltip] = useState(false);\n\n // Set canvas size based on overlay mode\n useEffect(() => {\n if (overlay) {\n const updateSize = () => {\n setCanvasSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n updateSize();\n window.addEventListener(\"resize\", updateSize);\n return () => window.removeEventListener(\"resize\", updateSize);\n } else {\n setCanvasSize({\n width: width || 800,\n height: height || 600,\n });\n }\n }, [overlay, width, height]);\n\n // Initialize canvas\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || canvasSize.width === 0 || canvasSize.height === 0) return;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Set canvas size\n canvas.width = canvasSize.width;\n canvas.height = canvasSize.height;\n\n // Set default drawing styles\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n // Reset content state when canvas is resized/initialized\n setHasContent(false);\n }, [canvasSize, brushColor, brushSize]);\n\n // Get mouse/touch coordinates relative to canvas\n const getCoordinates = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n\n if (\"touches\" in e) {\n return {\n x: (e.touches[0].clientX - rect.left) * scaleX,\n y: (e.touches[0].clientY - rect.top) * scaleY,\n };\n } else {\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n },\n []\n );\n\n // Start drawing\n const startDrawing = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!enabled) return;\n e.preventDefault();\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.beginPath();\n ctx.moveTo(x, y);\n setIsDrawing(true);\n },\n [enabled, getCoordinates]\n );\n\n // Draw\n const draw = useCallback(\n (\n e:\n | React.MouseEvent<HTMLCanvasElement>\n | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing) return;\n e.preventDefault();\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n const { x, y } = getCoordinates(e);\n ctx.lineTo(x, y);\n ctx.stroke();\n setHasContent(true);\n },\n [isDrawing, getCoordinates]\n );\n\n // Stop drawing\n const stopDrawing = useCallback(() => {\n setIsDrawing(false);\n }, []);\n\n // Clear canvas\n const clearCanvas = useCallback(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!canvas || !ctx) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n setHasContent(false);\n }, []);\n\n // Take screenshot and copy to clipboard\n const takeScreenshot = useCallback(async () => {\n try {\n // Hide the toolbar temporarily for the screenshot\n const toolbar = toolbarRef.current;\n if (toolbar) {\n toolbar.style.opacity = \"0\";\n }\n\n // Capture the entire page\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n logging: false,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.opacity = \"\";\n }\n\n // Convert canvas to blob\n canvas.toBlob(async (blob) => {\n if (!blob) return;\n\n try {\n // Copy to clipboard using Clipboard API\n await navigator.clipboard.write([\n new ClipboardItem({\n \"image/png\": blob,\n }),\n ]);\n } catch (err) {\n console.error(\"Failed to copy to clipboard:\", err);\n // Fallback: download the image\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"screenshot.png\";\n a.click();\n URL.revokeObjectURL(url);\n }\n }, \"image/png\");\n } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n }\n }, []);\n\n // Update context when brush settings change\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext(\"2d\");\n if (!ctx) return;\n\n ctx.strokeStyle = brushColor;\n ctx.lineWidth = brushSize;\n }, [brushColor, brushSize]);\n\n // Determine which corner to snap to based on drag direction\n const getTargetCorner = useCallback(\n (startX: number, startY: number, currentX: number, currentY: number) => {\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const threshold = 50; // Minimum pixels to move before snapping\n\n // If movement is too small, don't change corner\n if (Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold) {\n return null;\n }\n\n // Get viewport dimensions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Calculate which quadrant of the screen the mouse is in\n const horizontal = currentX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = currentY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n // Combine to get corner\n if (vertical === \"top\" && horizontal === \"left\") return \"top-left\";\n if (vertical === \"top\" && horizontal === \"right\") return \"top-right\";\n if (vertical === \"bottom\" && horizontal === \"left\") return \"bottom-left\";\n if (vertical === \"bottom\" && horizontal === \"right\")\n return \"bottom-right\";\n\n return null;\n },\n []\n );\n\n // Handle toolbar dragging\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n // Don't start drag if clicking on a button\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n setDragStart({\n x: e.clientX,\n y: e.clientY,\n });\n }, []);\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Determine target corner based on current mouse position\n const targetCorner = getTargetCorner(\n dragStart.x,\n dragStart.y,\n e.clientX,\n e.clientY\n );\n\n // Update corner immediately if we have a target, or use current mouse position\n if (targetCorner) {\n setCorner(targetCorner);\n } else {\n // Even if below threshold, update based on current position\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const horizontal = e.clientX < viewportWidth / 2 ? \"left\" : \"right\";\n const vertical = e.clientY < viewportHeight / 2 ? \"top\" : \"bottom\";\n\n if (vertical === \"top\" && horizontal === \"left\") setCorner(\"top-left\");\n else if (vertical === \"top\" && horizontal === \"right\")\n setCorner(\"top-right\");\n else if (vertical === \"bottom\" && horizontal === \"left\")\n setCorner(\"bottom-left\");\n else setCorner(\"bottom-right\");\n }\n };\n\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n if (isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", handleMouseUp, { passive: false });\n }\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDragging, dragStart, getTargetCorner]);\n\n if (overlay) {\n return (\n <>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`fixed top-0 left-0 touch-none z-50 transition-opacity ${\n enabled && !isDragging\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n }}\n />\n\n {/* Floating toolbar in bottom right */}\n <div\n ref={toolbarRef}\n className={`fixed flex flex-row items-center px-2 py-1.5 bg-neutral-800 rounded-full shadow-lg z-[60] ${\n isDragging ? \"cursor-grabbing\" : \"cursor-grab\"\n } ${className}`}\n style={{\n gap: enabled ? \"8px\" : \"0px\",\n transition: \"gap 300ms ease-in-out\",\n ...(corner === \"top-left\"\n ? { top: \"16px\", left: \"16px\", bottom: \"auto\", right: \"auto\" }\n : corner === \"top-right\"\n ? { top: \"16px\", right: \"16px\", bottom: \"auto\", left: \"auto\" }\n : corner === \"bottom-left\"\n ? { bottom: \"16px\", left: \"16px\", top: \"auto\", right: \"auto\" }\n : { bottom: \"16px\", right: \"16px\", top: \"auto\", left: \"auto\" }),\n }}\n onMouseDown={handleMouseDown}\n {...props}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"overflow-hidden flex-shrink-0\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\n className=\"p-2 text-white hover:bg-neutral-600/30 rounded-full transition-colors focus:outline-none whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n\n {/* Delete button - only show when enabled and has content */}\n <div\n className=\"overflow-hidden flex-shrink-0 relative\"\n style={{\n maxWidth: enabled ? \"100px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n transition:\n \"max-width 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n setShowClearTooltip(false);\n }}\n onMouseEnter={() => {\n if (hasContent) {\n setShowClearTooltip(true);\n }\n }}\n onMouseLeave={() => setShowClearTooltip(false)}\n disabled={!hasContent}\n className=\"p-2 text-white rounded-full focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed relative group\"\n aria-label=\"Clear canvas\"\n >\n <div className=\"absolute inset-0 rounded-full bg-red-600/30 opacity-0 group-hover:opacity-100 transition-opacity disabled:group-hover:opacity-0\"></div>\n <Trash2\n size={18}\n strokeWidth={2}\n className=\"relative z-10 group-hover:text-red-600 transition-colors\"\n />\n </button>\n\n {/* Tooltip */}\n {showClearTooltip && hasContent && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-3 py-1.5 bg-neutral-800 rounded-full shadow-lg whitespace-nowrap z-[70]\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-white text-sm\">Clear all</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowClearTooltip(false);\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"text-white hover:text-neutral-300 transition-colors rounded-full\"\n aria-label=\"Dismiss tooltip\"\n >\n <X size={14} strokeWidth={2} />\n </button>\n </div>\n {/* Tooltip arrow */}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 -mt-1\">\n <div className=\"w-2 h-2 bg-neutral-800 rotate-45\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Toggle button container - brush and X in same position at far right */}\n <div className=\"relative flex-shrink-0\">\n {/* Brush button - fades out when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(!enabled);\n }}\n className=\"p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 0 : 1,\n pointerEvents: enabled ? \"none\" : \"auto\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Turn on drawing\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n </button>\n\n {/* X button - fades in when enabled */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setEnabled(false);\n }}\n className=\"absolute inset-0 p-1.5 text-white hover:bg-neutral-600/30 rounded-full transition-all focus:outline-none\"\n style={{\n opacity: enabled ? 1 : 0,\n pointerEvents: enabled ? \"auto\" : \"none\",\n transition: \"opacity 300ms ease-in-out\",\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n </div>\n </div>\n </>\n );\n }\n\n // Non-overlay mode (original behavior)\n return (\n <div\n className={`flex flex-col items-center gap-4 p-6 bg-white rounded-full shadow-lg border border-gray-200 ${className}`}\n {...props}\n >\n {/* Controls */}\n <div\n className=\"flex flex-row items-center w-full justify-center transition-all duration-300 ease-in-out\"\n style={{\n gap: enabled ? \"12px\" : \"0px\",\n }}\n >\n {/* Toggle button - shows X when on, brush when off */}\n <button\n onClick={() => setEnabled(!enabled)}\n className={`p-3 rounded-xl transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 ${\n enabled\n ? \"bg-emerald-500 text-white hover:bg-emerald-600 active:bg-emerald-700\"\n : \"bg-slate-500 text-white hover:bg-slate-600 active:bg-slate-700\"\n }`}\n aria-label={enabled ? \"Turn off drawing\" : \"Turn on drawing\"}\n >\n {enabled ? (\n <X size={20} strokeWidth={2.5} />\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush\"\n >\n <path d=\"m11 10 3 3\" />\n <path d=\"M6.5 21A3.5 3.5 0 1 0 3 17.5a2.62 2.62 0 0 1-.708 1.792A1 1 0 0 0 3 21z\" />\n <path d=\"M9.969 17.031 21.378 5.624a1 1 0 0 0-3.002-3.002L6.967 14.031\" />\n </svg>\n )}\n </button>\n\n {/* Clear button - only show when enabled and has content */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={clearCanvas}\n disabled={!hasContent}\n className=\"p-3 bg-red-500 text-white hover:text-red-200 rounded-xl hover:bg-red-600 active:bg-red-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-red-500 disabled:hover:shadow-md disabled:active:scale-100 whitespace-nowrap\"\n aria-label=\"Clear canvas\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-brush-cleaning\"\n >\n <path d=\"m16 22-1-4\" />\n <path d=\"M19 14a1 1 0 0 0 1-1v-1a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v1a1 1 0 0 0 1 1\" />\n <path d=\"M19 14H5l-1.973 6.767A1 1 0 0 0 4 22h16a1 1 0 0 0 .973-1.233z\" />\n <path d=\"m8 22 1-4\" />\n </svg>\n </button>\n </div>\n\n {/* Screenshot button - only show when enabled */}\n <div\n className=\"transition-all duration-300 ease-in-out overflow-hidden flex-shrink-0\"\n style={{\n width: enabled ? \"52px\" : \"0px\",\n minWidth: enabled ? \"52px\" : \"0px\",\n opacity: enabled ? 1 : 0,\n }}\n >\n <button\n onClick={takeScreenshot}\n className=\"p-3 bg-neutral-500 text-white rounded-xl hover:bg-neutral-600 active:bg-neutral-700 transition-all duration-200 focus:outline-none shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\"\n aria-label=\"Take screenshot\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-camera\"\n >\n <path d=\"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n className={`border border-gray-300 rounded touch-none transition-opacity ${\n enabled\n ? \"cursor-crosshair pointer-events-auto opacity-100\"\n : \"pointer-events-none opacity-0\"\n }`}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n maxWidth: \"100%\",\n }}\n />\n </div>\n );\n};\n\nexport default DrawingTool;\n","/**\n * Moab SDK\n * Main entry point for the SDK\n */\n\nexport interface MoabSDKOptions {\n [key: string]: any;\n}\n\nexport class MoabSDK {\n options: MoabSDKOptions;\n\n constructor(options: MoabSDKOptions = {}) {\n this.options = options;\n }\n\n /**\n * Example method - replace with your SDK functionality\n */\n hello(): string {\n return \"Hello from Moab SDK!\";\n }\n}\n\nexport default MoabSDK;\n\n// Export UI components (for React apps)\nexport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type ButtonSize,\n} from \"./components/Button\";\nexport { Card, type CardProps } from \"./components/Card\";\nexport { Input, type InputProps } from \"./components/Input\";\nexport { DrawingTool, type DrawingToolProps } from \"./components/DrawingTool\";\n\nexport { default as ButtonDefault } from \"./components/Button\";\nexport { default as CardDefault } from \"./components/Card\";\nexport { default as InputDefault } from \"./components/Input\";\nexport { default as DrawingToolDefault } from \"./components/DrawingTool\";\n"]}
|