@maayan-albert/moab-sdk 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DrawingTool.d.ts.map +1 -1
- package/dist/components.js +341 -291
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +326 -276
- package/dist/components.mjs.map +1 -1
- package/dist/index.js +341 -290
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +326 -275
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -2
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","\"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}\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = ({\n width,\n height,\n className = \"\",\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 to full viewport\n useEffect(() => {\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 }, []);\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 return (\n <div style={{ display: \"contents\" }}>\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 </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.module.scss","../src/components/DrawingTool.tsx","../src/index.ts"],"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;;;AC9Cf,IAAM,GAAA,GAAM,27NAAA;AACZ,IAAM,aAAa,EAAC,SAAA,EAAU,uBAAA,EAAwB,kBAAA,EAAmB,kCAAiC,UAAA,EAAW,wBAAA,EAAyB,UAAA,EAAW,wBAAA,EAAqE,WAAA,EAAY,yBAAA,EAA0B,UAAA,EAAW,0BAAyB,eAAA,EAAgB,6BAAA,EAA8B,SAAA,EAAU,uBAAA,EAAwB,UAAS,sBAAA,EAAuB,iBAAA,EAAkB,+BAAA,EAAgC,eAAA,EAAgB,+BAA8B,eAAA,EAAgB,6BAAA,EAA8B,eAAA,EAAgB,6BAAA,EAA8B,WAAU,uBAAA,EAAwB,OAAA,EAAQ,qBAA2F,CAAA;AAGztB,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,EAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,cAAA,CAAe,6BAA6B,CAAA;AACjE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,KAAA,GAAQ,QAAA,CAAS,cAAc,OAAO,CAAA;AACtC,IAAA,KAAA,CAAM,EAAA,GAAK,6BAAA;AACX,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,EACjC;AACA,EAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACtB;AAEA,IAAO,0BAAA,GAAQ,UAAA;ACIf,IAAM,4BAAA,GAA+B,+BAAA;AAK9B,IAAM,cAA0C,MAAM;AAC3D,EAAA,MAAM,SAAA,GAAY,OAA0B,IAAI,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoB,OAAuB,IAAI,CAAA;AACrD,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,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,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,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAGpC,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAO9B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,CAAC,CAAA;AAClD,EAAA,MAAM,0BAAA,GAA6B,OAAO,KAAK,CAAA;AAE/C,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,iBAAiB,iBAAA,CAAkB,OAAA;AACzC,IAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,4BAA4B,CAAA;AAChE,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAChC,UAAA,IACE,OAAO,MAAA,EAAQ,CAAA,KAAM,YACrB,OAAO,MAAA,EAAQ,MAAM,QAAA,EACrB;AACA,YAAA,kBAAA,CAAmB,EAAE,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA;AAC/C,YAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,MAAM,IAAA,GAAO,eAAe,qBAAA,EAAsB;AAClD,MAAA,MAAM,OAAA,GAAU,EAAA;AAChB,MAAA,MAAM,MAAA,GAAS,OAAA;AACf,MAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AAAA,QAClB,OAAA;AAAA,QACA,MAAA,CAAO,WAAA,GAAc,IAAA,CAAK,MAAA,GAAS;AAAA,OACrC;AACA,MAAA,kBAAA,CAAmB,EAAE,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA;AAC3C,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB,CAAA;AACA,IAAA,eAAA,EAAgB;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,eAAA,EAAiB;AACtB,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA;AAAA,QACX,4BAAA;AAAA,QACA,IAAA,CAAK,UAAU,eAAe;AAAA,OAChC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAIpB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,aAAa,MAAM;AACvB,MAAA,aAAA,CAAc;AAAA,QACZ,OAAO,MAAA,CAAO,UAAA;AAAA,QACd,QAAQ,MAAA,CAAO;AAAA,OAChB,CAAA;AAAA,IACH,CAAA;AACA,IAAA,UAAA,EAAW;AACX,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,UAAU,CAAA;AAC5C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AAAA,EAC9D,CAAA,EAAG,EAAE,CAAA;AAGL,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,UAAA,EAAY;AACjB,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,YAAY,cAAc;AAAA,GAC7B;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,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,IAAI;AAEF,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,QAAA;AAAA,MAC7B;AAGA,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAGtD,MAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,QAAA,CAAS,IAAA,EAAM;AAAA,QACzC,OAAO,MAAA,CAAO,UAAA;AAAA,QACd,QAAQ,MAAA,CAAO,WAAA;AAAA,QACf,KAAA,EAAO;AAAA,UACL,WAAW,CAAA,WAAA,EAAc,MAAA,CAAO,OAAO,CAAA,KAAA,EAAQ,OAAO,OAAO,CAAA,GAAA;AAAA,SAC/D;AAAA,QACA,MAAA,EAAQ,CAAC,IAAA,KAAS;AAEhB,UAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,YAAA,IAAI,IAAA,CAAK,OAAA,GAAU,wBAAwB,CAAA,EAAG;AAC5C,cAAA,OAAO,KAAA;AAAA,YACT;AAAA,UACF;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,OACD,CAAA;AAGD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,EAAA;AAAA,MAC7B;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAO,CAAA;AACpC,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,IAAI;AACA,QAAA,MAAM,SAAA,CAAU,UAAU,KAAA,CAAM;AAAA,UAC9B,IAAI,aAAA,CAAc;AAAA,YAChB,WAAA,EAAa;AAAA,WACd;AAAA,SACF,CAAA;AAAA,MACH,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,GAAG,CAAA;AAEjD,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,QAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,QAAA,CAAA,CAAE,IAAA,GAAO,GAAA;AACT,QAAA,CAAA,CAAE,QAAA,GAAW,gBAAA;AACb,QAAA,CAAA,CAAE,KAAA,EAAM;AACR,QAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAAA,MACzB;AAAA,IACJ,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAEjD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,EAAA;AAAA,MAC7B;AAAA,IACF;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;AAE1B,EAAA,MAAM,sBAAA,GAAyB,WAAA;AAAA,IAC7B,CAAC,CAAA,KAAwC;AACzC,MAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC/C,QAAA;AAAA,MACF;AAEE,MAAA,MAAM,iBAAiB,iBAAA,CAAkB,OAAA;AACzC,MAAA,IAAI,CAAC,cAAA,EAAgB;AAEvB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAEhB,MAAA,MAAM,IAAA,GAAO,eAAe,qBAAA,EAAsB;AAClD,MAAA,MAAM,cAAA,GAAA,CAAkB,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA,IAAO,EAAA;AAC/C,MAAA,eAAA,CAAgB,cAAc,CAAA;AAC9B,MAAA,eAAA,CAAgB;AAAA,QAChB,GAAG,CAAA,CAAE,OAAA;AAAA,QACL,GAAG,CAAA,CAAE,OAAA;AAAA,QACH,QAAA,EAAU,eAAA,EAAiB,CAAA,IAAK,IAAA,CAAK,IAAA;AAAA,QACrC,QAAA,EAAU,eAAA,EAAiB,CAAA,IAAK,IAAA,CAAK,GAAA;AAAA,QACrC,cAAc,IAAA,CAAK,KAAA;AAAA,QACnB,eAAe,IAAA,CAAK;AAAA,OACvB,CAAA;AAAA,IACD,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,MAAM,cAAA,GAAiB,CAAA;AAEvB,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AACzC,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,GAAU,YAAA,CAAa,CAAA;AACxC,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,GAAU,YAAA,CAAa,CAAA;AACxC,MAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,SAAS,MAAM,CAAA;AAE5D,MAAA,IAAI,CAAC,iBAAA,IAAqB,QAAA,GAAW,cAAA,EAAgB;AACnD,QAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,MAC3B;AAEA,MAAA,IAAI,iBAAA,IAAqB,WAAW,cAAA,EAAgB;AAClD,QAAA,MAAM,OAAA,GAAU,EAAA;AAChB,QAAA,MAAM,IAAA,GACJ,MAAA,CAAO,UAAA,GAAa,YAAA,CAAa,YAAA,GAAe,OAAA;AAClD,QAAA,MAAM,IAAA,GACJ,MAAA,CAAO,WAAA,GAAc,YAAA,CAAa,aAAA,GAAgB,OAAA;AACpD,QAAA,MAAM,OAAO,IAAA,CAAK,GAAA;AAAA,UAChB,OAAA;AAAA,UACA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,YAAA,CAAa,WAAW,MAAM;AAAA,SAC/C;AACA,QAAA,MAAM,OAAO,IAAA,CAAK,GAAA;AAAA,UAChB,OAAA;AAAA,UACA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,YAAA,CAAa,WAAW,MAAM;AAAA,SAC/C;AACA,QAAA,kBAAA,CAAmB,EAAE,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AAAA,MACzC;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,0BAAA,CAA2B,OAAA,GAAU,IAAA;AACrC,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,0BAAA,CAA2B,OAAA,GAAU,KAAA;AAAA,QACvC,GAAG,EAAE,CAAA;AAAA,MACP;AACA,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACtD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAElD,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,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAEpC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,eAAA,EAAiB;AACtB,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,MAAM,iBAAiB,iBAAA,CAAkB,OAAA;AACzC,MAAA,MAAM,IAAA,GAAO,gBAAgB,qBAAA,EAAsB;AACnD,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,EAAA;AAC7B,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,EAAA;AAC/B,MAAA,MAAM,OAAA,GAAU,EAAA;AAChB,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,UAAA,GAAa,KAAA,GAAQ,OAAA;AACzC,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,WAAA,GAAc,MAAA,GAAS,OAAA;AAC3C,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,GAAA,CAAI,IAAA,EAAM,eAAA,CAAgB,CAAC,CAAC,CAAA;AAChE,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,GAAA,CAAI,IAAA,EAAM,eAAA,CAAgB,CAAC,CAAC,CAAA;AAEhE,MAAA,IAAI,IAAA,KAAS,eAAA,CAAgB,CAAA,IAAK,IAAA,KAAS,gBAAgB,CAAA,EAAG;AAC5D,QAAA,kBAAA,CAAmB,EAAE,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AAAA,MACzC;AAAA,IACF,CAAA;AAEA,IAAA,iBAAA,EAAkB;AAClB,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,iBAAiB,CAAA;AACnD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,iBAAiB,CAAA;AAAA,EACrE,CAAA,EAAG,CAAC,eAAA,EAAiB,MAAM,CAAC,CAAA;AAE5B,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxE,EAAA,MAAM,CAAC,UAAU,CAAA,GAAI,QAAA,CAAS,IAAI,CAAA;AAElC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,wBAAA,CAAyB,IAAI,CAAA;AAC7B,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,wBAAA,CAAyB,KAAK,GAAG,GAAG,CAAA;AACnE,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,uBACEC,IAAAA,CAAC,KAAA,CAAM,QAAA,EAAN,EAEC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAU,qBAAA;AAAA,QACV,WAAA,EAAa,YAAA;AAAA,QACb,WAAA,EAAa,IAAA;AAAA,QACb,SAAA,EAAW,WAAA;AAAA,QACX,YAAA,EAAc,WAAA;AAAA,QACd,YAAA,EAAc,YAAA;AAAA,QACd,WAAA,EAAa,IAAA;AAAA,QACb,UAAA,EAAY,WAAA;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,CAAA,EAAG,UAAA,CAAW,KAAK,CAAA,EAAA,CAAA;AAAA,UAC1B,MAAA,EAAQ,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA,EAAA,CAAA;AAAA,UAC5B,MAAA,EAAQ,UAAA,IAAc,CAAC,iBAAA,GAAoB,WAAA,GAAc,SAAA;AAAA,UACzD,aAAA,EAAe,UAAA,IAAc,CAAC,iBAAA,GAAoB,MAAA,GAAS,MAAA;AAAA,UAC3D,OAAA,EAAS,UAAA,IAAc,CAAC,iBAAA,GAAoB,CAAA,GAAI,CAAA;AAAA,UAChD,UAAA,EAAY;AAAA;AACd;AAAA,KACF;AAAA,oBAGAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,iBAAA;AAAA,QACL,WAAW,0BAAA,CAAO,OAAA;AAAA,QAClB,sBAAA,EAAoB,IAAA;AAAA,QACpB,OACE,eAAA,GACI;AAAA,UACE,MAAM,eAAA,CAAgB,CAAA;AAAA,UACtB,KAAK,eAAA,CAAgB,CAAA;AAAA,UACrB,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ,MAAA;AAAA,UACR,UAAA,EAAY,iBAAiB,SAAA,GAAY;AAAA,SAC3C,GACA,EAAE,UAAA,EAAY,QAAA,EAAS;AAAA,QAG7B,QAAA,kBAAAC,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,UAAA;AAAA,YACL,SAAA,EAAW,CAAA,EAAG,0BAAA,CAAO,gBAAgB,CAAA,CAAA,EAAI,SAAS,0BAAA,CAAO,QAAA,GAAW,0BAAA,CAAO,SAAS,CAAA,CAAA,EAAI,qBAAA,GAAwB,2BAAO,QAAA,GAAW,EAAE,CAAA,CAAA,EAAI,iBAAA,GAAoB,0BAAA,CAAO,QAAA,GAAW,EAAE,CAAA,CAAA,EAAI,CAAC,UAAA,GAAa,0BAAA,CAAO,KAAA,GAAQ,EAAE,CAAA,CAAA;AAAA,YACnN,OAAA,EACE,CAAC,MAAA,GACG,CAAC,CAAA,KAAM;AACL,cAAA,IAAI,2BAA2B,OAAA,EAAS;AACtC,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA;AAAA,cACF;AACA,cAAA,SAAA,CAAU,IAAI,CAAA;AAAA,YAChB,CAAA,GACA,MAAA;AAAA,YAEN,WAAA,EAAa,sBAAA;AAAA,YACb,IAAA,EAAM,CAAC,MAAA,GAAS,QAAA,GAAW,MAAA;AAAA,YAC3B,QAAA,EAAU,CAAC,MAAA,GAAS,CAAA,GAAI,EAAA;AAAA,YACxB,OACE,iBAAA,GACI;AAAA,cACE,MAAA,EAAQ,UAAA;AAAA,cACR,SAAA,EAAW,sBAAsB,YAAY,CAAA,IAAA;AAAA,aAC/C,GACA,MAAA;AAAA,YAIN,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,CAAA,EAAG,0BAAA,CAAO,aAAa,CAAA,CAAA,EAAI,CAAC,MAAA,GAAS,0BAAA,CAAO,OAAA,GAAU,0BAAA,CAAO,MAAM,CAAA,CAAA;AAAA,kBAE9E,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA,eACrC;AAAA,8BAGAC,IAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,GAAG,0BAAA,CAAO,eAAe,IAAI,MAAA,GAAS,0BAAA,CAAO,OAAA,GAAU,0BAAA,CAAO,MAAM,CAAA,CAAA;AAAA,kBAG/E,QAAA,EAAA;AAAA,oCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,0BAAA,CAAO,aAAA,EACrB,QAAA,EAAA;AAAA,sCAAAD,GAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,GAAG,0BAAA,CAAO,aAAa,IAAI,CAAC,UAAA,GAAa,0BAAA,CAAO,KAAA,GAAQ,EAAE,CAAA,CAAA;AAAA,0BACrE,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,aAAA,CAAc,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,0BAC/B,CAAA;AAAA,0BACA,aAAA,EAAa,UAAA;AAAA,0BACb,YAAA,EAAW,kBAAA;AAAA,0BACX,cAAA,EAAc,UAAA;AAAA,0BAEd,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA,uBACnC;AAAA,sCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,0BAAA,CAAO,eAAe,QAAA,EAAA,MAAA,EAAI;AAAA,qBAAA,EAC7C,CAAA;AAAA,oCAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,2BAAO,aAAA,EACrB,QAAA,EAAA;AAAA,sCAAAD,GAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,GAAG,0BAAA,CAAO,aAAa,IAAI,CAAC,UAAA,GAAa,0BAAA,CAAO,KAAA,GAAQ,EAAE,CAAA,CAAA;AAAA,0BACrE,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,cAAA,EAAe;AAAA,0BACjB,CAAA;AAAA,0BACA,YAAA,EAAW,iBAAA;AAAA,0BAEX,QAAA,kBAAAC,IAAAA;AAAA,4BAAC,KAAA;AAAA,4BAAA;AAAA,8BACC,KAAA,EAAM,4BAAA;AAAA,8BACN,KAAA,EAAM,IAAA;AAAA,8BACN,MAAA,EAAO,IAAA;AAAA,8BACP,OAAA,EAAQ,WAAA;AAAA,8BACR,IAAA,EAAK,MAAA;AAAA,8BACL,MAAA,EAAO,cAAA;AAAA,8BACP,WAAA,EAAY,GAAA;AAAA,8BACZ,aAAA,EAAc,OAAA;AAAA,8BACd,cAAA,EAAe,OAAA;AAAA,8BAEf,QAAA,EAAA;AAAA,gDAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oLAAA,EAAqL,CAAA;AAAA,gDAC7LA,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI;AAAA;AAAA;AAAA;AAChC;AAAA,uBACF;AAAA,sCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,0BAAA,CAAO,eAAe,QAAA,EAAA,iBAAA,EAAe;AAAA,qBAAA,EACxD,CAAA;AAAA,oCAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,2BAAO,aAAA,EACrB,QAAA,EAAA;AAAA,sCAAAD,GAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,GAAG,0BAAA,CAAO,aAAa,IAAI,CAAC,UAAA,GAAa,0BAAA,CAAO,KAAA,GAAQ,EAAE,CAAA,CAAA;AAAA,0BACrE,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,WAAA,EAAY;AAAA,0BACd,CAAA;AAAA,0BACA,UAAU,CAAC,UAAA;AAAA,0BACX,aAAA,EAAW,IAAA;AAAA,0BACX,YAAA,EAAW,OAAA;AAAA,0BAEX,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA,uBACpC;AAAA,sCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,0BAAA,CAAO,eAAe,QAAA,EAAA,OAAA,EAAK;AAAA,qBAAA,EAC9C,CAAA;AAAA,oCAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,0BAAA,CAAO,OAAO,CAAA,CAAA,EAAI,CAAC,UAAA,GAAa,0BAAA,CAAO,KAAA,GAAQ,EAAE,CAAA,CAAA,EAAI,CAAA;AAAA,oCAGxEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,2BAAO,aAAA,EACrB,QAAA,EAAA;AAAA,sCAAAD,GAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,GAAG,0BAAA,CAAO,aAAa,IAAI,CAAC,UAAA,GAAa,0BAAA,CAAO,KAAA,GAAQ,EAAE,CAAA,CAAA;AAAA,0BACrE,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,SAAA,CAAU,KAAK,CAAA;AACf,4BAAA,aAAA,CAAc,KAAK,CAAA;AAAA,0BACrB,CAAA;AAAA,0BACA,YAAA,EAAW,OAAA;AAAA,0BAEX,0BAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI,aAAa,GAAA,EAAK;AAAA;AAAA,uBACjC;AAAA,sCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,0BAAA,CAAO,eAAe,QAAA,EAAA,OAAA,EAAK;AAAA,qBAAA,EAC9C;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,IAAO,mBAAA,GAAQ;;;ACtjBR,IAAM,UAAN,MAAc;AAAA,EAGnB,WAAA,CAAY,OAAA,GAA0B,EAAC,EAAG;AAF1C,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AAGE,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAgB;AACd,IAAA,OAAO,sBAAA;AAAA,EACT;AACF;AAEA,IAAO,WAAA,GAAQ","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","\nconst css = \"@keyframes moab__toolbarEnter___kVde9 {\\n from {\\n opacity: 0;\\n transform: scale(0.5) rotate(90deg);\\n }\\n to {\\n opacity: 1;\\n transform: scale(1) rotate(0deg);\\n }\\n}\\n@keyframes moab__scaleIn___bOiIm {\\n from {\\n opacity: 0;\\n transform: scale(0.85);\\n }\\n to {\\n opacity: 1;\\n transform: scale(1);\\n }\\n}\\n@keyframes moab__scaleOut___wrtHU {\\n from {\\n opacity: 1;\\n transform: scale(1);\\n }\\n to {\\n opacity: 0;\\n transform: scale(0.85);\\n }\\n}\\n.moab__toolbar___GXd-P {\\n position: fixed;\\n bottom: 1.25rem;\\n right: 1.25rem;\\n z-index: 100000;\\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, sans-serif;\\n pointer-events: none;\\n transition: left 0s, top 0s, right 0s, bottom 0s;\\n}\\n\\n.moab__toolbarContainer___sQuuF {\\n user-select: none;\\n margin-left: auto;\\n align-self: flex-end;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: #1a1a1a;\\n color: #fff;\\n border: none;\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\\n pointer-events: auto;\\n cursor: grab;\\n transition: width 0.4s cubic-bezier(0.19, 1, 0.22, 1), transform 0.4s cubic-bezier(0.19, 1, 0.22, 1);\\n}\\n.moab__toolbarContainer___sQuuF.moab__dragging___c6CuY {\\n transition: width 0.4s cubic-bezier(0.19, 1, 0.22, 1);\\n cursor: grabbing;\\n}\\n.moab__toolbarContainer___sQuuF.moab__entrance___kTkKT {\\n animation: moab__toolbarEnter___kVde9 0.5s cubic-bezier(0.34, 1.2, 0.64, 1) forwards;\\n}\\n.moab__toolbarContainer___sQuuF.moab__collapsed___xYm1N {\\n width: 44px;\\n height: 44px;\\n border-radius: 22px;\\n padding: 0;\\n cursor: pointer;\\n}\\n.moab__toolbarContainer___sQuuF.moab__collapsed___xYm1N svg {\\n margin-top: -1px;\\n}\\n.moab__toolbarContainer___sQuuF.moab__collapsed___xYm1N:hover {\\n background: #2a2a2a;\\n}\\n.moab__toolbarContainer___sQuuF.moab__collapsed___xYm1N:active {\\n transform: scale(0.95);\\n}\\n.moab__toolbarContainer___sQuuF.moab__expanded___Gshmq {\\n width: calc-size(auto, size);\\n height: 44px;\\n border-radius: 1.5rem;\\n padding: 0.375rem;\\n}\\n@supports not (width: calc-size(auto, size)) {\\n .moab__toolbarContainer___sQuuF.moab__expanded___Gshmq {\\n width: auto;\\n }\\n}\\n\\n.moab__toggleContent___KfJ0y {\\n position: absolute;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n transition: opacity 0.1s cubic-bezier(0.19, 1, 0.22, 1);\\n}\\n.moab__toggleContent___KfJ0y.moab__visible___1M9br {\\n opacity: 1;\\n visibility: visible;\\n pointer-events: auto;\\n}\\n.moab__toggleContent___KfJ0y.moab__hidden___Zdoqy {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.moab__controlsContent___KGEHS {\\n display: flex;\\n align-items: center;\\n gap: 0.375rem;\\n transition: filter 0.8s cubic-bezier(0.19, 1, 0.22, 1), opacity 0.8s cubic-bezier(0.19, 1, 0.22, 1), transform 0.6s cubic-bezier(0.19, 1, 0.22, 1);\\n}\\n.moab__controlsContent___KGEHS.moab__visible___1M9br {\\n opacity: 1;\\n filter: blur(0px);\\n transform: scale(1);\\n visibility: visible;\\n pointer-events: auto;\\n}\\n.moab__controlsContent___KGEHS.moab__hidden___Zdoqy {\\n opacity: 0;\\n filter: blur(10px);\\n transform: scale(0.4);\\n pointer-events: none;\\n}\\n\\n.moab__buttonWrapper___ZDZWf {\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.moab__controlButton___AYQcE {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 36px;\\n height: 36px;\\n padding: 0;\\n margin: 0;\\n border: none;\\n background: transparent;\\n color: rgba(255, 255, 255, 0.5);\\n border-radius: 999px;\\n cursor: pointer;\\n transition: background 0.2s cubic-bezier(0.25, 1, 0.5, 1), color 0.2s cubic-bezier(0.25, 1, 0.5, 1), transform 0.15s cubic-bezier(0.25, 1, 0.5, 1);\\n}\\n.moab__controlButton___AYQcE:hover:not(:disabled) {\\n background: rgba(255, 255, 255, 0.1);\\n color: rgba(255, 255, 255, 0.9);\\n}\\n.moab__controlButton___AYQcE[data-active=true]:hover:not(:disabled) {\\n background: rgba(60, 130, 247, 0.35);\\n color: #3c82f7;\\n}\\n.moab__controlButton___AYQcE:active:not(:disabled) {\\n transform: scale(0.95);\\n}\\n.moab__controlButton___AYQcE:disabled {\\n opacity: 0.3;\\n cursor: not-allowed;\\n}\\n.moab__controlButton___AYQcE[data-active=true] {\\n color: #3c82f7;\\n background: rgba(60, 130, 247, 0.25);\\n}\\n.moab__controlButton___AYQcE[data-danger]:hover:not(:disabled) {\\n background: rgba(255, 59, 48, 0.15);\\n color: #ff3b30;\\n}\\n\\n.moab__buttonTooltip___ZUL58 {\\n position: absolute;\\n bottom: calc(100% + 0.5rem);\\n left: 50%;\\n transform: translateX(-50%);\\n padding: 0.375rem 0.625rem;\\n background: #383838;\\n color: rgba(255, 255, 255, 0.7);\\n font-size: 0.6875rem;\\n font-weight: 400;\\n line-height: 1.2;\\n border-radius: 0.5rem;\\n white-space: nowrap;\\n opacity: 0;\\n visibility: hidden;\\n pointer-events: none;\\n transition: opacity 0.15s ease, visibility 0.15s ease, transform 0.15s ease;\\n z-index: 100001;\\n box-shadow: 0px 1px 8px rgba(0, 0, 0, 0.28);\\n}\\n.moab__buttonTooltip___ZUL58::after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 100%;\\n left: 50%;\\n transform: translateX(-50%);\\n width: 0;\\n height: 0;\\n border-left: 4px solid transparent;\\n border-right: 4px solid transparent;\\n border-top: 4px solid #383838;\\n}\\n\\n.moab__buttonWrapper___ZDZWf:hover .moab__buttonTooltip___ZUL58 {\\n opacity: 1;\\n visibility: visible;\\n}\\n\\n.moab__divider___o4mDB {\\n width: 1px;\\n height: 24px;\\n background: rgba(255, 255, 255, 0.15);\\n margin: 0 0.125rem;\\n}\\n\\n.moab__light___s-xQ4.moab__toolbarContainer___sQuuF {\\n background: #fff;\\n color: rgba(0, 0, 0, 0.85);\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 4px 16px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04);\\n}\\n.moab__light___s-xQ4.moab__toolbarContainer___sQuuF.moab__collapsed___xYm1N:hover {\\n background: #f5f5f5;\\n}\\n.moab__light___s-xQ4.moab__controlButton___AYQcE {\\n color: rgba(0, 0, 0, 0.5);\\n}\\n.moab__light___s-xQ4.moab__controlButton___AYQcE:hover:not(:disabled) {\\n background: rgba(0, 0, 0, 0.06);\\n color: rgba(0, 0, 0, 0.85);\\n}\\n.moab__light___s-xQ4.moab__controlButton___AYQcE[data-active=true]:hover:not(:disabled) {\\n background: rgba(60, 130, 247, 0.25);\\n color: #3c82f7;\\n}\\n.moab__light___s-xQ4.moab__controlButton___AYQcE[data-active=true] {\\n color: #3c82f7;\\n background: rgba(60, 130, 247, 0.15);\\n}\\n.moab__light___s-xQ4.moab__controlButton___AYQcE[data-danger]:hover:not(:disabled) {\\n background: rgba(255, 59, 48, 0.15);\\n color: #ff3b30;\\n}\\n.moab__light___s-xQ4.moab__buttonTooltip___ZUL58 {\\n background: #fff;\\n color: rgba(0, 0, 0, 0.85);\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 4px 16px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04);\\n}\\n.moab__light___s-xQ4.moab__buttonTooltip___ZUL58::after {\\n background: #fff;\\n}\\n.moab__light___s-xQ4.moab__divider___o4mDB {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.moab-drawing-canvas {\\n position: fixed !important;\\n top: 0 !important;\\n left: 0 !important;\\n z-index: 50 !important;\\n touch-action: none !important;\\n}\";\nconst classNames = {\"toolbar\":\"moab__toolbar___GXd-P\",\"toolbarContainer\":\"moab__toolbarContainer___sQuuF\",\"dragging\":\"moab__dragging___c6CuY\",\"entrance\":\"moab__entrance___kTkKT\",\"toolbarEnter\":\"moab__toolbarEnter___kVde9\",\"collapsed\":\"moab__collapsed___xYm1N\",\"expanded\":\"moab__expanded___Gshmq\",\"toggleContent\":\"moab__toggleContent___KfJ0y\",\"visible\":\"moab__visible___1M9br\",\"hidden\":\"moab__hidden___Zdoqy\",\"controlsContent\":\"moab__controlsContent___KGEHS\",\"buttonWrapper\":\"moab__buttonWrapper___ZDZWf\",\"controlButton\":\"moab__controlButton___AYQcE\",\"buttonTooltip\":\"moab__buttonTooltip___ZUL58\",\"divider\":\"moab__divider___o4mDB\",\"light\":\"moab__light___s-xQ4\",\"scaleIn\":\"moab__scaleIn___bOiIm\",\"scaleOut\":\"moab__scaleOut___wrtHU\"};\n\n// SSR-safe style injection (same approach as agentation)\nif (typeof document !== 'undefined') {\n let style = document.getElementById('moab-components-DrawingTool');\n if (!style) {\n style = document.createElement('style');\n style.id = 'moab-components-DrawingTool';\n document.head.appendChild(style);\n }\n style.textContent = css;\n}\n\nexport default classNames;\n","\"use client\";\n\nimport React, {\n useRef,\n useEffect,\n useState,\n useCallback,\n useLayoutEffect,\n} from \"react\";\nimport { Brush, Palette, X, Trash2 } from \"lucide-react\";\nimport { toPng } from \"html-to-image\";\nimport styles from \"./DrawingTool.module.scss\";\n\nexport interface DrawingToolProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number;\n height?: number;\n className?: string;\n}\n\nconst TOOLBAR_POSITION_STORAGE_KEY = \"moab-drawing-toolbar-position\";\n\n/**\n * DrawingTool component - A canvas-based drawing tool\n */\nexport const DrawingTool: React.FC<DrawingToolProps> = () => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const toolbarWrapperRef = useRef<HTMLDivElement>(null);\n const [isDrawing, setIsDrawing] = useState(false);\n const brushColor = \"#3B82F6\"; // Blue color\n const brushSize = 5;\n const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 });\n const [isOpen, setIsOpen] = useState(false);\n const [isPainting, setIsPainting] = useState(false);\n const [hasContent, setHasContent] = useState(false);\n const [isDraggingToolbar, setIsDraggingToolbar] = useState(false);\n const [toolbarPosition, setToolbarPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [isToolbarReady, setIsToolbarReady] = useState(false);\n const [dragStartPos, setDragStartPos] = useState<{\n x: number;\n y: number;\n toolbarX: number;\n toolbarY: number;\n toolbarWidth: number;\n toolbarHeight: number;\n } | null>(null);\n const [dragRotation, setDragRotation] = useState(0);\n const justFinishedToolbarDragRef = useRef(false);\n\n useLayoutEffect(() => {\n const toolbarWrapper = toolbarWrapperRef.current;\n if (!toolbarWrapper) return;\n\n const restorePosition = () => {\n try {\n const stored = localStorage.getItem(TOOLBAR_POSITION_STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n if (\n typeof parsed?.x === \"number\" &&\n typeof parsed?.y === \"number\"\n ) {\n setToolbarPosition({ x: parsed.x, y: parsed.y });\n setIsToolbarReady(true);\n return;\n }\n }\n } catch {\n // Ignore invalid storage data.\n }\n\n const rect = toolbarWrapper.getBoundingClientRect();\n const padding = 20;\n const startX = padding;\n const startY = Math.max(\n padding,\n window.innerHeight - rect.height - padding\n );\n setToolbarPosition({ x: startX, y: startY });\n setIsToolbarReady(true);\n };\n restorePosition();\n }, []);\n\n useEffect(() => {\n if (!toolbarPosition) return;\n try {\n localStorage.setItem(\n TOOLBAR_POSITION_STORAGE_KEY,\n JSON.stringify(toolbarPosition)\n );\n } catch {\n // Ignore storage write failures.\n }\n }, [toolbarPosition]);\n\n\n // Set canvas size to full viewport\n useEffect(() => {\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 }, []);\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 (!isPainting) 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 [isPainting, 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 using html-to-image (handles modern CSS better than html2canvas)\n const takeScreenshot = useCallback(async () => {\n const toolbar = toolbarRef.current;\n try {\n // Hide the toolbar temporarily for the screenshot\n if (toolbar) {\n toolbar.style.visibility = \"hidden\";\n }\n\n // Small delay to ensure toolbar is hidden\n await new Promise((resolve) => setTimeout(resolve, 50));\n\n // Capture the visible viewport only\n const dataUrl = await toPng(document.body, {\n width: window.innerWidth,\n height: window.innerHeight,\n style: {\n transform: `translate(-${window.scrollX}px, -${window.scrollY}px)`,\n },\n filter: (node) => {\n // Skip the toolbar\n if (node instanceof HTMLElement) {\n if (node.closest?.(\"[data-drawing-toolbar]\")) {\n return false;\n }\n }\n return true;\n },\n });\n\n // Restore toolbar visibility\n if (toolbar) {\n toolbar.style.visibility = \"\";\n }\n\n // Convert data URL to blob\n const response = await fetch(dataUrl);\n const blob = await response.blob();\n\n try {\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 } catch (error) {\n console.error(\"Failed to take screenshot:\", error);\n // Restore toolbar visibility on error\n if (toolbar) {\n toolbar.style.visibility = \"\";\n }\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 const handleToolbarMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n\n const toolbarWrapper = toolbarWrapperRef.current;\n if (!toolbarWrapper) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n const rect = toolbarWrapper.getBoundingClientRect();\n const randomRotation = (Math.random() - 0.5) * 10;\n setDragRotation(randomRotation);\n setDragStartPos({\n x: e.clientX,\n y: e.clientY,\n toolbarX: toolbarPosition?.x ?? rect.left,\n toolbarY: toolbarPosition?.y ?? rect.top,\n toolbarWidth: rect.width,\n toolbarHeight: rect.height,\n });\n },\n [toolbarPosition]\n );\n\n useEffect(() => {\n if (!dragStartPos) return;\n const DRAG_THRESHOLD = 5;\n\n const handleMouseMove = (e: MouseEvent) => {\n const deltaX = e.clientX - dragStartPos.x;\n const deltaY = e.clientY - dragStartPos.y;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n if (!isDraggingToolbar && distance > DRAG_THRESHOLD) {\n setIsDraggingToolbar(true);\n }\n\n if (isDraggingToolbar || distance > DRAG_THRESHOLD) {\n const padding = 20;\n const maxX =\n window.innerWidth - dragStartPos.toolbarWidth - padding;\n const maxY =\n window.innerHeight - dragStartPos.toolbarHeight - padding;\n const newX = Math.max(\n padding,\n Math.min(maxX, dragStartPos.toolbarX + deltaX)\n );\n const newY = Math.max(\n padding,\n Math.min(maxY, dragStartPos.toolbarY + deltaY)\n );\n setToolbarPosition({ x: newX, y: newY });\n }\n };\n\n const handleMouseUp = () => {\n if (isDraggingToolbar) {\n justFinishedToolbarDragRef.current = true;\n setTimeout(() => {\n justFinishedToolbarDragRef.current = false;\n }, 50);\n }\n setIsDraggingToolbar(false);\n setDragStartPos(null);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [dragStartPos, isDraggingToolbar]);\n\n useEffect(() => {\n if (!toolbarPosition) return;\n const constrainPosition = () => {\n const toolbarWrapper = toolbarWrapperRef.current;\n const rect = toolbarWrapper?.getBoundingClientRect();\n const width = rect?.width ?? 44;\n const height = rect?.height ?? 44;\n const padding = 20;\n const maxX = window.innerWidth - width - padding;\n const maxY = window.innerHeight - height - padding;\n const newX = Math.max(padding, Math.min(maxX, toolbarPosition.x));\n const newY = Math.max(padding, Math.min(maxY, toolbarPosition.y));\n\n if (newX !== toolbarPosition.x || newY !== toolbarPosition.y) {\n setToolbarPosition({ x: newX, y: newY });\n }\n };\n\n constrainPosition();\n window.addEventListener(\"resize\", constrainPosition);\n return () => window.removeEventListener(\"resize\", constrainPosition);\n }, [toolbarPosition, isOpen]);\n\n const [showEntranceAnimation, setShowEntranceAnimation] = useState(false);\n const [isDarkMode] = useState(true); // Can add toggle later\n\n useEffect(() => {\n setShowEntranceAnimation(true);\n const timer = setTimeout(() => setShowEntranceAnimation(false), 500);\n return () => clearTimeout(timer);\n }, []);\n\n useEffect(() => {\n if (!isPainting) {\n setIsDrawing(false);\n }\n }, [isPainting]);\n\n return (\n <React.Fragment>\n {/* Canvas overlay covering entire screen */}\n <canvas\n ref={canvasRef}\n className=\"moab-drawing-canvas\"\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n style={{\n width: `${canvasSize.width}px`,\n height: `${canvasSize.height}px`,\n cursor: isPainting && !isDraggingToolbar ? \"crosshair\" : \"default\",\n pointerEvents: isPainting && !isDraggingToolbar ? \"auto\" : \"none\",\n opacity: isPainting && !isDraggingToolbar ? 1 : 0,\n transition: \"opacity 300ms ease-in-out\",\n }}\n />\n\n {/* Toolbar - using agentation's exact structure */}\n <div\n ref={toolbarWrapperRef}\n className={styles.toolbar}\n data-drawing-toolbar\n style={\n toolbarPosition\n ? {\n left: toolbarPosition.x,\n top: toolbarPosition.y,\n right: \"auto\",\n bottom: \"auto\",\n visibility: isToolbarReady ? \"visible\" : \"hidden\",\n }\n : { visibility: \"hidden\" }\n }\n >\n <div\n ref={toolbarRef}\n className={`${styles.toolbarContainer} ${isOpen ? styles.expanded : styles.collapsed} ${showEntranceAnimation ? styles.entrance : \"\"} ${isDraggingToolbar ? styles.dragging : \"\"} ${!isDarkMode ? styles.light : \"\"}`}\n onClick={\n !isOpen\n ? (e) => {\n if (justFinishedToolbarDragRef.current) {\n e.preventDefault();\n return;\n }\n setIsOpen(true);\n }\n : undefined\n }\n onMouseDown={handleToolbarMouseDown}\n role={!isOpen ? \"button\" : undefined}\n tabIndex={!isOpen ? 0 : -1}\n style={\n isDraggingToolbar\n ? {\n cursor: \"grabbing\",\n transform: `scale(1.05) rotate(${dragRotation}deg)`,\n }\n : undefined\n }\n >\n {/* Toggle content - visible when collapsed */}\n <div\n className={`${styles.toggleContent} ${!isOpen ? styles.visible : styles.hidden}`}\n >\n <Palette size={20} strokeWidth={2} />\n </div>\n\n {/* Controls content - visible when expanded */}\n <div\n className={`${styles.controlsContent} ${isOpen ? styles.visible : styles.hidden}`}\n >\n {/* Paint toggle button */}\n <div className={styles.buttonWrapper}>\n <button\n className={`${styles.controlButton} ${!isDarkMode ? styles.light : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n setIsPainting((prev) => !prev);\n }}\n data-active={isPainting}\n aria-label=\"Toggle draw mode\"\n aria-pressed={isPainting}\n >\n <Brush size={18} strokeWidth={2} />\n </button>\n <span className={styles.buttonTooltip}>Draw</span>\n </div>\n\n {/* Screenshot button */}\n <div className={styles.buttonWrapper}>\n <button\n className={`${styles.controlButton} ${!isDarkMode ? styles.light : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n takeScreenshot();\n }}\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 >\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 <span className={styles.buttonTooltip}>Take screenshot</span>\n </div>\n\n {/* Delete button */}\n <div className={styles.buttonWrapper}>\n <button\n className={`${styles.controlButton} ${!isDarkMode ? styles.light : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n clearCanvas();\n }}\n disabled={!hasContent}\n data-danger\n aria-label=\"Clear\"\n >\n <Trash2 size={18} strokeWidth={2} />\n </button>\n <span className={styles.buttonTooltip}>Clear</span>\n </div>\n\n <div className={`${styles.divider} ${!isDarkMode ? styles.light : \"\"}`} />\n\n {/* Close button */}\n <div className={styles.buttonWrapper}>\n <button\n className={`${styles.controlButton} ${!isDarkMode ? styles.light : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n setIsOpen(false);\n setIsPainting(false);\n }}\n aria-label=\"Close\"\n >\n <X size={18} strokeWidth={2.5} />\n </button>\n <span className={styles.buttonTooltip}>Close</span>\n </div>\n </div>\n </div>\n </div>\n </React.Fragment>\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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maayan-albert/moab-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Moab SDK - A JavaScript/TypeScript SDK",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
"demo:preview": "vite preview --config demo/vite.config.ts",
|
|
30
30
|
"type-check": "tsc --noEmit",
|
|
31
31
|
"build": "tsup && tsc --emitDeclarationOnly --declaration --outDir dist",
|
|
32
|
+
"build:watch": "tsup --watch && tsc --emitDeclarationOnly --declaration --outDir dist --watch",
|
|
33
|
+
"link": "pnpm link --global",
|
|
32
34
|
"test": "echo 'Test script - add your tests here'",
|
|
33
35
|
"prepublishOnly": "pnpm run build"
|
|
34
36
|
},
|
|
@@ -54,8 +56,11 @@
|
|
|
54
56
|
"@types/react-dom": "^18.2.0",
|
|
55
57
|
"@vitejs/plugin-react": "^4.2.1",
|
|
56
58
|
"esbuild": "^0.19.0",
|
|
59
|
+
"postcss": "^8.5.6",
|
|
60
|
+
"postcss-modules": "^6.0.1",
|
|
57
61
|
"react": "^18.2.0",
|
|
58
62
|
"react-dom": "^18.2.0",
|
|
63
|
+
"sass": "^1.97.2",
|
|
59
64
|
"tsup": "^8.0.0",
|
|
60
65
|
"tsx": "^4.7.0",
|
|
61
66
|
"typescript": "^5.3.0",
|
|
@@ -66,7 +71,7 @@
|
|
|
66
71
|
"react-dom": "^18.0.0"
|
|
67
72
|
},
|
|
68
73
|
"dependencies": {
|
|
69
|
-
"
|
|
74
|
+
"html-to-image": "^1.11.13",
|
|
70
75
|
"lucide-react": "^0.563.0"
|
|
71
76
|
}
|
|
72
77
|
}
|