@rafaelbarross/feedback-widget 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/FeedbackButton/index.tsx","../src/components/CaptureOverlay/index.tsx","../src/components/AnnotationCanvas/index.tsx","../src/components/FeedbackForm/index.tsx","../src/hooks/useJira.ts","../src/components/FeedbackWidget/index.tsx"],"names":["useState","useRef","useEffect","__spreadProps","__spreadValues","jsxs","jsx","useCallback","Fragment","ReactDOM"],"mappings":"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","file":"index.js","sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\nimport { FeedbackWidgetProps } from '../../types'\n\ntype SnapPosition = NonNullable<FeedbackWidgetProps['position']>\n\ninterface FeedbackButtonProps {\n position: SnapPosition\n label: string\n onClick: () => void\n}\n\nconst MARGIN = 20\n\nfunction snapStyles(pos: SnapPosition): React.CSSProperties {\n const m = MARGIN\n const map: Record<SnapPosition, React.CSSProperties> = {\n 'top-left': { top: m, left: m },\n 'top-center': { top: m, left: '50%', transform: 'translateX(-50%)' },\n 'top-right': { top: m, right: m },\n 'middle-left': { top: '50%', left: m, transform: 'translateY(-50%)' },\n 'middle-right': { top: '50%', right: m, transform: 'translateY(-50%)' },\n 'bottom-left': { bottom: m, left: m },\n 'bottom-center': { bottom: m, left: '50%', transform: 'translateX(-50%)' },\n 'bottom-right': { bottom: m, right: m },\n }\n return map[pos]\n}\n\nfunction resolveSnap(x: number, y: number): SnapPosition {\n const rx = x / window.innerWidth\n const ry = y / window.innerHeight\n const h = rx < 0.33 ? 'left' : rx > 0.67 ? 'right' : 'center'\n const v = ry < 0.25 ? 'top' : ry > 0.75 ? 'bottom' : 'middle'\n if (v === 'middle' && h === 'center') return rx < 0.5 ? 'middle-left' : 'middle-right'\n if (v === 'middle') return `middle-${h}` as SnapPosition\n return `${v}-${h}` as SnapPosition\n}\n\nexport function FeedbackButton({ position, label, onClick }: FeedbackButtonProps) {\n const [snap, setSnap] = useState<SnapPosition>(position)\n const [hovered, setHovered] = useState(false)\n const [dragging, setDragging] = useState(false)\n const [dragXY, setDragXY] = useState<{ x: number; y: number } | null>(null)\n\n const dragStart = useRef<{ mouseX: number; mouseY: number; btnX: number; btnY: number } | null>(null)\n const didDrag = useRef(false)\n const btnRef = useRef<HTMLButtonElement>(null)\n\n useEffect(() => {\n if (!dragging) return\n\n const onMove = (e: MouseEvent) => {\n if (!dragStart.current) return\n const dx = e.clientX - dragStart.current.mouseX\n const dy = e.clientY - dragStart.current.mouseY\n if (Math.abs(dx) > 4 || Math.abs(dy) > 4) didDrag.current = true\n setDragXY({ x: dragStart.current.btnX + dx, y: dragStart.current.btnY + dy })\n }\n\n const onUp = (e: MouseEvent) => {\n setDragging(false)\n if (didDrag.current) {\n setSnap(resolveSnap(e.clientX, e.clientY))\n setDragXY(null)\n } else {\n setDragXY(null)\n onClick()\n }\n didDrag.current = false\n dragStart.current = null\n }\n\n window.addEventListener('mousemove', onMove)\n window.addEventListener('mouseup', onUp)\n return () => {\n window.removeEventListener('mousemove', onMove)\n window.removeEventListener('mouseup', onUp)\n }\n }, [dragging, onClick])\n\n const onMouseDown = (e: React.MouseEvent) => {\n e.preventDefault()\n const rect = btnRef.current!.getBoundingClientRect()\n dragStart.current = { mouseX: e.clientX, mouseY: e.clientY, btnX: rect.left, btnY: rect.top }\n didDrag.current = false\n setDragging(true)\n }\n\n const baseStyle: React.CSSProperties = {\n position: 'fixed',\n zIndex: 999998,\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '10px 16px',\n background: hovered && !dragging ? '#4338CA' : '#4F46E5',\n color: '#fff',\n border: 'none',\n borderRadius: 9999,\n cursor: dragging ? 'grabbing' : 'grab',\n fontSize: 14,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontWeight: 600,\n boxShadow: dragging\n ? '0 8px 24px rgba(79,70,229,0.55)'\n : '0 4px 14px rgba(79,70,229,0.45)',\n userSelect: 'none',\n transition: dragging ? 'none' : 'background 0.15s, box-shadow 0.15s',\n }\n\n const positionStyle: React.CSSProperties = dragging && dragXY\n ? { left: dragXY.x, top: dragXY.y }\n : { ...snapStyles(snap), transition: dragging ? 'none' : 'all 0.2s cubic-bezier(.34,1.56,.64,1)' }\n\n return (\n <button\n ref={btnRef}\n onMouseDown={onMouseDown}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{ ...baseStyle, ...positionStyle }}\n aria-label={label}\n >\n <BugIcon />\n {label}\n </button>\n )\n}\n\nfunction BugIcon() {\n return (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M8 2l1.5 1.5M14.5 3.5L16 2M9 7.5C9 6.1 10.1 5 11.5 5h1C13.9 5 15 6.1 15 7.5M6.5 9H4a1 1 0 0 0-1 1v1a4 4 0 0 0 4 4M17.5 9H20a1 1 0 0 1 1 1v1a4 4 0 0 1-4 4M8 15a4 4 0 0 0 8 0V9a4 4 0 0 0-8 0v6zM9 19.5V22M15 19.5V22M3 15h2M19 15h2\"/>\n </svg>\n )\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { SelectionRect } from '../../types'\n\ninterface CaptureOverlayProps {\n fullPageCanvas: HTMLCanvasElement\n onCapture: (rect: SelectionRect) => void\n onCancel: () => void\n}\n\ninterface DragState {\n active: boolean\n startX: number\n startY: number\n endX: number\n endY: number\n}\n\nconst INIT_DRAG: DragState = { active: false, startX: 0, startY: 0, endX: 0, endY: 0 }\n\nexport function CaptureOverlay({ fullPageCanvas, onCapture, onCancel }: CaptureOverlayProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const drag = useRef<DragState>(INIT_DRAG)\n const imgRef = useRef<HTMLImageElement | null>(null)\n const [selecting, setSelecting] = useState(false)\n\n const draw = useCallback(() => {\n const canvas = canvasRef.current\n const img = imgRef.current\n if (!canvas || !img) return\n const ctx = canvas.getContext('2d')!\n const { startX, startY, endX, endY, active } = drag.current\n\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n // Screenshot background (dimmed)\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height)\n ctx.fillStyle = 'rgba(0,0,0,0.52)'\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n\n if (active) {\n const x = Math.min(startX, endX)\n const y = Math.min(startY, endY)\n const w = Math.abs(endX - startX)\n const h = Math.abs(endY - startY)\n\n // Punch through dim — show original screenshot in selection area\n ctx.clearRect(x, y, w, h)\n ctx.drawImage(img, x, y, w, h, x, y, w, h)\n\n // Border\n ctx.strokeStyle = '#4F46E5'\n ctx.lineWidth = 2\n ctx.strokeRect(x, y, w, h)\n\n // Size label\n if (w > 60 && h > 20) {\n ctx.fillStyle = 'rgba(79,70,229,0.9)'\n ctx.fillRect(x + 4, y + h - 20, 76, 18)\n ctx.fillStyle = '#fff'\n ctx.font = 'bold 11px system-ui, -apple-system, sans-serif'\n ctx.fillText(`${Math.round(w)} × ${Math.round(h)}`, x + 8, y + h - 6)\n }\n }\n }, [])\n\n useEffect(() => {\n const canvas = canvasRef.current\n if (!canvas) return\n canvas.width = window.innerWidth\n canvas.height = window.innerHeight\n\n const img = new Image()\n img.onload = () => {\n imgRef.current = img\n draw()\n }\n img.src = fullPageCanvas.toDataURL()\n }, [fullPageCanvas, draw])\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') onCancel() }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [onCancel])\n\n const onMouseDown = (e: React.MouseEvent) => {\n drag.current = { active: true, startX: e.clientX, startY: e.clientY, endX: e.clientX, endY: e.clientY }\n setSelecting(true)\n }\n\n const onMouseMove = (e: React.MouseEvent) => {\n if (!drag.current.active) return\n drag.current.endX = e.clientX\n drag.current.endY = e.clientY\n draw()\n }\n\n const onMouseUp = () => {\n if (!drag.current.active) return\n drag.current.active = false\n setSelecting(false)\n\n const { startX, startY, endX, endY } = drag.current\n const w = Math.abs(endX - startX)\n const h = Math.abs(endY - startY)\n\n if (w < 20 || h < 20) {\n drag.current = INIT_DRAG\n draw()\n return\n }\n\n onCapture({\n startX: Math.min(startX, endX),\n startY: Math.min(startY, endY),\n endX: Math.max(startX, endX),\n endY: Math.max(startY, endY),\n })\n }\n\n return (\n <>\n <canvas\n ref={canvasRef}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n style={{ position: 'fixed', top: 0, left: 0, zIndex: 999999, cursor: 'crosshair', display: 'block' }}\n />\n {/* Top bar */}\n <div\n style={{\n position: 'fixed', top: 16, left: '50%', transform: 'translateX(-50%)',\n zIndex: 1000000, display: 'flex', alignItems: 'center', gap: 8,\n background: 'rgba(15,15,15,0.88)', borderRadius: 8,\n padding: '6px 8px 6px 16px',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n <span style={{ color: '#fff', fontSize: 13, fontWeight: 500, whiteSpace: 'nowrap' }}>\n Click and drag to select &nbsp;·&nbsp; <span style={{ opacity: 0.6 }}>Esc to cancel</span>\n </span>\n <button\n onClick={() => onCapture({ startX: 0, startY: 0, endX: window.innerWidth, endY: window.innerHeight })}\n style={{\n background: '#4F46E5', color: '#fff', border: 'none', borderRadius: 6,\n padding: '5px 12px', cursor: 'pointer', fontSize: 12, fontWeight: 600,\n whiteSpace: 'nowrap', marginLeft: 4,\n }}\n >\n Full screen\n </button>\n <button\n onClick={onCancel}\n style={{\n background: 'rgba(255,255,255,0.1)', color: '#fff',\n border: '1px solid rgba(255,255,255,0.15)', borderRadius: 6,\n padding: '5px 12px', cursor: 'pointer', fontSize: 12,\n }}\n >\n Cancel\n </button>\n </div>\n </>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\ntype DrawTool = 'pen' | 'rect' | 'ellipse' | 'line' | 'arrow'\n\ninterface AnnotationCanvasProps {\n screenshotDataUrl: string\n onDone: (canvas: HTMLCanvasElement) => void\n onBack: () => void\n}\n\nconst COLORS = ['#EF4444', '#F97316', '#EAB308', '#22C55E', '#3B82F6', '#8B5CF6', '#000000', '#ffffff']\nconst SIZES = [2, 5, 10]\n\nconst TOOL_ICONS: Record<DrawTool, React.ReactNode> = {\n pen: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\"/>\n </svg>\n ),\n rect: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/>\n </svg>\n ),\n ellipse: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"6\"/>\n </svg>\n ),\n line: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"4\"/>\n </svg>\n ),\n arrow: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"5\" y1=\"19\" x2=\"19\" y2=\"5\"/>\n <polyline points=\"9 5 19 5 19 15\"/>\n </svg>\n ),\n}\n\nfunction applyStrokeStyle(ctx: CanvasRenderingContext2D, color: string, size: number) {\n ctx.strokeStyle = color\n ctx.fillStyle = color\n ctx.lineWidth = size\n ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n}\n\nfunction drawShape(ctx: CanvasRenderingContext2D, tool: DrawTool, x1: number, y1: number, x2: number, y2: number) {\n ctx.beginPath()\n if (tool === 'rect') {\n ctx.strokeRect(x1, y1, x2 - x1, y2 - y1)\n } else if (tool === 'ellipse') {\n const cx = (x1 + x2) / 2\n const cy = (y1 + y2) / 2\n ctx.ellipse(cx, cy, Math.abs(x2 - x1) / 2, Math.abs(y2 - y1) / 2, 0, 0, Math.PI * 2)\n ctx.stroke()\n } else if (tool === 'line') {\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.stroke()\n } else if (tool === 'arrow') {\n const angle = Math.atan2(y2 - y1, x2 - x1)\n const head = Math.max(12, ctx.lineWidth * 4)\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.stroke()\n ctx.beginPath()\n ctx.moveTo(x2, y2)\n ctx.lineTo(x2 - head * Math.cos(angle - Math.PI / 6), y2 - head * Math.sin(angle - Math.PI / 6))\n ctx.lineTo(x2 - head * Math.cos(angle + Math.PI / 6), y2 - head * Math.sin(angle + Math.PI / 6))\n ctx.closePath()\n ctx.fill()\n }\n}\n\nexport function AnnotationCanvas({ screenshotDataUrl, onDone, onBack }: AnnotationCanvasProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const isDrawing = useRef(false)\n const startPoint = useRef<{ x: number; y: number } | null>(null)\n const lastPoint = useRef<{ x: number; y: number } | null>(null)\n const baseSnapshot = useRef<ImageData | null>(null)\n\n const [tool, setTool] = useState<DrawTool>('pen')\n const [color, setColor] = useState('#EF4444')\n const [size, setSize] = useState(3)\n const [naturalSize, setNaturalSize] = useState({ w: 0, h: 0 })\n\n const toolRef = useRef(tool)\n const colorRef = useRef(color)\n const sizeRef = useRef(size)\n useEffect(() => { toolRef.current = tool }, [tool])\n useEffect(() => { colorRef.current = color }, [color])\n useEffect(() => { sizeRef.current = size }, [size])\n\n useEffect(() => {\n const img = new Image()\n img.onload = () => {\n const maxW = window.innerWidth * 0.88\n const maxH = window.innerHeight * 0.72\n const ratio = img.width / img.height\n let dw = img.width, dh = img.height\n if (dw > maxW) { dw = maxW; dh = dw / ratio }\n if (dh > maxH) { dh = maxH; dw = dh * ratio }\n\n setNaturalSize({ w: img.width, h: img.height })\n const canvas = canvasRef.current!\n canvas.width = img.width\n canvas.height = img.height\n canvas.style.width = `${Math.round(dw)}px`\n canvas.style.height = `${Math.round(dh)}px`\n const ctx = canvas.getContext('2d')!\n ctx.drawImage(img, 0, 0)\n baseSnapshot.current = ctx.getImageData(0, 0, canvas.width, canvas.height)\n }\n img.src = screenshotDataUrl\n }, [screenshotDataUrl])\n\n function getPoint(e: React.MouseEvent<HTMLCanvasElement>) {\n const canvas = canvasRef.current!\n const rect = canvas.getBoundingClientRect()\n return {\n x: (e.clientX - rect.left) * (naturalSize.w / rect.width),\n y: (e.clientY - rect.top) * (naturalSize.h / rect.height),\n }\n }\n\n function onMouseDown(e: React.MouseEvent<HTMLCanvasElement>) {\n isDrawing.current = true\n const pt = getPoint(e)\n startPoint.current = pt\n lastPoint.current = pt\n const canvas = canvasRef.current!\n const ctx = canvas.getContext('2d')!\n // Save base before starting any stroke\n baseSnapshot.current = ctx.getImageData(0, 0, canvas.width, canvas.height)\n }\n\n function onMouseMove(e: React.MouseEvent<HTMLCanvasElement>) {\n if (!isDrawing.current || !startPoint.current) return\n const canvas = canvasRef.current!\n const ctx = canvas.getContext('2d')!\n const pt = getPoint(e)\n\n applyStrokeStyle(ctx, colorRef.current, sizeRef.current)\n\n if (toolRef.current === 'pen') {\n ctx.beginPath()\n ctx.moveTo(lastPoint.current!.x, lastPoint.current!.y)\n ctx.lineTo(pt.x, pt.y)\n ctx.stroke()\n lastPoint.current = pt\n } else {\n // Restore base, then draw preview\n ctx.putImageData(baseSnapshot.current!, 0, 0)\n applyStrokeStyle(ctx, colorRef.current, sizeRef.current)\n drawShape(ctx, toolRef.current, startPoint.current.x, startPoint.current.y, pt.x, pt.y)\n }\n }\n\n function onMouseUp(e: React.MouseEvent<HTMLCanvasElement>) {\n if (!isDrawing.current || !startPoint.current) return\n isDrawing.current = false\n const canvas = canvasRef.current!\n const ctx = canvas.getContext('2d')!\n const pt = getPoint(e)\n\n if (toolRef.current !== 'pen') {\n ctx.putImageData(baseSnapshot.current!, 0, 0)\n applyStrokeStyle(ctx, colorRef.current, sizeRef.current)\n drawShape(ctx, toolRef.current, startPoint.current.x, startPoint.current.y, pt.x, pt.y)\n }\n\n // Commit current state as new base\n baseSnapshot.current = ctx.getImageData(0, 0, canvas.width, canvas.height)\n startPoint.current = null\n lastPoint.current = null\n }\n\n function clearAnnotations() {\n const canvas = canvasRef.current!\n const ctx = canvas.getContext('2d')!\n const img = new Image()\n img.onload = () => {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n ctx.drawImage(img, 0, 0)\n baseSnapshot.current = ctx.getImageData(0, 0, canvas.width, canvas.height)\n }\n img.src = screenshotDataUrl\n }\n\n const toolBtn = (t: DrawTool) => ({\n background: tool === t ? '#4F46E5' : 'rgba(255,255,255,0.07)',\n color: '#fff',\n border: 'none',\n borderRadius: 6,\n width: 30,\n height: 30,\n cursor: 'pointer',\n display: 'flex' as const,\n alignItems: 'center' as const,\n justifyContent: 'center' as const,\n flexShrink: 0 as const,\n })\n\n return (\n <div style={{\n position: 'fixed', inset: 0, zIndex: 999999, background: 'rgba(0,0,0,0.82)',\n display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center',\n gap: 16, fontFamily: 'system-ui, -apple-system, sans-serif',\n }}>\n {/* Toolbar */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 10,\n background: '#1a1a1a', border: '1px solid rgba(255,255,255,0.1)',\n padding: '8px 14px', borderRadius: 10, flexWrap: 'wrap',\n }}>\n {/* Tools */}\n <span style={{ color: '#999', fontSize: 11, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>Tool</span>\n {(Object.keys(TOOL_ICONS) as DrawTool[]).map(t => (\n <button key={t} onClick={() => setTool(t)} style={toolBtn(t)} title={t}>\n {TOOL_ICONS[t]}\n </button>\n ))}\n\n <div style={{ width: 1, height: 20, background: 'rgba(255,255,255,0.12)' }} />\n\n {/* Colors */}\n <span style={{ color: '#999', fontSize: 11, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>Color</span>\n {COLORS.map(c => (\n <button key={c} onClick={() => setColor(c)} style={{\n width: 20, height: 20, borderRadius: '50%', background: c, border: 'none',\n cursor: 'pointer', padding: 0, flexShrink: 0,\n outline: color === c ? '2px solid #4F46E5' : 'none', outlineOffset: 2,\n boxShadow: color === c ? '0 0 0 1px rgba(79,70,229,0.4)' : 'none',\n }} />\n ))}\n\n <div style={{ width: 1, height: 20, background: 'rgba(255,255,255,0.12)' }} />\n\n {/* Sizes */}\n <span style={{ color: '#999', fontSize: 11, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>Size</span>\n {SIZES.map(s => (\n <button key={s} onClick={() => setSize(s)} style={{\n width: 28, height: 28, borderRadius: 6, border: 'none', cursor: 'pointer',\n background: size === s ? '#4F46E5' : 'rgba(255,255,255,0.07)',\n display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0,\n }}>\n <div style={{ width: s * 2.5, height: s * 2.5, borderRadius: '50%', background: '#fff' }} />\n </button>\n ))}\n\n <div style={{ width: 1, height: 20, background: 'rgba(255,255,255,0.12)' }} />\n\n <button onClick={clearAnnotations} style={{\n background: 'rgba(255,255,255,0.07)', color: '#ccc', border: 'none',\n borderRadius: 6, padding: '4px 10px', cursor: 'pointer', fontSize: 12, fontWeight: 500,\n }}>\n Clear\n </button>\n </div>\n\n {/* Canvas */}\n <canvas\n ref={canvasRef}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n onMouseLeave={onMouseUp}\n style={{\n cursor: tool === 'pen' ? 'crosshair' : 'crosshair',\n borderRadius: 4,\n boxShadow: '0 8px 32px rgba(0,0,0,0.6)',\n display: 'block', maxWidth: '88vw', maxHeight: '72vh',\n }}\n />\n\n {/* Actions */}\n <div style={{ display: 'flex', gap: 10 }}>\n <button onClick={onBack} style={{\n background: 'rgba(255,255,255,0.08)', color: '#ccc',\n border: '1px solid rgba(255,255,255,0.12)', borderRadius: 8,\n padding: '9px 20px', cursor: 'pointer', fontSize: 14, fontWeight: 500,\n }}>← Back</button>\n <button onClick={() => canvasRef.current && onDone(canvasRef.current)} style={{\n background: '#4F46E5', color: '#fff', border: 'none', borderRadius: 8,\n padding: '9px 22px', cursor: 'pointer', fontSize: 14, fontWeight: 600,\n }}>Add comment →</button>\n </div>\n </div>\n )\n}\n","import React, { useState } from 'react'\n\ninterface FeedbackFormProps {\n screenshotDataUrl: string\n isSubmitting: boolean\n error: string | null\n onSubmit: (summary: string, description: string) => void\n onBack: () => void\n}\n\nexport function FeedbackForm({\n screenshotDataUrl,\n isSubmitting,\n error,\n onSubmit,\n onBack,\n}: FeedbackFormProps) {\n const [summary, setSummary] = useState('')\n const [description, setDescription] = useState('')\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!summary.trim()) return\n onSubmit(summary.trim(), description.trim())\n }\n\n return (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 999999,\n background: 'rgba(0,0,0,0.7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n padding: 16,\n }}\n >\n <div\n style={{\n background: '#fff',\n borderRadius: 12,\n width: '100%',\n maxWidth: 480,\n boxShadow: '0 24px 64px rgba(0,0,0,0.4)',\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <div\n style={{\n background: '#4F46E5',\n padding: '16px 20px',\n color: '#fff',\n }}\n >\n <h2 style={{ margin: 0, fontSize: 16, fontWeight: 700 }}>Send Feedback</h2>\n <p style={{ margin: '4px 0 0', fontSize: 13, opacity: 0.8 }}>\n Describe what went wrong or what you'd like to report.\n </p>\n </div>\n\n {/* Screenshot thumbnail */}\n <div style={{ padding: '12px 20px 0' }}>\n <p style={{ margin: '0 0 6px', fontSize: 12, fontWeight: 600, color: '#6B7280' }}>\n SCREENSHOT\n </p>\n <img\n src={screenshotDataUrl}\n alt=\"Captured screenshot\"\n style={{\n width: '100%',\n borderRadius: 6,\n border: '1px solid #E5E7EB',\n display: 'block',\n maxHeight: 140,\n objectFit: 'cover',\n objectPosition: 'top',\n }}\n />\n </div>\n\n {/* Form */}\n <form onSubmit={handleSubmit} style={{ padding: '16px 20px 20px' }}>\n <label style={{ display: 'block', marginBottom: 12 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: '#374151', display: 'block', marginBottom: 4 }}>\n Summary <span style={{ color: '#EF4444' }}>*</span>\n </span>\n <input\n type=\"text\"\n value={summary}\n onChange={e => setSummary(e.target.value)}\n placeholder=\"Short description of the issue\"\n disabled={isSubmitting}\n maxLength={120}\n required\n style={{\n width: '100%',\n padding: '8px 12px',\n border: '1px solid #D1D5DB',\n borderRadius: 7,\n fontSize: 14,\n outline: 'none',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s',\n color: '#111827',\n }}\n />\n </label>\n\n <label style={{ display: 'block', marginBottom: 16 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: '#374151', display: 'block', marginBottom: 4 }}>\n Additional details\n </span>\n <textarea\n value={description}\n onChange={e => setDescription(e.target.value)}\n placeholder=\"Steps to reproduce, expected behavior, etc.\"\n disabled={isSubmitting}\n rows={4}\n style={{\n width: '100%',\n padding: '8px 12px',\n border: '1px solid #D1D5DB',\n borderRadius: 7,\n fontSize: 14,\n outline: 'none',\n resize: 'vertical',\n boxSizing: 'border-box',\n fontFamily: 'inherit',\n color: '#111827',\n }}\n />\n </label>\n\n {error && (\n <div\n style={{\n background: '#FEF2F2',\n border: '1px solid #FECACA',\n color: '#DC2626',\n borderRadius: 7,\n padding: '8px 12px',\n fontSize: 13,\n marginBottom: 12,\n }}\n >\n {error}\n </div>\n )}\n\n <div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end' }}>\n <button\n type=\"button\"\n onClick={onBack}\n disabled={isSubmitting}\n style={{\n background: 'transparent',\n color: '#6B7280',\n border: '1px solid #D1D5DB',\n borderRadius: 7,\n padding: '8px 16px',\n cursor: 'pointer',\n fontSize: 14,\n fontWeight: 500,\n }}\n >\n ← Back\n </button>\n <button\n type=\"submit\"\n disabled={isSubmitting || !summary.trim()}\n style={{\n background: isSubmitting || !summary.trim() ? '#A5B4FC' : '#4F46E5',\n color: '#fff',\n border: 'none',\n borderRadius: 7,\n padding: '8px 20px',\n cursor: isSubmitting || !summary.trim() ? 'not-allowed' : 'pointer',\n fontSize: 14,\n fontWeight: 600,\n minWidth: 110,\n transition: 'background 0.15s',\n }}\n >\n {isSubmitting ? 'Sending…' : 'Send to Jira'}\n </button>\n </div>\n </form>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\n\ninterface JiraIssueResult {\n issueKey: string\n issueUrl: string\n}\n\ninterface CreateIssueParams {\n host: string\n projectKey: string\n token: string\n userEmail: string\n issueType: string\n labels: string[]\n summary: string\n description: string\n screenshotBlob: Blob\n pageUrl: string\n pageTitle: string\n}\n\nfunction makeAuthHeader(email: string, token: string): string {\n return 'Basic ' + btoa(`${email}:${token}`)\n}\n\nfunction makeAdfDescription(description: string, pageUrl: string, pageTitle: string) {\n return {\n type: 'doc',\n version: 1,\n content: [\n {\n type: 'paragraph',\n content: [{ type: 'text', text: description }],\n },\n {\n type: 'paragraph',\n content: [\n { type: 'text', text: 'Page: ', marks: [{ type: 'strong' }] },\n {\n type: 'text',\n text: pageTitle || pageUrl,\n marks: [\n {\n type: 'link',\n attrs: { href: pageUrl },\n },\n ],\n },\n ],\n },\n ],\n }\n}\n\nasync function createJiraIssue(params: CreateIssueParams): Promise<JiraIssueResult> {\n const {\n host,\n projectKey,\n token,\n userEmail,\n issueType,\n labels,\n summary,\n description,\n screenshotBlob,\n pageUrl,\n pageTitle,\n } = params\n\n const baseUrl = `https://${host}`\n const auth = makeAuthHeader(userEmail, token)\n\n const issueBody = {\n fields: {\n project: { key: projectKey },\n summary: `[Feedback] ${summary}`,\n description: makeAdfDescription(description, pageUrl, pageTitle),\n issuetype: { name: issueType },\n ...(labels.length > 0 && { labels }),\n },\n }\n\n const createRes = await fetch(`${baseUrl}/rest/api/3/issue`, {\n method: 'POST',\n headers: {\n Authorization: auth,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(issueBody),\n })\n\n if (!createRes.ok) {\n const err = await createRes.text()\n throw new Error(`Jira issue creation failed (${createRes.status}): ${err}`)\n }\n\n const { key: issueKey } = await createRes.json()\n\n const formData = new FormData()\n formData.append('file', screenshotBlob, 'feedback-screenshot.png')\n\n const attachRes = await fetch(`${baseUrl}/rest/api/3/issue/${issueKey}/attachments`, {\n method: 'POST',\n headers: {\n Authorization: auth,\n 'X-Atlassian-Token': 'no-check',\n },\n body: formData,\n })\n\n if (!attachRes.ok) {\n // Issue was created; attachment failed — not fatal, just warn\n console.warn(`[FeedbackWidget] Screenshot attachment failed (${attachRes.status})`)\n }\n\n return {\n issueKey,\n issueUrl: `${baseUrl}/browse/${issueKey}`,\n }\n}\n\nexport function useJira() {\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n async function submit(params: CreateIssueParams): Promise<JiraIssueResult> {\n setIsLoading(true)\n setError(null)\n try {\n const result = await createJiraIssue(params)\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setIsLoading(false)\n }\n }\n\n return { submit, isLoading, error }\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport { FeedbackWidgetProps, FeedbackStep, SelectionRect } from '../../types'\nimport { FeedbackButton } from '../FeedbackButton'\nimport { CaptureOverlay } from '../CaptureOverlay'\nimport { AnnotationCanvas } from '../AnnotationCanvas'\nimport { FeedbackForm } from '../FeedbackForm'\nimport { useJira } from '../../hooks/useJira'\n\nexport function FeedbackWidget({\n jiraHost,\n jiraProjectKey,\n jiraToken,\n jiraUserEmail,\n jiraIssueType = 'Bug',\n jiraLabels = [],\n onSubmit: onSubmitProp,\n apiRoute,\n position = 'bottom-right',\n buttonLabel = 'Feedback',\n onSuccess,\n onError,\n}: FeedbackWidgetProps) {\n const [step, setStep] = useState<FeedbackStep>('idle')\n const [fullPageCanvas, setFullPageCanvas] = useState<HTMLCanvasElement | null>(null)\n const [screenshotDataUrl, setScreenshotDataUrl] = useState<string>('')\n const [annotatedCanvas, setAnnotatedCanvas] = useState<HTMLCanvasElement | null>(null)\n const [submitError, setSubmitError] = useState<string | null>(null)\n const [portalRoot, setPortalRoot] = useState<HTMLDivElement | null>(null)\n\n const { submit: submitToJira } = useJira()\n\n useEffect(() => {\n const hasJiraConfig = jiraHost && jiraProjectKey && jiraToken && jiraUserEmail\n if (!hasJiraConfig && !onSubmitProp && !apiRoute) {\n console.error('[FeedbackWidget] Provide apiRoute, onSubmit, or (jiraHost + jiraProjectKey + jiraToken + jiraUserEmail).')\n }\n }, [jiraHost, jiraProjectKey, jiraToken, jiraUserEmail, onSubmitProp, apiRoute])\n\n useEffect(() => {\n const el = document.createElement('div')\n el.setAttribute('data-feedback-widget', '')\n document.body.appendChild(el)\n setPortalRoot(el)\n return () => { document.body.removeChild(el) }\n }, [])\n\n // Called when user clicks the Feedback button.\n // Captures the screen ONCE via getDisplayMedia — permission asked here, never again.\n const handleButtonClick = useCallback(async () => {\n setStep('capturing') // hides button immediately\n // Let React unmount the button before screen capture\n await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)))\n try {\n const stream = await (navigator.mediaDevices as any).getDisplayMedia({\n preferCurrentTab: true,\n video: true,\n audio: false,\n })\n\n const video = document.createElement('video')\n video.srcObject = stream\n video.muted = true\n await new Promise<void>(resolve => { video.onloadedmetadata = () => resolve() })\n await video.play()\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n const canvas = document.createElement('canvas')\n canvas.width = video.videoWidth\n canvas.height = video.videoHeight\n canvas.getContext('2d')!.drawImage(video, 0, 0)\n stream.getTracks().forEach((t: MediaStreamTrack) => t.stop())\n\n setFullPageCanvas(canvas)\n setStep('selecting')\n } catch {\n // User cancelled permission dialog\n setStep('idle')\n }\n }, [])\n\n // Crop the already-captured fullPageCanvas — no new capture, no new permission.\n const handleCapture = useCallback((rect: SelectionRect) => {\n if (!fullPageCanvas) return\n\n const scaleX = fullPageCanvas.width / window.innerWidth\n const scaleY = fullPageCanvas.height / window.innerHeight\n const cropX = Math.round(rect.startX * scaleX)\n const cropY = Math.round(rect.startY * scaleY)\n const cropW = Math.round((rect.endX - rect.startX) * scaleX)\n const cropH = Math.round((rect.endY - rect.startY) * scaleY)\n\n const cropped = document.createElement('canvas')\n cropped.width = cropW\n cropped.height = cropH\n cropped.getContext('2d')!.drawImage(fullPageCanvas, cropX, cropY, cropW, cropH, 0, 0, cropW, cropH)\n\n setScreenshotDataUrl(cropped.toDataURL('image/png'))\n setStep('annotating')\n }, [fullPageCanvas])\n\n const handleAnnotationDone = useCallback((canvas: HTMLCanvasElement) => {\n setAnnotatedCanvas(canvas)\n setScreenshotDataUrl(canvas.toDataURL('image/png'))\n setStep('form')\n }, [])\n\n const handleFormSubmit = useCallback(\n async (summary: string, description: string) => {\n setSubmitError(null)\n setStep('submitting')\n\n const screenshotBlob = await new Promise<Blob>((resolve, reject) => {\n annotatedCanvas!.toBlob(b => (b ? resolve(b) : reject(new Error('toBlob failed'))), 'image/png')\n })\n\n const payload = {\n screenshot: screenshotBlob,\n summary,\n description,\n pageUrl: window.location.href,\n pageTitle: document.title,\n }\n\n try {\n let result: { issueKey?: string; issueUrl?: string } = {}\n\n if (onSubmitProp) {\n result = (await onSubmitProp(payload)) ?? {}\n } else if (apiRoute) {\n const fd = new FormData()\n fd.append('screenshot', screenshotBlob)\n fd.append('summary', summary)\n fd.append('description', description)\n fd.append('pageUrl', payload.pageUrl)\n fd.append('pageTitle', payload.pageTitle)\n const res = await fetch(apiRoute, { method: 'POST', body: fd })\n if (!res.ok) throw new Error(await res.text())\n result = await res.json()\n } else {\n result = await submitToJira({\n host: jiraHost!, projectKey: jiraProjectKey!, token: jiraToken!,\n userEmail: jiraUserEmail!, issueType: jiraIssueType, labels: jiraLabels,\n summary, description, screenshotBlob,\n pageUrl: payload.pageUrl, pageTitle: payload.pageTitle,\n })\n }\n\n setStep('success')\n onSuccess?.(result)\n\n setTimeout(() => {\n setStep('idle')\n setFullPageCanvas(null)\n setScreenshotDataUrl('')\n setAnnotatedCanvas(null)\n }, 3000)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setSubmitError(e.message)\n setStep('form')\n onError?.(e)\n }\n },\n [annotatedCanvas, onSubmitProp, submitToJira, jiraHost, jiraProjectKey, jiraToken,\n jiraUserEmail, jiraIssueType, jiraLabels, onSuccess, onError]\n )\n\n const reset = useCallback(() => {\n setStep('idle')\n setFullPageCanvas(null)\n setScreenshotDataUrl('')\n setAnnotatedCanvas(null)\n setSubmitError(null)\n }, [])\n\n if (!portalRoot) return null\n\n return ReactDOM.createPortal(\n <>\n {step === 'idle' && (\n <FeedbackButton\n position={position}\n label={buttonLabel}\n onClick={handleButtonClick}\n />\n )}\n\n {step === 'selecting' && fullPageCanvas && (\n <CaptureOverlay\n fullPageCanvas={fullPageCanvas}\n onCapture={handleCapture}\n onCancel={reset}\n />\n )}\n\n {step === 'annotating' && screenshotDataUrl && (\n <AnnotationCanvas\n screenshotDataUrl={screenshotDataUrl}\n onDone={handleAnnotationDone}\n onBack={() => setStep('selecting')}\n />\n )}\n\n {(step === 'form' || step === 'submitting') && screenshotDataUrl && (\n <FeedbackForm\n screenshotDataUrl={screenshotDataUrl}\n isSubmitting={step === 'submitting'}\n error={submitError}\n onSubmit={handleFormSubmit}\n onBack={() => setStep('annotating')}\n />\n )}\n\n {step === 'success' && <SuccessToast position={position} />}\n </>,\n portalRoot\n )\n}\n\nfunction SuccessToast({ position }: { position: FeedbackWidgetProps['position'] }) {\n const posStyle: React.CSSProperties = position === 'bottom-right' || position === 'bottom-left' ? { bottom: 24 } : { top: 24 }\n const sideStyle: React.CSSProperties = position === 'bottom-right' || position === 'top-right' ? { right: 24 } : { left: 24 }\n\n return (\n <div style={{\n position: 'fixed', zIndex: 999999, background: '#059669', color: '#fff',\n padding: '12px 20px', borderRadius: 10, fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: 14, fontWeight: 600, display: 'flex', alignItems: 'center', gap: 8,\n boxShadow: '0 4px 16px rgba(5,150,105,0.4)', ...posStyle, ...sideStyle,\n }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n Feedback sent to Jira!\n </div>\n )\n}\n"]}