@vibeflow-tools/cli 0.6.1 → 0.8.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.
@@ -1548,6 +1548,37 @@ Error generating stack: `+f.message+`
1548
1548
  color: rgba(255,255,255,0.7);
1549
1549
  }
1550
1550
  .rq-btn-secondary:hover { background: #475569; }
1551
+
1552
+ /* \u2500\u2500 Corner trigger context menu (right-click to hide overlay) \u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1553
+ .vibeflow-trigger-ctx-menu {
1554
+ position: fixed;
1555
+ background: #1e293b;
1556
+ border: 1px solid #334155;
1557
+ border-radius: 6px;
1558
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
1559
+ padding: 2px;
1560
+ z-index: 2147483647;
1561
+ pointer-events: auto;
1562
+ }
1563
+
1564
+ .vibeflow-trigger-ctx-menu button {
1565
+ display: block;
1566
+ width: 100%;
1567
+ text-align: left;
1568
+ padding: 4px 10px;
1569
+ border: none;
1570
+ background: none;
1571
+ color: #e2e8f0;
1572
+ font-size: 12px;
1573
+ font-family: system-ui, sans-serif;
1574
+ cursor: pointer;
1575
+ border-radius: 4px;
1576
+ white-space: nowrap;
1577
+ }
1578
+
1579
+ .vibeflow-trigger-ctx-menu button:hover {
1580
+ background: #334155;
1581
+ }
1551
1582
  `,HOST_PAGE_CSS=` .vibeflow-overlay-active * {
1552
1583
  cursor: crosshair !important;
1553
1584
  }
@@ -1566,14 +1597,14 @@ Error generating stack: `+f.message+`
1566
1597
  `)){let m=line.match(/^\s*at\s+([A-Za-z_$][A-Za-z0-9._$]*)\s+\(/);if(m&&!SKIP.test(m[1]))return m[1]}return null}function getReactSource(el2){var _a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q,_r,_s;let fiberKey=Object.keys(el2).find(k=>k.startsWith("__reactFiber")||k.startsWith("__reactInternalInstance"));if(!fiberKey)return null;let fiber=el2[fiberKey],result={},nearestComponent,parentComponent,depth=0;for(;fiber&&depth<20;){if(fiber._debugSource&&!result.file&&(result.file=fiber._debugSource.fileName,result.line=fiber._debugSource.lineNumber,result.col=fiber._debugSource.columnNumber),!result.component){let ownerName=((_b=(_a=fiber._debugOwner)==null?void 0:_a.type)==null?void 0:_b.displayName)??((_d=(_c=fiber._debugOwner)==null?void 0:_c.type)==null?void 0:_d.name);ownerName&&!nearestComponent&&(nearestComponent=ownerName);let ownerParentName=((_h=(_g=(_f=(_e=fiber._debugOwner)==null?void 0:_e.return)==null?void 0:_f._debugOwner)==null?void 0:_g.type)==null?void 0:_h.displayName)??((_l=(_k=(_j=(_i=fiber._debugOwner)==null?void 0:_i.return)==null?void 0:_j._debugOwner)==null?void 0:_k.type)==null?void 0:_l.name)??((_o=(_n=(_m=fiber._debugOwner)==null?void 0:_m._debugOwner)==null?void 0:_n.type)==null?void 0:_o.displayName)??((_r=(_q=(_p=fiber._debugOwner)==null?void 0:_p._debugOwner)==null?void 0:_q.type)==null?void 0:_r.name);ownerParentName&&ownerParentName!==ownerName&&!parentComponent&&(parentComponent=ownerParentName)}if(!result.component){let stack=(_s=fiber._debugStack)==null?void 0:_s.stack;if(stack){let name=parseComponentFromReactStack(stack);name&&!nearestComponent&&(nearestComponent=name);let functionName=parseFunctionFromReactStack(stack);functionName&&(result.functionName=functionName)}}if((result.file||result.component)&&depth>0)break;fiber=fiber.return,depth++}return nearestComponent&&(result.component=parentComponent?`${parentComponent} > ${nearestComponent}`:nearestComponent),result.file!=null||result.component!=null?result:null}function getVue3Source(el2){var _a,_b,_c;let node=el2;for(;node;){let instance=node.__vueParentComponent;if(instance)return{file:((_a=instance.type)==null?void 0:_a.__file)??void 0,component:((_b=instance.type)==null?void 0:_b.name)??((_c=instance.type)==null?void 0:_c.__name)??void 0};node=node.parentElement}return null}function getVue2Source(el2){var _a,_b;let node=el2;for(;node;){let vm=node.__vue__;if(vm)return{file:((_a=vm.$options)==null?void 0:_a.__file)??void 0,component:((_b=vm.$options)==null?void 0:_b.name)??void 0};node=node.parentElement}return null}function getAngularSource(el2){var _a;let ng=window.ng;if(!ng)return null;let node=el2;for(;node;){try{let component=ng.getComponent(node);if(component)return{component:((_a=component.constructor)==null?void 0:_a.name)??void 0}}catch{}node=node.parentElement}return null}function getPreactSource(el2){var _a,_b,_c,_d;let e=el2,children=((_a=e.__P)==null?void 0:_a.__k)??[],GENERIC_NAMES=new Set(["Object","VNode","VNode2"]);for(let vnode of children){if(!vnode||typeof vnode!="object")continue;let v=vnode,typeNameRaw2=(_b=v==null?void 0:v.type)==null?void 0:_b.name,ctorNameRaw=(_c=v==null?void 0:v.constructor)==null?void 0:_c.name,ctorName=ctorNameRaw&&!GENERIC_NAMES.has(ctorNameRaw)?ctorNameRaw:void 0,name=typeNameRaw2??ctorName??void 0;if(name)return{component:name}}let attrNode=e.__preactattr__;if(!attrNode)return null;let typeNameRaw=(_d=attrNode==null?void 0:attrNode.type)==null?void 0:_d.name;return typeNameRaw?{component:typeNameRaw}:null}function resolveFrameworkSource(el2){return getReactSource(el2)??getVue3Source(el2)??getVue2Source(el2)??getAngularSource(el2)??getPreactSource(el2)}function buildSourcePointer(element){let cssSelector=buildCssSelector(element),pointer={selector:cssSelector,display:cssSelector},tier1=resolveFrameworkSource(element);tier1&&(tier1.file!=null&&(pointer.file=tier1.file),tier1.line!=null&&(pointer.line=tier1.line),tier1.col!=null&&(pointer.col=tier1.col),tier1.component!=null&&(pointer.component=tier1.component),tier1.functionName!=null&&(pointer.functionName=tier1.functionName));let protoId=element.getAttribute("data-vibeflow-id");if(protoId)return pointer.selector=`[data-vibeflow-id="${protoId}"]`,pointer.display=protoId,pointer;let testIdResult=resolveTestId(element);if(testIdResult&&(pointer.test_id=testIdResult.value),pointer.file){let fileName=pointer.file.replace(/\\/g,"/").split("/").pop()??pointer.file;pointer.selector=pointer.line!=null?`${pointer.file}:${pointer.line}`:pointer.file,pointer.display=pointer.line!=null?`${fileName}:${pointer.line}`:fileName}else pointer.component?(pointer.selector=pointer.component,pointer.display=pointer.component):pointer.functionName?(pointer.selector=pointer.functionName,pointer.display=pointer.functionName):testIdResult&&(pointer.selector=testIdResult.attr==="id"?`#${testIdResult.value}`:`[${testIdResult.attr}="${testIdResult.value}"]`,pointer.display=`${testIdResult.attr}:${testIdResult.value}`);return pointer}var VLQ_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",VLQ_TABLE={};for(let i=0;i<VLQ_CHARS.length;i++)VLQ_TABLE[VLQ_CHARS.charCodeAt(i)]=i;function vlqDecodeInt(s,pos){let result=0,shift=0,byte=0;do byte=VLQ_TABLE[s.charCodeAt(pos++)]??0,result|=(byte&31)<<shift,shift+=5;while(byte&32);return[result&1?-(result>>1):result>>1,pos]}function vlqDecodeSegment(seg){let out=[],pos=0;for(;pos<seg.length;){let[n,next]=vlqDecodeInt(seg,pos);out.push(n),pos=next}return out}function findFlatMapping(map,genLine,genCol){if(!map.mappings||!map.sources)return null;let lines=map.mappings.split(";"),srcIdx=0,srcLine=0,srcCol=0,best=null;for(let i=0;i<lines.length;i++){let genColAcc=0;for(let seg of lines[i].split(",")){if(!seg)continue;let d=vlqDecodeSegment(seg);if(!(d.length<1)&&(genColAcc+=d[0],d.length>=4&&(srcIdx+=d[1],srcLine+=d[2],srcCol+=d[3],i===genLine&&genColAcc<=genCol&&(best={source:map.sources[srcIdx]??"",line:srcLine+1,col:srcCol+1}),i===genLine&&genColAcc>genCol)))break}if(i>genLine)break}return best}function resolveInMap(map,genLine,genCol){if(map.sections){let best=null;for(let s of map.sections)(s.offset.line<genLine||s.offset.line===genLine&&s.offset.column<=genCol)&&(best=s);if(!best)return null;let relLine=genLine-best.offset.line,relCol=relLine===0?genCol-best.offset.column:genCol;return resolveInMap(best.map,relLine,relCol)}return findFlatMapping(map,genLine,genCol)}var smCache=new Map;function fetchSourceMap(chunkUrl){let p=smCache.get(chunkUrl);return p||(p=fetch(`${chunkUrl}.map`).then(r=>r.ok?r.json():null).catch(()=>null),smCache.set(chunkUrl,p)),p}var SKIP_FRAME_RE=/node_modules|_next\/dist|react-stack-top-frame|jsxDEV|react_stack_bottom_frame|fakeJSXCallSite|initializeElement/;function parseUserFrame(stack){for(let line of stack.split(`
1567
1598
  `)){let m=line.match(/at [^(]+ \((https?:\/\/[^)]+):(\d+):(\d+)\)/);if(!m)continue;let[,url,lineStr,colStr]=m;if(!SKIP_FRAME_RE.test(url))return{chunkUrl:url,line:parseInt(lineStr,10),col:parseInt(colStr,10)}}return null}function getDebugStackStr(el2){var _a;let fiberKey=Object.keys(el2).find(k=>k.startsWith("__reactFiber")||k.startsWith("__reactInternalInstance"));if(!fiberKey)return null;let fiber=el2[fiberKey];return((_a=fiber==null?void 0:fiber._debugStack)==null?void 0:_a.stack)??null}function cleanSourcePath(raw){return raw.replace(/\?.*$/,"").replace(/^https?:\/\/[^/]+\/@fs/,"").replace(/^https?:\/\/[^/]+/,"").replace(/^file:\/\/\/app\//,"").replace(/^file:\/\/\//,"").replace(/\[project\]\//g,"").replace(/%28/g,"(").replace(/%29/g,")").replace(/%20/g," ")}var DIRECT_SRC_EXT_RE=/\.m?[tj]sx?(\?[^)]*)?$/,BUNDLE_CHUNK_RE=/chunk[-_.][0-9a-f]{6,}|\.chunk\.[0-9a-f]|webpack|_next\/(?:static\/chunks|dist)|rollup/i;function isDirectSourceUrl(url){return!(!url||!DIRECT_SRC_EXT_RE.test(url)||BUNDLE_CHUNK_RE.test(url)||SKIP_FRAME_RE.test(url))}function captureV8CallSites(err){if(typeof Error.captureStackTrace!="function")return null;let prev=Error.prepareStackTrace,captured=null;try{Error.prepareStackTrace=(_,sites)=>(captured=sites,sites.map(s=>` at ${s.getFunctionName()??"<anonymous>"} (${s.getFileName()}:${s.getLineNumber()}:${s.getColumnNumber()})`).join(`
1568
1599
  `)),err.stack}finally{Error.prepareStackTrace=prev}return captured}function getDebugStackError(el2){let fiberKey=Object.keys(el2).find(k=>k.startsWith("__reactFiber")||k.startsWith("__reactInternalInstance"));if(!fiberKey)return null;let fiber=el2[fiberKey],ds=fiber==null?void 0:fiber._debugStack;return ds instanceof Error?ds:null}function resolveDirectSourceFromStack(el2){var _a,_b,_c,_d;let stackErr=getDebugStackError(el2);if(!stackErr)return null;let callSites=captureV8CallSites(stackErr);if(callSites)for(let site of callSites){let fileName=((_a=site.getFileName)==null?void 0:_a.call(site))??null;if(!(!fileName||SKIP_FRAME_RE.test(fileName))&&isDirectSourceUrl(fileName))return{file:cleanSourcePath(fileName),line:((_b=site.getLineNumber)==null?void 0:_b.call(site))??1,col:((_c=site.getColumnNumber)==null?void 0:_c.call(site))??1,fnName:((_d=site.getFunctionName)==null?void 0:_d.call(site))??void 0}}let stack=typeof stackErr.stack=="string"?stackErr.stack:null;if(!stack)return null;for(let raw of stack.split(`
1569
- `)){let m=raw.match(/^\s*at [^(]+ \(([^)]+):(\d+):(\d+)\)$/)??raw.match(/^\s*at ((?:https?|file):\/\/[^:]+):(\d+):(\d+)$/);if(!m)continue;let[,url,lineStr,colStr]=m;if(isDirectSourceUrl(url)&&!SKIP_FRAME_RE.test(url))return{file:cleanSourcePath(url),line:parseInt(lineStr,10),col:parseInt(colStr,10)}}return null}async function resolveSourceFromStack(el2){let stack=getDebugStackStr(el2);if(!stack)return null;let frame=parseUserFrame(stack);if(!frame)return null;let map=await fetchSourceMap(frame.chunkUrl);if(!map)return null;let mapped=resolveInMap(map,frame.line-1,frame.col-1);return mapped?{file:cleanSourcePath(mapped.source),line:mapped.line,col:mapped.col}:null}async function buildSourcePointerAsync(element){let pointer=buildSourcePointer(element);if(pointer.file)return pointer;let direct=resolveDirectSourceFromStack(element);if(direct){pointer.file=direct.file,pointer.line=direct.line,pointer.col=direct.col;let fileName2=direct.file.replace(/\\/g,"/").split("/").pop()??direct.file;return pointer.selector=`${direct.file}:${direct.line}`,pointer.display=`${fileName2}:${direct.line}`,pointer}let resolved=await resolveSourceFromStack(element);if(!resolved)return pointer;pointer.file=resolved.file,pointer.line=resolved.line,pointer.col=resolved.col;let fileName=resolved.file.replace(/\\/g,"/").split("/").pop()??resolved.file;return pointer.selector=`${resolved.file}:${resolved.line}`,pointer.display=`${fileName}:${resolved.line}`,pointer}var import_react25=__toESM(require_react(),1);var import_jsx_runtime=__toESM(require_jsx_runtime(),1);var import_react3=__toESM(require_react(),1);var import_react2=__toESM(require_react());var toKebabCase=string=>string.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),mergeClasses=(...classes)=>classes.filter((className,index,array)=>!!className&&className.trim()!==""&&array.indexOf(className)===index).join(" ").trim();var import_react=__toESM(require_react());var defaultAttributes={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var Icon=(0,import_react.forwardRef)(({color="currentColor",size=24,strokeWidth=2,absoluteStrokeWidth,className="",children,iconNode,...rest},ref)=>(0,import_react.createElement)("svg",{ref,...defaultAttributes,width:size,height:size,stroke:color,strokeWidth:absoluteStrokeWidth?Number(strokeWidth)*24/Number(size):strokeWidth,className:mergeClasses("lucide",className),...rest},[...iconNode.map(([tag,attrs])=>(0,import_react.createElement)(tag,attrs)),...Array.isArray(children)?children:[children]]));var createLucideIcon=(iconName,iconNode)=>{let Component=(0,import_react2.forwardRef)(({className,...props},ref)=>(0,import_react2.createElement)(Icon,{ref,iconNode,className:mergeClasses(`lucide-${toKebabCase(iconName)}`,className),...props}));return Component.displayName=`${iconName}`,Component};var Bot=createLucideIcon("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);var CircleCheckBig=createLucideIcon("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);var Eye=createLucideIcon("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);var Lock=createLucideIcon("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var MessageCircle=createLucideIcon("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);var Paperclip=createLucideIcon("Paperclip",[["path",{d:"M13.234 20.252 21 12.3",key:"1cbrk9"}],["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486",key:"1pkts6"}]]);var import_jsx_runtime2=__toESM(require_jsx_runtime(),1),TYPE_BADGE_STYLES={Bug:{background:"rgba(239,68,68,0.12)",color:"#f87171",border:"rgba(239,68,68,0.25)"},Research:{background:"rgba(192,132,252,0.12)",color:"#c084fc",border:"rgba(139,92,246,0.2)"},Task:{background:"rgba(148,163,184,0.1)",color:"#94a3b8",border:"rgba(148,163,184,0.2)"}};function TypeBadge({type,style}){let effectiveType=typeof type=="string"&&type.trim()&&type!=="[object Object]"&&TYPE_BADGE_STYLES[type]?type:"Task",colors=TYPE_BADGE_STYLES[effectiveType];return(0,import_jsx_runtime2.jsx)("span",{style:{fontSize:9,fontWeight:700,letterSpacing:"0.04em",padding:"1px 5px",borderRadius:3,flexShrink:0,textTransform:"uppercase",background:colors.background,color:colors.color,border:`1px solid ${colors.border}`,lineHeight:"1.5",...style},children:effectiveType})}var import_jsx_runtime3=__toESM(require_jsx_runtime(),1),PRIORITY_BADGE_STYLES={Critical:{background:"rgba(239,68,68,0.15)",color:"#f87171",border:"rgba(239,68,68,0.3)"},High:{background:"rgba(249,115,22,0.12)",color:"#fb923c",border:"rgba(249,115,22,0.25)"},Medium:{background:"rgba(234,179,8,0.12)",color:"#facc15",border:"rgba(234,179,8,0.25)"},Low:{background:"rgba(148,163,184,0.1)",color:"#94a3b8",border:"rgba(148,163,184,0.2)"}};function PriorityBadge({priority,style}){if(!priority||!PRIORITY_BADGE_STYLES[priority])return null;let colors=PRIORITY_BADGE_STYLES[priority];return(0,import_jsx_runtime3.jsx)("span",{style:{fontSize:9,fontWeight:700,letterSpacing:"0.04em",padding:"1px 5px",borderRadius:3,flexShrink:0,textTransform:"uppercase",background:colors.background,color:colors.color,border:`1px solid ${colors.border}`,lineHeight:"1.5",...style},children:priority})}var import_jsx_runtime4=__toESM(require_jsx_runtime(),1);var import_jsx_runtime5=__toESM(require_jsx_runtime(),1);var import_react6=__toESM(require_react(),1);var import_react4=__toESM(require_react(),1);var TASK_TYPES=[{value:"Task",icon:"\u2611",label:"Task",css:"type-task",tooltip:"A general task or feature to implement."},{value:"Bug",icon:"\u{1F41E}",label:"Bug",css:"type-bug",tooltip:"A defect \u2014 annotator collects page errors and console logs to help reproduce it."},{value:"Research",icon:"\u{1F52C}",label:"Research",css:"type-research",tooltip:"A research task \u2014 agent will NOT write code but must attach a findings report."}],TASK_TYPE_VALUES=TASK_TYPES.map(t=>t.value),TASK_TYPE_ICONS=Object.fromEntries(TASK_TYPES.map(t=>[t.value,t.icon])),TASK_TYPE_CSS=Object.fromEntries(TASK_TYPES.map(t=>[t.value,t.css])),TASK_TYPE_COLORS={Task:"#94a3b8",Bug:"#ef4444",Research:"#a855f7"};function getTaskTypeIcon(type){return TASK_TYPE_ICONS[type??"Task"]??"\u2611"}function getTaskTypeColor(type){return TASK_TYPE_COLORS[type??"Task"]??TASK_TYPE_COLORS.Task}var import_jsx_runtime6=__toESM(require_jsx_runtime(),1);function TypePicker({id,value,onChange,disabled}){let[open,setOpen]=import_react4.default.useState(!1),rootRef=import_react4.default.useRef(null),current=TASK_TYPES.find(t=>t.value===value)??TASK_TYPES[0];return import_react4.default.useEffect(()=>{let handler=e=>{var _a;(_a=rootRef.current)!=null&&_a.contains(e.target)||setOpen(!1)};return document.addEventListener("click",handler),()=>document.removeEventListener("click",handler)},[]),(0,import_jsx_runtime6.jsxs)("div",{id,ref:rootRef,style:{position:"relative",display:"inline-block"},children:[(0,import_jsx_runtime6.jsxs)("button",{type:"button",title:current==null?void 0:current.tooltip,onClick:e=>{e.preventDefault(),disabled||setOpen(o=>!o)},style:{display:"inline-flex",alignItems:"center",gap:5,padding:"3px 8px",borderRadius:6,border:"1px solid var(--p-border, rgba(255,255,255,0.08))",background:"var(--p-hover, rgba(255,255,255,0.05))",color:"var(--p-text-m, rgba(255,255,255,0.7))",fontSize:12,cursor:"pointer",whiteSpace:"nowrap"},children:[(0,import_jsx_runtime6.jsx)("span",{style:{fontSize:13},children:current==null?void 0:current.icon}),(0,import_jsx_runtime6.jsx)("span",{children:current==null?void 0:current.label})]}),open&&(0,import_jsx_runtime6.jsx)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:4,background:"var(--p-card, #1e293b)",border:"1px solid var(--p-border-s, rgba(255,255,255,0.12))",borderRadius:8,padding:"4px 0",zIndex:200,minWidth:140,boxShadow:"0 8px 24px rgba(0,0,0,0.4)"},children:TASK_TYPES.map(t=>(0,import_jsx_runtime6.jsxs)("button",{type:"button",title:t.tooltip,onClick:()=>{onChange(t.value),setOpen(!1)},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 12px",border:"none",background:t.value===value?"var(--p-hover, rgba(255,255,255,0.06))":"transparent",color:t.value===value?"var(--p-text, #fff)":"var(--p-text-f, rgba(255,255,255,0.55))",fontSize:12,cursor:"pointer",textAlign:"left"},children:[(0,import_jsx_runtime6.jsx)("span",{style:{fontSize:14,lineHeight:1},children:t.icon}),(0,import_jsx_runtime6.jsx)("span",{children:t.label})]},t.value))})]})}var import_react5=__toESM(require_react(),1);function splitTableCells(row){return row.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(cell=>cell.trim())}function isTableDivider(line){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(line)}function renderTables(markdown){let lines=markdown.split(`
1600
+ `)){let m=raw.match(/^\s*at [^(]+ \(([^)]+):(\d+):(\d+)\)$/)??raw.match(/^\s*at ((?:https?|file):\/\/[^:]+):(\d+):(\d+)$/);if(!m)continue;let[,url,lineStr,colStr]=m;if(isDirectSourceUrl(url)&&!SKIP_FRAME_RE.test(url))return{file:cleanSourcePath(url),line:parseInt(lineStr,10),col:parseInt(colStr,10)}}return null}async function resolveSourceFromStack(el2){let stack=getDebugStackStr(el2);if(!stack)return null;let frame=parseUserFrame(stack);if(!frame)return null;let map=await fetchSourceMap(frame.chunkUrl);if(!map)return null;let mapped=resolveInMap(map,frame.line-1,frame.col-1);return mapped?{file:cleanSourcePath(mapped.source),line:mapped.line,col:mapped.col}:null}async function buildSourcePointerAsync(element){let pointer=buildSourcePointer(element);if(pointer.file)return pointer;let direct=resolveDirectSourceFromStack(element);if(direct){pointer.file=direct.file,pointer.line=direct.line,pointer.col=direct.col;let fileName2=direct.file.replace(/\\/g,"/").split("/").pop()??direct.file;return pointer.selector=`${direct.file}:${direct.line}`,pointer.display=`${fileName2}:${direct.line}`,pointer}let resolved=await resolveSourceFromStack(element);if(!resolved)return pointer;pointer.file=resolved.file,pointer.line=resolved.line,pointer.col=resolved.col;let fileName=resolved.file.replace(/\\/g,"/").split("/").pop()??resolved.file;return pointer.selector=`${resolved.file}:${resolved.line}`,pointer.display=`${fileName}:${resolved.line}`,pointer}var import_react25=__toESM(require_react(),1);var import_jsx_runtime=__toESM(require_jsx_runtime(),1);var import_react3=__toESM(require_react(),1);var import_react2=__toESM(require_react());var toKebabCase=string=>string.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),mergeClasses=(...classes)=>classes.filter((className,index,array)=>!!className&&className.trim()!==""&&array.indexOf(className)===index).join(" ").trim();var import_react=__toESM(require_react());var defaultAttributes={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var Icon=(0,import_react.forwardRef)(({color="currentColor",size=24,strokeWidth=2,absoluteStrokeWidth,className="",children,iconNode,...rest},ref)=>(0,import_react.createElement)("svg",{ref,...defaultAttributes,width:size,height:size,stroke:color,strokeWidth:absoluteStrokeWidth?Number(strokeWidth)*24/Number(size):strokeWidth,className:mergeClasses("lucide",className),...rest},[...iconNode.map(([tag,attrs])=>(0,import_react.createElement)(tag,attrs)),...Array.isArray(children)?children:[children]]));var createLucideIcon=(iconName,iconNode)=>{let Component=(0,import_react2.forwardRef)(({className,...props},ref)=>(0,import_react2.createElement)(Icon,{ref,iconNode,className:mergeClasses(`lucide-${toKebabCase(iconName)}`,className),...props}));return Component.displayName=`${iconName}`,Component};var CircleCheckBig=createLucideIcon("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);var Eye=createLucideIcon("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);var Lock=createLucideIcon("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var MessageCircle=createLucideIcon("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);var Paperclip=createLucideIcon("Paperclip",[["path",{d:"M13.234 20.252 21 12.3",key:"1cbrk9"}],["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486",key:"1pkts6"}]]);var import_jsx_runtime2=__toESM(require_jsx_runtime(),1),TYPE_BADGE_STYLES={Bug:{background:"rgba(239,68,68,0.12)",color:"#f87171",border:"rgba(239,68,68,0.25)"},Research:{background:"rgba(192,132,252,0.12)",color:"#c084fc",border:"rgba(139,92,246,0.2)"},Task:{background:"rgba(148,163,184,0.1)",color:"#94a3b8",border:"rgba(148,163,184,0.2)"}};function TypeBadge({type,style}){let effectiveType=typeof type=="string"&&type.trim()&&type!=="[object Object]"&&TYPE_BADGE_STYLES[type]?type:"Task",colors=TYPE_BADGE_STYLES[effectiveType];return(0,import_jsx_runtime2.jsx)("span",{style:{fontSize:9,fontWeight:700,letterSpacing:"0.04em",padding:"1px 5px",borderRadius:3,flexShrink:0,textTransform:"uppercase",background:colors.background,color:colors.color,border:`1px solid ${colors.border}`,lineHeight:"1.5",...style},children:effectiveType})}var import_jsx_runtime3=__toESM(require_jsx_runtime(),1),PRIORITY_BADGE_STYLES={Critical:{background:"rgba(239,68,68,0.15)",color:"#f87171",border:"rgba(239,68,68,0.3)"},High:{background:"rgba(249,115,22,0.12)",color:"#fb923c",border:"rgba(249,115,22,0.25)"},Medium:{background:"rgba(234,179,8,0.12)",color:"#facc15",border:"rgba(234,179,8,0.25)"},Low:{background:"rgba(148,163,184,0.1)",color:"#94a3b8",border:"rgba(148,163,184,0.2)"}};function PriorityBadge({priority,style}){if(!priority||!PRIORITY_BADGE_STYLES[priority])return null;let colors=PRIORITY_BADGE_STYLES[priority];return(0,import_jsx_runtime3.jsx)("span",{style:{fontSize:9,fontWeight:700,letterSpacing:"0.04em",padding:"1px 5px",borderRadius:3,flexShrink:0,textTransform:"uppercase",background:colors.background,color:colors.color,border:`1px solid ${colors.border}`,lineHeight:"1.5",...style},children:priority})}var import_jsx_runtime4=__toESM(require_jsx_runtime(),1);var import_jsx_runtime5=__toESM(require_jsx_runtime(),1);var import_react6=__toESM(require_react(),1);var import_react4=__toESM(require_react(),1);var TASK_TYPES=[{value:"Task",icon:"\u2611",label:"Task",css:"type-task",tooltip:"A general task or feature to implement."},{value:"Bug",icon:"\u{1F41E}",label:"Bug",css:"type-bug",tooltip:"A defect \u2014 annotator collects page errors and console logs to help reproduce it."},{value:"Research",icon:"\u{1F52C}",label:"Research",css:"type-research",tooltip:"A research task \u2014 agent will NOT write code but must attach a findings report."}],TASK_TYPE_VALUES=TASK_TYPES.map(t=>t.value),TASK_TYPE_ICONS=Object.fromEntries(TASK_TYPES.map(t=>[t.value,t.icon])),TASK_TYPE_CSS=Object.fromEntries(TASK_TYPES.map(t=>[t.value,t.css])),TASK_TYPE_COLORS={Task:"#94a3b8",Bug:"#ef4444",Research:"#a855f7"};function getTaskTypeIcon(type){return TASK_TYPE_ICONS[type??"Task"]??"\u2611"}function getTaskTypeColor(type){return TASK_TYPE_COLORS[type??"Task"]??TASK_TYPE_COLORS.Task}var import_jsx_runtime6=__toESM(require_jsx_runtime(),1);function TypePicker({id,value,onChange,disabled}){let[open,setOpen]=import_react4.default.useState(!1),rootRef=import_react4.default.useRef(null),current=TASK_TYPES.find(t=>t.value===value)??TASK_TYPES[0];return import_react4.default.useEffect(()=>{let handler=e=>{var _a;(_a=rootRef.current)!=null&&_a.contains(e.target)||setOpen(!1)};return document.addEventListener("click",handler),()=>document.removeEventListener("click",handler)},[]),(0,import_jsx_runtime6.jsxs)("div",{id,ref:rootRef,style:{position:"relative",display:"inline-block"},children:[(0,import_jsx_runtime6.jsxs)("button",{type:"button",title:current==null?void 0:current.tooltip,onClick:e=>{e.preventDefault(),disabled||setOpen(o=>!o)},style:{display:"inline-flex",alignItems:"center",gap:5,padding:"3px 8px",borderRadius:6,border:"1px solid var(--p-border, rgba(255,255,255,0.08))",background:"var(--p-hover, rgba(255,255,255,0.05))",color:"var(--p-text-m, rgba(255,255,255,0.7))",fontSize:12,cursor:"pointer",whiteSpace:"nowrap"},children:[(0,import_jsx_runtime6.jsx)("span",{style:{fontSize:13},children:current==null?void 0:current.icon}),(0,import_jsx_runtime6.jsx)("span",{children:current==null?void 0:current.label})]}),open&&(0,import_jsx_runtime6.jsx)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:4,background:"var(--p-card, #1e293b)",border:"1px solid var(--p-border-s, rgba(255,255,255,0.12))",borderRadius:8,padding:"4px 0",zIndex:200,minWidth:140,boxShadow:"0 8px 24px rgba(0,0,0,0.4)"},children:TASK_TYPES.map(t=>(0,import_jsx_runtime6.jsxs)("button",{type:"button",title:t.tooltip,onClick:()=>{onChange(t.value),setOpen(!1)},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 12px",border:"none",background:t.value===value?"var(--p-hover, rgba(255,255,255,0.06))":"transparent",color:t.value===value?"var(--p-text, #fff)":"var(--p-text-f, rgba(255,255,255,0.55))",fontSize:12,cursor:"pointer",textAlign:"left"},children:[(0,import_jsx_runtime6.jsx)("span",{style:{fontSize:14,lineHeight:1},children:t.icon}),(0,import_jsx_runtime6.jsx)("span",{children:t.label})]},t.value))})]})}var import_react5=__toESM(require_react(),1);function splitTableCells(row){return row.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(cell=>cell.trim())}function isTableDivider(line){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(line)}function renderTables(markdown){let lines=markdown.split(`
1570
1601
  `),out=[],i=0;for(;i<lines.length;){let headerLine=lines[i]??"",dividerLine=lines[i+1]??"";if(headerLine.includes("|")&&isTableDivider(dividerLine)){let headerCells=splitTableCells(headerLine),bodyRows=[];for(i+=2;i<lines.length&&lines[i].includes("|")&&lines[i].trim()!=="";)bodyRows.push(splitTableCells(lines[i])),i+=1;let headHtml=`<tr>${headerCells.map(cell=>`<th style="text-align:left;padding:7px 10px;border:1px solid #334155;color:#e2e8f0;background:#0f172a;">${cell}</th>`).join("")}</tr>`,bodyHtml=bodyRows.map(row=>`<tr>${row.map(cell=>`<td style="padding:7px 10px;border:1px solid #334155;color:#cbd5e1;vertical-align:top;">${cell}</td>`).join("")}</tr>`).join("");out.push(`<div style="overflow-x:auto;margin:0.65em 0;"><table style="border-collapse:collapse;min-width:360px;width:100%;font-size:12px;"><thead>${headHtml}</thead><tbody>${bodyHtml}</tbody></table></div>`);continue}out.push(lines[i]),i+=1}return out.join(`
1571
- `)}function renderMarkdown(md){if(!md)return'<span style="color:#475569;font-style:italic;">No description yet</span>';let escaped=md.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");return renderTables(escaped).replace(/^### (.+)$/gm,'<h3 style="font-weight:700;margin:0.8em 0 0.3em;font-size:1.05em;color:#cbd5e1;">$1</h3>').replace(/^## (.+)$/gm,'<h2 style="font-weight:700;margin:0.8em 0 0.3em;font-size:1.2em;color:#f1f5f9;">$1</h2>').replace(/^# (.+)$/gm,'<h1 style="font-weight:700;margin:0.8em 0 0.3em;font-size:1.4em;color:#f1f5f9;">$1</h1>').replace(/[*][*]([^\n]+?)[*][*]/g,'<strong style="font-weight:700;color:#f1f5f9;">$1</strong>').replace(/__([^\n]+?)__/g,'<strong style="font-weight:700;color:#f1f5f9;">$1</strong>').replace(/[*]([^\n*]+?)[*]/g,'<em style="font-style:italic;color:#94a3b8;">$1</em>').replace(/(?<![a-zA-Z0-9])_([^_\n]+?)_(?![a-zA-Z0-9])/g,'<em style="font-style:italic;color:#94a3b8;">$1</em>').replace(/`(.+?)`/g,'<code style="font-family:Menlo,monospace;font-size:12px;background:#1e293b;padding:1px 5px;border-radius:3px;color:#7dd3fc;">$1</code>').replace(/\[([^\]]+)\]\((https?:\/\/[^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer" style="color:#60a5fa;text-decoration:underline;">$1</a>').replace(/(^|[\s(>])((https?:\/\/)[^\s<>"']+)/g,'$1<a href="$2" target="_blank" rel="noopener noreferrer" style="color:#60a5fa;text-decoration:underline;word-break:break-all;">$2</a>').replace(/(^|[^\w])#([a-f0-9]{30})(?![a-f0-9])/gi,'$1<a href="#task-$2" data-task-ref="$2" style="color:#60a5fa;text-decoration:underline;font-family:Menlo,monospace;">#$2</a>').replace(/^[-*] (.+)$/gm,'<li style="margin:0.2em 0;display:list-item;">$1</li>').replace(/^---$/gm,'<hr style="border:none;border-top:1px solid #334155;margin:0.8em 0;">').replace(/(<li[^>]*>[\s\S]*?<\/li>\n?)+/g,m=>`<ul style="padding-left:1.5em;margin:0.4em 0;list-style-type:disc;">${m}</ul>`).replace(/^(?!<[a-z]|$).+$/gm,line=>`<p style="margin:0.5em 0;">${line}</p>`)}var import_jsx_runtime7=__toESM(require_jsx_runtime(),1);function MarkdownPreview({markdown,className,style}){let rootRef=import_react5.default.useRef(null),cacheRef=import_react5.default.useRef({}),[hoverPreview,setHoverPreview]=import_react5.default.useState(null);return import_react5.default.useEffect(()=>{let root=rootRef.current;if(!root)return;function clearPreview(){setHoverPreview(null)}async function handleOver(ev){let target=ev.target,link=target==null?void 0:target.closest("a[data-task-ref]");if(!link){clearPreview();return}ev.preventDefault();let id=link.getAttribute("data-task-ref");if(!id)return;let rect=link.getBoundingClientRect(),cached=cacheRef.current[id];if(cached){setHoverPreview({id,title:cached.title,status:cached.status,x:rect.left,y:rect.bottom+6});return}try{let data=await(await fetch(`/api/tasks/${id}`)).json(),info={title:data.title??`Task ${id}`,status:data.status??"unknown"};cacheRef.current[id]=info,setHoverPreview({id,title:info.title,status:info.status,x:rect.left,y:rect.bottom+6})}catch{setHoverPreview({id,title:`Task ${id}`,status:"unknown",x:rect.left,y:rect.bottom+6})}}function handleRefClick(ev){var _a,_b;let link=(_b=(_a=ev.target)==null?void 0:_a.closest)==null?void 0:_b.call(_a,"a[data-task-ref]");if(!link)return;let refId=link.getAttribute("data-task-ref");refId&&window.dispatchEvent(new CustomEvent("vibeflow-task-ref-click",{detail:{refId}}))}return root.addEventListener("mouseover",handleOver),root.addEventListener("mouseleave",clearPreview),root.addEventListener("click",handleRefClick),()=>{root.removeEventListener("mouseover",handleOver),root.removeEventListener("mouseleave",clearPreview),root.removeEventListener("click",handleRefClick)}},[]),(0,import_jsx_runtime7.jsxs)("div",{style:{position:"relative"},children:[(0,import_jsx_runtime7.jsx)("div",{ref:rootRef,className,style,dangerouslySetInnerHTML:{__html:renderMarkdown(markdown)}}),hoverPreview&&(0,import_jsx_runtime7.jsxs)("div",{style:{position:"fixed",left:hoverPreview.x,top:hoverPreview.y,background:"#0f172a",border:"1px solid rgba(59,130,246,0.4)",color:"#e2e8f0",borderRadius:8,padding:"8px 10px",fontSize:11,boxShadow:"0 10px 24px rgba(2,6,23,0.55)",zIndex:60,pointerEvents:"none",minWidth:180},children:[(0,import_jsx_runtime7.jsxs)("div",{style:{color:"#60a5fa",fontFamily:"Menlo,monospace",marginBottom:3},children:["#",hoverPreview.id]}),(0,import_jsx_runtime7.jsx)("div",{style:{fontWeight:600,marginBottom:3},children:hoverPreview.title}),(0,import_jsx_runtime7.jsxs)("div",{style:{color:"#94a3b8"},children:["status: ",hoverPreview.status]})]})]})}var import_jsx_runtime8=__toESM(require_jsx_runtime(),1);var import_jsx_runtime9=__toESM(require_jsx_runtime(),1);var LS_SEEN_KEY="proto-comments-seen";function isNewComments(taskId,count){try{let raw=localStorage.getItem(LS_SEEN_KEY),seen=raw?JSON.parse(raw):{};return count>(seen[taskId]??0)}catch{return!1}}var KEY_DIGITS=16;var MAX_INT=BigInt("9".repeat(KEY_DIGITS));var import_react8=__toESM(require_react(),1);var import_react7=__toESM(require_react(),1),import_react_dom=__toESM(require_react_dom(),1);var TAG_PALETTE=[{bg:"color-mix(in srgb, var(--p-blue) 14%, transparent)",text:"var(--p-blue-200)",border:"color-mix(in srgb, var(--p-blue) 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-green) 14%, transparent)",text:"var(--p-green-300)",border:"color-mix(in srgb, var(--p-green) 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-purple) 14%, transparent)",text:"var(--p-purple-300)",border:"color-mix(in srgb, var(--p-purple) 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-amber) 14%, transparent)",text:"var(--p-amber-300)",border:"color-mix(in srgb, var(--p-amber) 30%, transparent)"},{bg:"color-mix(in srgb, #f472b6 14%, transparent)",text:"#f9a8d4",border:"color-mix(in srgb, #f472b6 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-cyan) 14%, transparent)",text:"var(--p-cyan-300)",border:"color-mix(in srgb, var(--p-cyan) 30%, transparent)"},{bg:"color-mix(in srgb, #f87171 14%, transparent)",text:"#fca5a5",border:"color-mix(in srgb, #f87171 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-text-g) 14%, transparent)",text:"var(--p-text-m)",border:"color-mix(in srgb, var(--p-text-g) 30%, transparent)"}];function hashTagName(name){let hash=0;for(let i=0;i<name.length;i++)hash=hash*31+name.charCodeAt(i)>>>0;return hash%TAG_PALETTE.length}function getTagColors(name){return TAG_PALETTE[hashTagName(name)]}var import_jsx_runtime10=__toESM(require_jsx_runtime(),1);function TagPills({tags,onRemove,size="sm"}){if(!tags.length)return null;let padding=size==="xs"?"1px 6px":"2px 7px",fontSize=size==="xs"?9:10;return(0,import_jsx_runtime10.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:3,alignItems:"center"},children:tags.map(tag=>{let{bg,text,border}=getTagColors(tag);return(0,import_jsx_runtime10.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,padding,borderRadius:100,background:bg,border:`1px solid ${border}`,color:text,fontSize,fontWeight:600,whiteSpace:"nowrap"},children:[tag,onRemove&&(0,import_jsx_runtime10.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),onRemove(tag)},style:{display:"flex",background:"none",border:"none",color:text,cursor:"pointer",padding:0,lineHeight:1,opacity:.7},onMouseEnter:e=>{e.currentTarget.style.opacity="1"},onMouseLeave:e=>{e.currentTarget.style.opacity="0.7"},children:"\xD7"})]},tag)})})}var import_jsx_runtime11=__toESM(require_jsx_runtime(),1);function isImageFileName(name){return/\.(png|jpe?g|gif|webp|svg|avif)$/i.test(name)}function withHexAlpha(hexColor,alpha){if(!/^#[0-9a-fA-F]{6}$/.test(hexColor))return;let normalized=Math.max(0,Math.min(1,alpha)),alphaHex=Math.round(normalized*255).toString(16).padStart(2,"0");return`${hexColor}${alphaHex}`}function resolveTaskCardBorderColor(statusColor,priority){return withHexAlpha(statusColor,priority==="Critical"?.36:priority==="High"?.3:.24)??"color-mix(in srgb, var(--p-text-g) 40%, transparent)"}function resolveTaskCardBgColor(typeColor){return withHexAlpha(typeColor,.05)??"transparent"}var DONE_ARTICLE_STYLE={padding:"7px 8px",gap:4,opacity:.45,userSelect:"none"},DONE_INNER_ROW_STYLE={display:"flex",alignItems:"center",gap:5},DONE_CHECK_ICON_STYLE={width:12,height:12,color:"color-mix(in srgb, var(--p-green) 55%, transparent)",flexShrink:0},DONE_TITLE_STYLE={fontSize:11.5,fontWeight:600,color:"var(--p-text-g)",textDecoration:"line-through",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flex:1},CARD_TITLE_ROW_STYLE={display:"flex",alignItems:"center",gap:5,minWidth:0},SPINNER_SHRINK_STYLE={flexShrink:0},CARD_TITLE_TEXT_STYLE={fontSize:11.5,fontWeight:600,color:"var(--p-text)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flex:1},DESC_THUMB_ROW_STYLE={display:"flex",alignItems:"flex-start",gap:8},DESC_TEXT_STYLE={fontSize:10,color:"var(--p-text-g)",lineHeight:"1.45",overflow:"hidden",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,flex:1,minWidth:0},THUMB_WRAPPER_STYLE={position:"relative",flexShrink:0},THUMB_IMG_STYLE={width:52,height:34,borderRadius:6,objectFit:"cover",border:"1px solid color-mix(in srgb, var(--p-border) 90%, transparent)",display:"block",cursor:"pointer"},CARD_FOOTER_STYLE={display:"flex",alignItems:"center",gap:2,marginTop:1},SPACER_STYLE={flex:1},TaskCard=import_react7.default.memo(function({task,col,liveActivity,onOpen,onDragStart,selectMode,selected,onToggleSelect,agentStatus,experimentalAgents,multiDragCount}){var _a;let isInProgress=col.id==="in-progress",isDone=col.id==="done",[showThumbPreview,setShowThumbPreview]=import_react7.default.useState(!1),[thumbRect,setThumbRect]=import_react7.default.useState(null),thumbRef=import_react7.default.useRef(null),commentCount=task.commentCount??0,fileCount=task.fileCount??0,hasNewComments=commentCount>0&&isNewComments(task.id,commentCount),cardBorderColor=resolveTaskCardBorderColor(col.color,task.priority),typeColor=getTaskTypeColor(task.type),cardBgColor=resolveTaskCardBgColor(typeColor),firstImage=(_a=task.files)==null?void 0:_a.find(f=>isImageFileName(f.name)),thumbnailUrl=firstImage?`/api/tasks/${task.id}/files/${encodeURIComponent(firstImage.name)}`:null;function handleDragStart(e){onDragStart(e,task.id),e.currentTarget.classList.add("dragging")}function handleDragEnd(e){e.currentTarget.classList.remove("dragging")}function handleClick(e){if(selectMode){e.stopPropagation(),onToggleSelect==null||onToggleSelect(task.id);return}onOpen(task)}function handleCheckboxClick(e){e.stopPropagation(),onToggleSelect==null||onToggleSelect(task.id)}let agentBorder=experimentalAgents===!0&&agentStatus==="running"?"1px solid rgba(59,130,246,0.5)":experimentalAgents===!0&&agentStatus==="queued"?"1px solid color-mix(in srgb, var(--p-amber) 45%, transparent)":experimentalAgents===!0&&agentStatus==="done"?"1px solid color-mix(in srgb, var(--p-green) 40%, transparent)":void 0,agentBg=experimentalAgents===!0&&agentStatus==="running"?"color-mix(in srgb, var(--p-blue) 6%, var(--p-card))":experimentalAgents===!0&&agentStatus==="queued"?"color-mix(in srgb, var(--p-amber) 5%, var(--p-card))":experimentalAgents===!0&&agentStatus==="done"?"color-mix(in srgb, var(--p-green) 5%, var(--p-card))":void 0;return isDone?(0,import_jsx_runtime11.jsx)("article",{className:"task-card",draggable:!0,"data-task-id":task.id,style:{...DONE_ARTICLE_STYLE,...selectMode&&selected?{borderColor:"var(--p-blue)",background:"color-mix(in srgb, var(--p-blue) 10%, var(--p-card))"}:{}},onDragStart:handleDragStart,onDragEnd:handleDragEnd,onClick:handleClick,children:(0,import_jsx_runtime11.jsxs)("div",{style:DONE_INNER_ROW_STYLE,children:[selectMode&&(0,import_jsx_runtime11.jsx)("span",{onClick:handleCheckboxClick,style:{width:12,height:12,borderRadius:3,border:selected?"1px solid var(--p-blue)":"1px solid var(--p-border-s)",background:selected?"var(--p-blue)":"var(--p-input)",flexShrink:0,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center"},children:selected&&(0,import_jsx_runtime11.jsx)("span",{style:{color:"#fff",fontSize:9,fontWeight:700},children:"\u2713"})}),(0,import_jsx_runtime11.jsx)(CircleCheckBig,{style:DONE_CHECK_ICON_STYLE}),(0,import_jsx_runtime11.jsx)("span",{style:DONE_TITLE_STYLE,children:task.title}),multiDragCount!=null&&(0,import_jsx_runtime11.jsxs)("span",{style:{fontSize:9,fontWeight:700,padding:"1px 5px",borderRadius:4,background:"var(--p-blue)",color:"#fff",flexShrink:0,marginLeft:4},children:["+",multiDragCount-1]})]})}):(0,import_jsx_runtime11.jsxs)("article",{className:`task-card${liveActivity?" task-live-edit":""}`,draggable:!0,"data-task-id":task.id,style:{padding:"7px 8px",gap:4,userSelect:"none",background:liveActivity?"rgba(59,130,246,0.08)":agentBg??cardBgColor,border:agentBorder??(liveActivity?"1px solid rgba(59,130,246,0.5)":cardBorderColor?`1px solid ${cardBorderColor}`:void 0),...liveActivity?{boxShadow:"0 0 0 2px rgba(59,130,246,0.14)"}:{},...selectMode&&selected?{borderColor:"var(--p-blue)",background:"color-mix(in srgb, var(--p-blue) 10%, var(--p-card))"}:{}},onDragStart:handleDragStart,onDragEnd:handleDragEnd,onClick:handleClick,children:[(0,import_jsx_runtime11.jsxs)("div",{style:CARD_TITLE_ROW_STYLE,children:[selectMode&&(0,import_jsx_runtime11.jsx)("span",{onClick:handleCheckboxClick,style:{width:14,height:14,borderRadius:3,border:selected?"1px solid var(--p-blue)":"1px solid var(--p-border-s)",background:selected?"var(--p-blue)":"var(--p-input)",flexShrink:0,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",marginRight:2},children:selected&&(0,import_jsx_runtime11.jsx)("span",{style:{color:"#fff",fontSize:9,fontWeight:700},children:"\u2713"})}),isInProgress&&(0,import_jsx_runtime11.jsx)("span",{className:"spinner",style:SPINNER_SHRINK_STYLE}),experimentalAgents===!0&&agentStatus==="running"&&!isInProgress&&(0,import_jsx_runtime11.jsx)("span",{className:"spinner",style:SPINNER_SHRINK_STYLE}),(0,import_jsx_runtime11.jsx)("span",{style:CARD_TITLE_TEXT_STYLE,children:task.title}),multiDragCount!=null&&(0,import_jsx_runtime11.jsxs)("span",{style:{fontSize:9,fontWeight:700,padding:"1px 5px",borderRadius:4,background:"var(--p-blue)",color:"#fff",flexShrink:0,marginLeft:4},children:["+",multiDragCount-1]})]}),(task.description||thumbnailUrl)&&(0,import_jsx_runtime11.jsxs)("div",{style:DESC_THUMB_ROW_STYLE,children:[task.description&&(0,import_jsx_runtime11.jsx)("div",{style:DESC_TEXT_STYLE,children:task.description}),thumbnailUrl&&(0,import_jsx_runtime11.jsxs)("div",{style:THUMB_WRAPPER_STYLE,onMouseEnter:()=>{if(thumbRef.current){let r=thumbRef.current.getBoundingClientRect();setThumbRect({top:r.top,right:r.right})}setShowThumbPreview(!0)},onMouseLeave:()=>{setShowThumbPreview(!1),setThumbRect(null)},children:[(0,import_jsx_runtime11.jsx)("img",{ref:thumbRef,src:thumbnailUrl,alt:"Task screenshot","data-role":"task-thumb",style:THUMB_IMG_STYLE}),showThumbPreview&&thumbRect&&import_react_dom.default.createPortal((0,import_jsx_runtime11.jsx)("img",{src:thumbnailUrl,alt:"Task screenshot enlarged preview","data-role":"task-thumb-preview",style:{position:"fixed",right:window.innerWidth-thumbRect.right,bottom:window.innerHeight-thumbRect.top+8,width:220,height:138,borderRadius:8,objectFit:"cover",border:"1px solid color-mix(in srgb, var(--p-border) 96%, transparent)",boxShadow:"0 10px 24px color-mix(in srgb, var(--p-bg) 75%, transparent)",pointerEvents:"none",zIndex:9999,background:"var(--p-bg)"}}),document.body)]})]}),(0,import_jsx_runtime11.jsxs)("div",{className:"flex items-center",style:CARD_FOOTER_STYLE,children:[(0,import_jsx_runtime11.jsx)(TypeBadge,{type:task.type}),task.priority&&(0,import_jsx_runtime11.jsx)(PriorityBadge,{priority:task.priority}),experimentalAgents===!0&&agentStatus==="running"&&(0,import_jsx_runtime11.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(59,130,246,0.12)",color:"#60a5fa",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:90},children:[(0,import_jsx_runtime11.jsx)("span",{className:"spinner",style:{width:8,height:8,borderWidth:1.5}}),"Agent"]}),experimentalAgents===!0&&agentStatus==="queued"&&(0,import_jsx_runtime11.jsx)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(245,158,11,0.12)",color:"var(--p-amber)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:90},children:"\u23F3 Queued"}),experimentalAgents===!0&&agentStatus==="done"&&(0,import_jsx_runtime11.jsx)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(34,197,94,0.12)",color:"var(--p-green)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:90},children:"\u2713 Done"}),experimentalAgents===!0&&!agentStatus&&task.agent&&(0,import_jsx_runtime11.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(139,92,246,0.12)",color:"#a78bfa",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:90},title:`Agent: ${task.agent}`,children:[(0,import_jsx_runtime11.jsx)(Bot,{style:{width:8,height:8,flexShrink:0}}),"Agent"]}),isInProgress&&task.assigneeName&&(0,import_jsx_runtime11.jsx)("span",{style:{fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(59,130,246,0.12)",color:"#60a5fa",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:80},children:task.assigneeName}),task.tags&&task.tags.length>0&&(0,import_jsx_runtime11.jsx)(TagPills,{tags:task.tags,size:"xs"}),(0,import_jsx_runtime11.jsx)("div",{style:SPACER_STYLE}),liveActivity&&(0,import_jsx_runtime11.jsx)(LiveActivityBadge,{activity:liveActivity}),(0,import_jsx_runtime11.jsx)(CardIconButton,{icon:(0,import_jsx_runtime11.jsx)(MessageCircle,{style:{width:9,height:9}}),label:commentCount>0?String(commentCount):"",color:hasNewComments?"var(--p-purple)":commentCount>0?"var(--p-text-m)":"var(--p-border-t)",hoverColor:hasNewComments?"var(--p-purple-300)":"var(--p-text)",title:commentCount>0?`${commentCount} comment(s)`:"Add comment",badge:hasNewComments,badgeColor:"var(--p-purple)",onClick:e=>{e.stopPropagation(),onOpen(task,"comments")}}),(0,import_jsx_runtime11.jsx)(CardIconButton,{icon:(0,import_jsx_runtime11.jsx)(Paperclip,{style:{width:9,height:9}}),label:fileCount>0?String(fileCount):"",color:fileCount>0?"var(--p-blue-300)":"var(--p-border-t)",hoverColor:fileCount>0?"var(--p-cyan-300)":"var(--p-text-sub)",title:fileCount>0?`${fileCount} file(s) attached`:"Files",onClick:e=>{e.stopPropagation(),onOpen(task,"files")}})]})]})});function CardIconButton({icon,label,color,hoverColor,title,badge,badgeColor,onClick}){let[hovered,setHovered]=import_react7.default.useState(!1);return(0,import_jsx_runtime11.jsxs)("button",{style:{display:"inline-flex",alignItems:"center",gap:2,padding:"2px 3px",borderRadius:3,border:"none",background:hovered?"color-mix(in srgb, var(--p-text-m) 10%, transparent)":"transparent",cursor:"pointer",fontSize:9,color:hovered?hoverColor:color,transition:"color .1s, background .1s"},title,onMouseEnter:()=>setHovered(!0),onMouseLeave:()=>setHovered(!1),onClick,children:[icon,label&&(0,import_jsx_runtime11.jsx)("span",{children:label}),badge&&(0,import_jsx_runtime11.jsx)("span",{style:{width:4,height:4,background:badgeColor??color,borderRadius:"50%",flexShrink:0}})]})}function LiveActivityBadge({activity}){let isLocked=activity.state==="locked"||activity.state==="editing",icon=isLocked?(0,import_jsx_runtime11.jsx)(Lock,{style:{width:8,height:8}}):(0,import_jsx_runtime11.jsx)(Eye,{style:{width:8,height:8}}),label=isLocked?`Locked by ${activity.user}`:`${activity.user} viewing`;return(0,import_jsx_runtime11.jsxs)("span",{style:isLocked?{display:"inline-flex",alignItems:"center",gap:3,borderRadius:999,padding:"1px 5px",fontSize:9,fontWeight:600,border:"1px solid rgba(244,114,182,0.35)",color:"#f9a8d4",background:"rgba(157,23,77,0.28)",flexShrink:0,maxWidth:110,overflow:"hidden",whiteSpace:"nowrap",flexWrap:"nowrap"}:{display:"inline-flex",alignItems:"center",gap:3,borderRadius:999,padding:"1px 5px",fontSize:9,fontWeight:600,border:"1px solid rgba(59,130,246,0.35)",color:"#93c5fd",background:"rgba(30,58,138,0.28)",flexShrink:0,maxWidth:110,overflow:"hidden",whiteSpace:"nowrap",flexWrap:"nowrap"},title:label,"data-testid":"live-activity-badge",children:[icon,(0,import_jsx_runtime11.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",minWidth:0,flex:"1 1 0"},children:activity.user})]})}var import_jsx_runtime12=__toESM(require_jsx_runtime(),1);var import_react9=__toESM(require_react(),1);var import_jsx_runtime13=__toESM(require_jsx_runtime(),1);var import_react10=__toESM(require_react(),1);var import_jsx_runtime14=__toESM(require_jsx_runtime(),1);var import_jsx_runtime15=__toESM(require_jsx_runtime(),1);var import_react20=__toESM(require_react(),1);var import_react14=__toESM(require_react(),1);var import_react11=__toESM(require_react(),1),import_jsx_runtime16=__toESM(require_jsx_runtime(),1),AutoExpandTextarea=import_react11.default.forwardRef(function({value,onChange,baseRows=4,maxRows,style,...rest},forwardedRef){let localRef=import_react11.default.useRef(null),resolvedMaxRows=maxRows??baseRows*2,resize=import_react11.default.useCallback(()=>{let el2=localRef.current;if(!el2)return;el2.style.height="auto";let computed=window.getComputedStyle(el2),lineHeight=Number.parseFloat(computed.lineHeight||"0")||18,verticalPadding=Number.parseFloat(computed.paddingTop||"0")+Number.parseFloat(computed.paddingBottom||"0"),border=Number.parseFloat(computed.borderTopWidth||"0")+Number.parseFloat(computed.borderBottomWidth||"0"),minHeight=baseRows*lineHeight+verticalPadding+border,maxHeight=resolvedMaxRows*lineHeight+verticalPadding+border,target=Math.max(minHeight,Math.min(el2.scrollHeight,maxHeight));el2.style.height=`${target}px`,el2.style.overflowY=el2.scrollHeight>maxHeight?"auto":"hidden"},[baseRows,resolvedMaxRows]);return import_react11.default.useLayoutEffect(()=>{resize()},[value,resize]),(0,import_jsx_runtime16.jsx)("textarea",{...rest,ref:el2=>{localRef.current=el2,typeof forwardedRef=="function"?forwardedRef(el2):forwardedRef&&(forwardedRef.current=el2)},rows:baseRows,value,onChange:e=>onChange(e.target.value),style:{...style,resize:"none"}})});var import_react13=__toESM(require_react(),1);var import_react12=__toESM(require_react(),1),import_react_dom2=__toESM(require_react_dom(),1),import_jsx_runtime17=__toESM(require_jsx_runtime(),1);var import_jsx_runtime18=__toESM(require_jsx_runtime(),1);var import_jsx_runtime19=__toESM(require_jsx_runtime(),1);var import_jsx_runtime20=__toESM(require_jsx_runtime(),1);var import_react15=__toESM(require_react(),1);var import_jsx_runtime21=__toESM(require_jsx_runtime(),1);var import_react18=__toESM(require_react(),1);var import_react16=__toESM(require_react(),1),import_react_dom3=__toESM(require_react_dom(),1);var import_jsx_runtime22=__toESM(require_jsx_runtime(),1);var import_react17=__toESM(require_react(),1);var import_jsx_runtime23=__toESM(require_jsx_runtime(),1);var import_jsx_runtime24=__toESM(require_jsx_runtime(),1);var import_jsx_runtime25=__toESM(require_jsx_runtime(),1);var import_react19=__toESM(require_react(),1),import_react_dom4=__toESM(require_react_dom(),1);var import_jsx_runtime26=__toESM(require_jsx_runtime(),1);var import_jsx_runtime27=__toESM(require_jsx_runtime(),1);var MAX_UPLOAD_BYTES=5*1024*1024;var import_react21=__toESM(require_react(),1);var import_jsx_runtime28=__toESM(require_jsx_runtime(),1);var import_react22=__toESM(require_react(),1);var import_jsx_runtime29=__toESM(require_jsx_runtime(),1);var import_react23=__toESM(require_react(),1);var import_jsx_runtime30=__toESM(require_jsx_runtime(),1);var import_react24=__toESM(require_react(),1);var import_jsx_runtime31=__toESM(require_jsx_runtime(),1);var IGNORED_PATTERNS=[/Error evaluating Node\.js code/i,/nextjs-portal/i],buffer=[],recording=!1;function addEntry(level,args){let message=args.map(a=>{if(typeof a=="string")return a;if(a instanceof Error)return a.message;try{return JSON.stringify(a)}catch{return String(a)}}).join(" ").slice(0,500);!message||IGNORED_PATTERNS.some(pattern=>pattern.test(message))||(buffer.push({level,message,timestamp:new Date().toISOString()}),buffer.length>50&&buffer.splice(0,buffer.length-50))}function startRecording(){if(recording)return;recording=!0;let origError=console.error.bind(console);console.error=(...args)=>{addEntry("error",args),origError(...args)};let origWarn=console.warn.bind(console);console.warn=(...args)=>{addEntry("warn",args),origWarn(...args)},window.addEventListener("error",e=>{let loc=e.filename?` (${e.filename.split("/").pop()}:${e.lineno})`:"";addEntry("error",[`${e.message}${loc}`])}),window.addEventListener("unhandledrejection",e=>{let msg=e.reason instanceof Error?e.reason.message:String(e.reason??"Unhandled promise rejection");addEntry("error",[`Unhandled rejection: ${msg}`])})}function getRecordedLogs(){if(buffer.length===0)return"";let lines=buffer.map(e=>{let icon=e.level==="error"?"\u{1F534}":"\u{1F7E1}",time=e.timestamp.slice(11,19);return`- ${icon} \`${time}\` ${e.message}`});return`
1602
+ `)}function renderMarkdown(md){if(!md)return'<span style="color:#475569;font-style:italic;">No description yet</span>';let escaped=md.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");return renderTables(escaped).replace(/^### (.+)$/gm,'<h3 style="font-weight:700;margin:0.8em 0 0.3em;font-size:1.05em;color:#cbd5e1;">$1</h3>').replace(/^## (.+)$/gm,'<h2 style="font-weight:700;margin:0.8em 0 0.3em;font-size:1.2em;color:#f1f5f9;">$1</h2>').replace(/^# (.+)$/gm,'<h1 style="font-weight:700;margin:0.8em 0 0.3em;font-size:1.4em;color:#f1f5f9;">$1</h1>').replace(/[*][*]([^\n]+?)[*][*]/g,'<strong style="font-weight:700;color:#f1f5f9;">$1</strong>').replace(/__([^\n]+?)__/g,'<strong style="font-weight:700;color:#f1f5f9;">$1</strong>').replace(/[*]([^\n*]+?)[*]/g,'<em style="font-style:italic;color:#94a3b8;">$1</em>').replace(/(?<![a-zA-Z0-9])_([^_\n]+?)_(?![a-zA-Z0-9])/g,'<em style="font-style:italic;color:#94a3b8;">$1</em>').replace(/`(.+?)`/g,'<code style="font-family:Menlo,monospace;font-size:12px;background:#1e293b;padding:1px 5px;border-radius:3px;color:#7dd3fc;">$1</code>').replace(/\[([^\]]+)\]\((https?:\/\/[^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer" style="color:#60a5fa;text-decoration:underline;">$1</a>').replace(/(^|[\s(>])((https?:\/\/)[^\s<>"']+)/g,'$1<a href="$2" target="_blank" rel="noopener noreferrer" style="color:#60a5fa;text-decoration:underline;word-break:break-all;">$2</a>').replace(/(^|[^\w])#([a-f0-9]{30})(?![a-f0-9])/gi,'$1<a href="#task-$2" data-task-ref="$2" style="color:#60a5fa;text-decoration:underline;font-family:Menlo,monospace;">#$2</a>').replace(/^[-*] (.+)$/gm,'<li style="margin:0.2em 0;display:list-item;">$1</li>').replace(/^---$/gm,'<hr style="border:none;border-top:1px solid #334155;margin:0.8em 0;">').replace(/(<li[^>]*>[\s\S]*?<\/li>\n?)+/g,m=>`<ul style="padding-left:1.5em;margin:0.4em 0;list-style-type:disc;">${m}</ul>`).replace(/^(?!<[a-z]|$).+$/gm,line=>`<p style="margin:0.5em 0;">${line}</p>`)}var import_jsx_runtime7=__toESM(require_jsx_runtime(),1);function MarkdownPreview({markdown,className,style}){let rootRef=import_react5.default.useRef(null),cacheRef=import_react5.default.useRef({}),[hoverPreview,setHoverPreview]=import_react5.default.useState(null);return import_react5.default.useEffect(()=>{let root=rootRef.current;if(!root)return;function clearPreview(){setHoverPreview(null)}async function handleOver(ev){let target=ev.target,link=target==null?void 0:target.closest("a[data-task-ref]");if(!link){clearPreview();return}ev.preventDefault();let id=link.getAttribute("data-task-ref");if(!id)return;let rect=link.getBoundingClientRect(),cached=cacheRef.current[id];if(cached){setHoverPreview({id,title:cached.title,status:cached.status,x:rect.left,y:rect.bottom+6});return}try{let data=await(await fetch(`/api/tasks/${id}`)).json(),info={title:data.title??`Task ${id}`,status:data.status??"unknown"};cacheRef.current[id]=info,setHoverPreview({id,title:info.title,status:info.status,x:rect.left,y:rect.bottom+6})}catch{setHoverPreview({id,title:`Task ${id}`,status:"unknown",x:rect.left,y:rect.bottom+6})}}function handleRefClick(ev){var _a,_b;let link=(_b=(_a=ev.target)==null?void 0:_a.closest)==null?void 0:_b.call(_a,"a[data-task-ref]");if(!link)return;let refId=link.getAttribute("data-task-ref");refId&&window.dispatchEvent(new CustomEvent("vibeflow-task-ref-click",{detail:{refId}}))}return root.addEventListener("mouseover",handleOver),root.addEventListener("mouseleave",clearPreview),root.addEventListener("click",handleRefClick),()=>{root.removeEventListener("mouseover",handleOver),root.removeEventListener("mouseleave",clearPreview),root.removeEventListener("click",handleRefClick)}},[]),(0,import_jsx_runtime7.jsxs)("div",{style:{position:"relative"},children:[(0,import_jsx_runtime7.jsx)("div",{ref:rootRef,className,style,dangerouslySetInnerHTML:{__html:renderMarkdown(markdown)}}),hoverPreview&&(0,import_jsx_runtime7.jsxs)("div",{style:{position:"fixed",left:hoverPreview.x,top:hoverPreview.y,background:"#0f172a",border:"1px solid rgba(59,130,246,0.4)",color:"#e2e8f0",borderRadius:8,padding:"8px 10px",fontSize:11,boxShadow:"0 10px 24px rgba(2,6,23,0.55)",zIndex:60,pointerEvents:"none",minWidth:180},children:[(0,import_jsx_runtime7.jsxs)("div",{style:{color:"#60a5fa",fontFamily:"Menlo,monospace",marginBottom:3},children:["#",hoverPreview.id]}),(0,import_jsx_runtime7.jsx)("div",{style:{fontWeight:600,marginBottom:3},children:hoverPreview.title}),(0,import_jsx_runtime7.jsxs)("div",{style:{color:"#94a3b8"},children:["status: ",hoverPreview.status]})]})]})}var import_jsx_runtime8=__toESM(require_jsx_runtime(),1);var import_jsx_runtime9=__toESM(require_jsx_runtime(),1);var LS_SEEN_KEY="proto-comments-seen";function isNewComments(taskId,count){try{let raw=localStorage.getItem(LS_SEEN_KEY),seen=raw?JSON.parse(raw):{};return count>(seen[taskId]??0)}catch{return!1}}var KEY_DIGITS=16;var MAX_INT=BigInt("9".repeat(KEY_DIGITS));var import_react8=__toESM(require_react(),1);var import_react7=__toESM(require_react(),1),import_react_dom=__toESM(require_react_dom(),1);var TAG_PALETTE=[{bg:"color-mix(in srgb, var(--p-blue) 14%, transparent)",text:"var(--p-blue-200)",border:"color-mix(in srgb, var(--p-blue) 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-green) 14%, transparent)",text:"var(--p-green-300)",border:"color-mix(in srgb, var(--p-green) 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-purple) 14%, transparent)",text:"var(--p-purple-300)",border:"color-mix(in srgb, var(--p-purple) 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-amber) 14%, transparent)",text:"var(--p-amber-300)",border:"color-mix(in srgb, var(--p-amber) 30%, transparent)"},{bg:"color-mix(in srgb, #f472b6 14%, transparent)",text:"#f9a8d4",border:"color-mix(in srgb, #f472b6 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-cyan) 14%, transparent)",text:"var(--p-cyan-300)",border:"color-mix(in srgb, var(--p-cyan) 30%, transparent)"},{bg:"color-mix(in srgb, #f87171 14%, transparent)",text:"#fca5a5",border:"color-mix(in srgb, #f87171 30%, transparent)"},{bg:"color-mix(in srgb, var(--p-text-g) 14%, transparent)",text:"var(--p-text-m)",border:"color-mix(in srgb, var(--p-text-g) 30%, transparent)"}];function hashTagName(name){let hash=0;for(let i=0;i<name.length;i++)hash=hash*31+name.charCodeAt(i)>>>0;return hash%TAG_PALETTE.length}function getTagColors(name){return TAG_PALETTE[hashTagName(name)]}var import_jsx_runtime10=__toESM(require_jsx_runtime(),1);function TagPills({tags,onRemove,size="sm"}){if(!tags.length)return null;let padding=size==="xs"?"1px 6px":"2px 7px",fontSize=size==="xs"?9:10;return(0,import_jsx_runtime10.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:3,alignItems:"center"},children:tags.map(tag=>{let{bg,text,border}=getTagColors(tag);return(0,import_jsx_runtime10.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,padding,borderRadius:100,background:bg,border:`1px solid ${border}`,color:text,fontSize,fontWeight:600,whiteSpace:"nowrap"},children:[tag,onRemove&&(0,import_jsx_runtime10.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),onRemove(tag)},style:{display:"flex",background:"none",border:"none",color:text,cursor:"pointer",padding:0,lineHeight:1,opacity:.7},onMouseEnter:e=>{e.currentTarget.style.opacity="1"},onMouseLeave:e=>{e.currentTarget.style.opacity="0.7"},children:"\xD7"})]},tag)})})}var import_jsx_runtime11=__toESM(require_jsx_runtime(),1);function isImageFileName(name){return/\.(png|jpe?g|gif|webp|svg|avif)$/i.test(name)}function withHexAlpha(hexColor,alpha){if(!/^#[0-9a-fA-F]{6}$/.test(hexColor))return;let normalized=Math.max(0,Math.min(1,alpha)),alphaHex=Math.round(normalized*255).toString(16).padStart(2,"0");return`${hexColor}${alphaHex}`}function resolveTaskCardBorderColor(statusColor,priority){return withHexAlpha(statusColor,priority==="Critical"?.36:priority==="High"?.3:.24)??"color-mix(in srgb, var(--p-text-g) 40%, transparent)"}function resolveTaskCardBgColor(typeColor){return withHexAlpha(typeColor,.05)??"transparent"}var DONE_ARTICLE_STYLE={padding:"7px 8px",gap:4,opacity:.45,userSelect:"none"},DONE_INNER_ROW_STYLE={display:"flex",alignItems:"center",gap:5},DONE_CHECK_ICON_STYLE={width:12,height:12,color:"color-mix(in srgb, var(--p-green) 55%, transparent)",flexShrink:0},DONE_TITLE_STYLE={fontSize:11.5,fontWeight:600,color:"var(--p-text-g)",textDecoration:"line-through",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flex:1},CARD_TITLE_ROW_STYLE={display:"flex",alignItems:"center",gap:5,minWidth:0},SPINNER_SHRINK_STYLE={flexShrink:0},CARD_TITLE_TEXT_STYLE={fontSize:11.5,fontWeight:600,color:"var(--p-text)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flex:1},DESC_THUMB_ROW_STYLE={display:"flex",alignItems:"flex-start",gap:8},DESC_TEXT_STYLE={fontSize:10,color:"var(--p-text-g)",lineHeight:"1.45",overflow:"hidden",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,flex:1,minWidth:0},THUMB_WRAPPER_STYLE={position:"relative",flexShrink:0},THUMB_IMG_STYLE={width:52,height:34,borderRadius:6,objectFit:"cover",border:"1px solid color-mix(in srgb, var(--p-border) 90%, transparent)",display:"block",cursor:"pointer"},CARD_FOOTER_STYLE={display:"flex",alignItems:"center",gap:2,marginTop:1},SPACER_STYLE={flex:1},TaskCard=import_react7.default.memo(function({task,col,liveActivity,onOpen,onDragStart,selectMode,selected,onToggleSelect,agentStatus,experimentalAgents,multiDragCount,onEnterSelectMode}){var _a;let isInProgress=col.id==="in-progress",isDone=col.id==="done",[showThumbPreview,setShowThumbPreview]=import_react7.default.useState(!1),[thumbRect,setThumbRect]=import_react7.default.useState(null),thumbRef=import_react7.default.useRef(null),longPressTimerRef=import_react7.default.useRef(null),longPressActivatedRef=import_react7.default.useRef(!1),commentCount=task.commentCount??0,fileCount=task.fileCount??0,hasNewComments=commentCount>0&&isNewComments(task.id,commentCount),cardBorderColor=resolveTaskCardBorderColor(col.color,task.priority),typeColor=getTaskTypeColor(task.type),cardBgColor=resolveTaskCardBgColor(typeColor),firstImage=(_a=task.files)==null?void 0:_a.find(f=>isImageFileName(f.name)),thumbnailUrl=firstImage?`/api/tasks/${task.id}/files/${encodeURIComponent(firstImage.name)}`:null;function handleDragStart(e){onDragStart(e,task.id),e.currentTarget.classList.add("dragging")}function handleDragEnd(e){e.currentTarget.classList.remove("dragging")}function handleMouseDown(){selectMode||(longPressActivatedRef.current=!1,longPressTimerRef.current=setTimeout(()=>{longPressActivatedRef.current=!0,onEnterSelectMode==null||onEnterSelectMode(task.id)},300))}function handleMouseUp(){longPressTimerRef.current&&(clearTimeout(longPressTimerRef.current),longPressTimerRef.current=null)}function handleMouseLeave(){longPressTimerRef.current&&(clearTimeout(longPressTimerRef.current),longPressTimerRef.current=null)}function handleClick(e){if(longPressActivatedRef.current){longPressActivatedRef.current=!1;return}if(selectMode){e.stopPropagation(),onToggleSelect==null||onToggleSelect(task.id);return}onOpen(task)}function handleCheckboxClick(e){e.stopPropagation(),onToggleSelect==null||onToggleSelect(task.id)}let agentBorder=experimentalAgents===!0&&agentStatus==="running"?"1px solid rgba(59,130,246,0.5)":experimentalAgents===!0&&agentStatus==="queued"?"1px solid color-mix(in srgb, var(--p-amber) 45%, transparent)":experimentalAgents===!0&&agentStatus==="done"?"1px solid color-mix(in srgb, var(--p-green) 40%, transparent)":void 0,agentBg=experimentalAgents===!0&&agentStatus==="running"?"color-mix(in srgb, var(--p-blue) 6%, var(--p-card))":experimentalAgents===!0&&agentStatus==="queued"?"color-mix(in srgb, var(--p-amber) 5%, var(--p-card))":experimentalAgents===!0&&agentStatus==="done"?"color-mix(in srgb, var(--p-green) 5%, var(--p-card))":void 0;return isDone?(0,import_jsx_runtime11.jsx)("article",{className:"task-card",draggable:!0,"data-task-id":task.id,style:{...DONE_ARTICLE_STYLE,...selectMode&&selected?{borderColor:"var(--p-blue)",background:"color-mix(in srgb, var(--p-blue) 10%, var(--p-card))"}:{}},onDragStart:handleDragStart,onDragEnd:handleDragEnd,onMouseDown:handleMouseDown,onMouseUp:handleMouseUp,onMouseLeave:handleMouseLeave,onClick:handleClick,children:(0,import_jsx_runtime11.jsxs)("div",{style:DONE_INNER_ROW_STYLE,children:[selectMode&&(0,import_jsx_runtime11.jsx)("span",{onClick:handleCheckboxClick,style:{width:12,height:12,borderRadius:3,border:selected?"1px solid var(--p-blue)":"1px solid var(--p-border-s)",background:selected?"var(--p-blue)":"var(--p-input)",flexShrink:0,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center"},children:selected&&(0,import_jsx_runtime11.jsx)("span",{style:{color:"#fff",fontSize:9,fontWeight:700},children:"\u2713"})}),(0,import_jsx_runtime11.jsx)(CircleCheckBig,{style:DONE_CHECK_ICON_STYLE}),(0,import_jsx_runtime11.jsx)("span",{style:DONE_TITLE_STYLE,children:task.title}),multiDragCount!=null&&(0,import_jsx_runtime11.jsxs)("span",{style:{fontSize:9,fontWeight:700,padding:"1px 5px",borderRadius:4,background:"var(--p-blue)",color:"#fff",flexShrink:0,marginLeft:4},children:["+",multiDragCount-1]})]})}):(0,import_jsx_runtime11.jsxs)("article",{className:`task-card${liveActivity?" task-live-edit":""}`,draggable:!0,"data-task-id":task.id,style:{padding:"7px 8px",gap:4,userSelect:"none",background:liveActivity?"rgba(59,130,246,0.08)":agentBg??cardBgColor,border:agentBorder??(liveActivity?"1px solid rgba(59,130,246,0.5)":cardBorderColor?`1px solid ${cardBorderColor}`:void 0),...liveActivity?{boxShadow:"0 0 0 2px rgba(59,130,246,0.14)"}:{},...selectMode&&selected?{borderColor:"var(--p-blue)",background:"color-mix(in srgb, var(--p-blue) 10%, var(--p-card))"}:{}},onDragStart:handleDragStart,onDragEnd:handleDragEnd,onMouseDown:handleMouseDown,onMouseUp:handleMouseUp,onMouseLeave:handleMouseLeave,onClick:handleClick,children:[(0,import_jsx_runtime11.jsxs)("div",{style:CARD_TITLE_ROW_STYLE,children:[selectMode&&(0,import_jsx_runtime11.jsx)("span",{onClick:handleCheckboxClick,style:{width:14,height:14,borderRadius:3,border:selected?"1px solid var(--p-blue)":"1px solid var(--p-border-s)",background:selected?"var(--p-blue)":"var(--p-input)",flexShrink:0,cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center",marginRight:2},children:selected&&(0,import_jsx_runtime11.jsx)("span",{style:{color:"#fff",fontSize:9,fontWeight:700},children:"\u2713"})}),isInProgress&&(0,import_jsx_runtime11.jsx)("span",{className:"spinner",style:SPINNER_SHRINK_STYLE}),experimentalAgents===!0&&agentStatus==="running"&&!isInProgress&&(0,import_jsx_runtime11.jsx)("span",{className:"spinner",style:SPINNER_SHRINK_STYLE}),(0,import_jsx_runtime11.jsx)("span",{style:CARD_TITLE_TEXT_STYLE,children:task.title}),multiDragCount!=null&&(0,import_jsx_runtime11.jsxs)("span",{style:{fontSize:9,fontWeight:700,padding:"1px 5px",borderRadius:4,background:"var(--p-blue)",color:"#fff",flexShrink:0,marginLeft:4},children:["+",multiDragCount-1]})]}),(task.description||thumbnailUrl)&&(0,import_jsx_runtime11.jsxs)("div",{style:DESC_THUMB_ROW_STYLE,children:[task.description&&(0,import_jsx_runtime11.jsx)("div",{style:DESC_TEXT_STYLE,children:task.description}),thumbnailUrl&&(0,import_jsx_runtime11.jsxs)("div",{style:THUMB_WRAPPER_STYLE,onMouseEnter:()=>{if(thumbRef.current){let r=thumbRef.current.getBoundingClientRect();setThumbRect({top:r.top,right:r.right})}setShowThumbPreview(!0)},onMouseLeave:()=>{setShowThumbPreview(!1),setThumbRect(null)},children:[(0,import_jsx_runtime11.jsx)("img",{ref:thumbRef,src:thumbnailUrl,alt:"Task screenshot","data-role":"task-thumb",style:THUMB_IMG_STYLE}),showThumbPreview&&thumbRect&&import_react_dom.default.createPortal((0,import_jsx_runtime11.jsx)("img",{src:thumbnailUrl,alt:"Task screenshot enlarged preview","data-role":"task-thumb-preview",style:{position:"fixed",right:window.innerWidth-thumbRect.right,bottom:window.innerHeight-thumbRect.top+8,width:220,height:138,borderRadius:8,objectFit:"cover",border:"1px solid color-mix(in srgb, var(--p-border) 96%, transparent)",boxShadow:"0 10px 24px color-mix(in srgb, var(--p-bg) 75%, transparent)",pointerEvents:"none",zIndex:9999,background:"var(--p-bg)"}}),document.body)]})]}),(0,import_jsx_runtime11.jsxs)("div",{className:"flex items-center",style:CARD_FOOTER_STYLE,children:[(0,import_jsx_runtime11.jsx)(TypeBadge,{type:task.type}),task.priority&&(0,import_jsx_runtime11.jsx)(PriorityBadge,{priority:task.priority}),experimentalAgents===!0&&agentStatus==="running"&&(0,import_jsx_runtime11.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(59,130,246,0.12)",color:"#60a5fa",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:90},children:[(0,import_jsx_runtime11.jsx)("span",{className:"spinner",style:{width:8,height:8,borderWidth:1.5}}),"Agent"]}),experimentalAgents===!0&&agentStatus==="queued"&&(0,import_jsx_runtime11.jsx)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(245,158,11,0.12)",color:"var(--p-amber)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:90},children:"\u23F3 Queued"}),experimentalAgents===!0&&agentStatus==="done"&&(0,import_jsx_runtime11.jsx)("span",{style:{display:"inline-flex",alignItems:"center",gap:3,fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(34,197,94,0.12)",color:"var(--p-green)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:90},children:"\u2713 Done"}),isInProgress&&task.assigneeName&&(0,import_jsx_runtime11.jsx)("span",{style:{fontSize:10,fontWeight:600,padding:"1px 6px",borderRadius:6,background:"rgba(59,130,246,0.12)",color:"#60a5fa",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:80},children:task.assigneeName}),task.tags&&task.tags.length>0&&(0,import_jsx_runtime11.jsx)(TagPills,{tags:task.tags,size:"xs"}),(0,import_jsx_runtime11.jsx)("div",{style:SPACER_STYLE}),liveActivity&&(0,import_jsx_runtime11.jsx)(LiveActivityBadge,{activity:liveActivity}),(0,import_jsx_runtime11.jsx)(CardIconButton,{icon:(0,import_jsx_runtime11.jsx)(MessageCircle,{style:{width:9,height:9}}),label:commentCount>0?String(commentCount):"",color:hasNewComments?"var(--p-purple)":commentCount>0?"var(--p-text-m)":"var(--p-border-t)",hoverColor:hasNewComments?"var(--p-purple-300)":"var(--p-text)",title:commentCount>0?`${commentCount} comment(s)`:"Add comment",badge:hasNewComments,badgeColor:"var(--p-purple)",onClick:e=>{e.stopPropagation(),onOpen(task,"comments")}}),(0,import_jsx_runtime11.jsx)(CardIconButton,{icon:(0,import_jsx_runtime11.jsx)(Paperclip,{style:{width:9,height:9}}),label:fileCount>0?String(fileCount):"",color:fileCount>0?"var(--p-blue-300)":"var(--p-border-t)",hoverColor:fileCount>0?"var(--p-cyan-300)":"var(--p-text-sub)",title:fileCount>0?`${fileCount} file(s) attached`:"Files",onClick:e=>{e.stopPropagation(),onOpen(task,"files")}})]})]})});function CardIconButton({icon,label,color,hoverColor,title,badge,badgeColor,onClick}){let[hovered,setHovered]=import_react7.default.useState(!1);return(0,import_jsx_runtime11.jsxs)("button",{style:{display:"inline-flex",alignItems:"center",gap:2,padding:"2px 3px",borderRadius:3,border:"none",background:hovered?"color-mix(in srgb, var(--p-text-m) 10%, transparent)":"transparent",cursor:"pointer",fontSize:9,color:hovered?hoverColor:color,transition:"color .1s, background .1s"},title,onMouseEnter:()=>setHovered(!0),onMouseLeave:()=>setHovered(!1),onClick,children:[icon,label&&(0,import_jsx_runtime11.jsx)("span",{children:label}),badge&&(0,import_jsx_runtime11.jsx)("span",{style:{width:4,height:4,background:badgeColor??color,borderRadius:"50%",flexShrink:0}})]})}function LiveActivityBadge({activity}){let isLocked=activity.state==="locked"||activity.state==="editing",icon=isLocked?(0,import_jsx_runtime11.jsx)(Lock,{style:{width:8,height:8}}):(0,import_jsx_runtime11.jsx)(Eye,{style:{width:8,height:8}}),label=isLocked?`Locked by ${activity.user}`:`${activity.user} viewing`;return(0,import_jsx_runtime11.jsxs)("span",{style:isLocked?{display:"inline-flex",alignItems:"center",gap:3,borderRadius:999,padding:"1px 5px",fontSize:9,fontWeight:600,border:"1px solid rgba(244,114,182,0.35)",color:"#f9a8d4",background:"rgba(157,23,77,0.28)",flexShrink:0,maxWidth:110,overflow:"hidden",whiteSpace:"nowrap",flexWrap:"nowrap"}:{display:"inline-flex",alignItems:"center",gap:3,borderRadius:999,padding:"1px 5px",fontSize:9,fontWeight:600,border:"1px solid rgba(59,130,246,0.35)",color:"#93c5fd",background:"rgba(30,58,138,0.28)",flexShrink:0,maxWidth:110,overflow:"hidden",whiteSpace:"nowrap",flexWrap:"nowrap"},title:label,"data-testid":"live-activity-badge",children:[icon,(0,import_jsx_runtime11.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",minWidth:0,flex:"1 1 0"},children:activity.user})]})}var import_jsx_runtime12=__toESM(require_jsx_runtime(),1);var import_react9=__toESM(require_react(),1);var import_jsx_runtime13=__toESM(require_jsx_runtime(),1);var import_react10=__toESM(require_react(),1);var import_jsx_runtime14=__toESM(require_jsx_runtime(),1);var import_jsx_runtime15=__toESM(require_jsx_runtime(),1);var import_react20=__toESM(require_react(),1);var import_react14=__toESM(require_react(),1);var import_react11=__toESM(require_react(),1),import_jsx_runtime16=__toESM(require_jsx_runtime(),1),AutoExpandTextarea=import_react11.default.forwardRef(function({value,onChange,baseRows=4,maxRows,style,...rest},forwardedRef){let localRef=import_react11.default.useRef(null),resolvedMaxRows=maxRows??baseRows*2,resize=import_react11.default.useCallback(()=>{let el2=localRef.current;if(!el2)return;el2.style.height="auto";let computed=window.getComputedStyle(el2),lineHeight=Number.parseFloat(computed.lineHeight||"0")||18,verticalPadding=Number.parseFloat(computed.paddingTop||"0")+Number.parseFloat(computed.paddingBottom||"0"),border=Number.parseFloat(computed.borderTopWidth||"0")+Number.parseFloat(computed.borderBottomWidth||"0"),minHeight=baseRows*lineHeight+verticalPadding+border,maxHeight=resolvedMaxRows*lineHeight+verticalPadding+border,target=Math.max(minHeight,Math.min(el2.scrollHeight,maxHeight));el2.style.height=`${target}px`,el2.style.overflowY=el2.scrollHeight>maxHeight?"auto":"hidden"},[baseRows,resolvedMaxRows]);return import_react11.default.useLayoutEffect(()=>{resize()},[value,resize]),(0,import_jsx_runtime16.jsx)("textarea",{...rest,ref:el2=>{localRef.current=el2,typeof forwardedRef=="function"?forwardedRef(el2):forwardedRef&&(forwardedRef.current=el2)},rows:baseRows,value,onChange:e=>onChange(e.target.value),style:{...style,resize:"none"}})});var import_react13=__toESM(require_react(),1);var import_react12=__toESM(require_react(),1),import_react_dom2=__toESM(require_react_dom(),1),import_jsx_runtime17=__toESM(require_jsx_runtime(),1);var import_jsx_runtime18=__toESM(require_jsx_runtime(),1);var import_jsx_runtime19=__toESM(require_jsx_runtime(),1);var import_jsx_runtime20=__toESM(require_jsx_runtime(),1);var import_react15=__toESM(require_react(),1);var import_jsx_runtime21=__toESM(require_jsx_runtime(),1);var import_react18=__toESM(require_react(),1);var import_react16=__toESM(require_react(),1),import_react_dom3=__toESM(require_react_dom(),1);var import_jsx_runtime22=__toESM(require_jsx_runtime(),1);var import_react17=__toESM(require_react(),1);var import_jsx_runtime23=__toESM(require_jsx_runtime(),1);var import_jsx_runtime24=__toESM(require_jsx_runtime(),1);var import_jsx_runtime25=__toESM(require_jsx_runtime(),1);var import_react19=__toESM(require_react(),1),import_react_dom4=__toESM(require_react_dom(),1);var import_jsx_runtime26=__toESM(require_jsx_runtime(),1);var import_jsx_runtime27=__toESM(require_jsx_runtime(),1);var MAX_UPLOAD_BYTES=5*1024*1024;var import_react21=__toESM(require_react(),1);var import_jsx_runtime28=__toESM(require_jsx_runtime(),1);var import_react22=__toESM(require_react(),1);var import_jsx_runtime29=__toESM(require_jsx_runtime(),1);var import_react23=__toESM(require_react(),1);var import_jsx_runtime30=__toESM(require_jsx_runtime(),1);var import_react24=__toESM(require_react(),1);var import_jsx_runtime31=__toESM(require_jsx_runtime(),1);var IGNORED_PATTERNS=[/Error evaluating Node\.js code/i,/nextjs-portal/i],buffer=[],recording=!1;function addEntry(level,args){let message=args.map(a=>{if(typeof a=="string")return a;if(a instanceof Error)return a.message;try{return JSON.stringify(a)}catch{return String(a)}}).join(" ").slice(0,500);!message||IGNORED_PATTERNS.some(pattern=>pattern.test(message))||(buffer.push({level,message,timestamp:new Date().toISOString()}),buffer.length>50&&buffer.splice(0,buffer.length-50))}function startRecording(){if(recording)return;recording=!0;let origError=console.error.bind(console);console.error=(...args)=>{addEntry("error",args),origError(...args)};let origWarn=console.warn.bind(console);console.warn=(...args)=>{addEntry("warn",args),origWarn(...args)},window.addEventListener("error",e=>{let loc=e.filename?` (${e.filename.split("/").pop()}:${e.lineno})`:"";addEntry("error",[`${e.message}${loc}`])}),window.addEventListener("unhandledrejection",e=>{let msg=e.reason instanceof Error?e.reason.message:String(e.reason??"Unhandled promise rejection");addEntry("error",[`Unhandled rejection: ${msg}`])})}function getRecordedLogs(){if(buffer.length===0)return"";let lines=buffer.map(e=>{let icon=e.level==="error"?"\u{1F534}":"\u{1F7E1}",time=e.timestamp.slice(11,19);return`- ${icon} \`${time}\` ${e.message}`});return`
1572
1603
 
1573
1604
  ---
1574
1605
  **Console logs** (${buffer.length} entr${buffer.length===1?"y":"ies"})
1575
1606
  ${lines.join(`
1576
- `)}`}var import_jsx_runtime32=__toESM(require_jsx_runtime(),1),_externalShowAddModal=null,_externalFlashTrigger=null;function flashFavicon(durationMs=2200){let head=document.head,existing=head.querySelector('link[rel*="icon"]'),originalHref=(existing==null?void 0:existing.href)??"";existing&&existing.remove();let link=document.createElement("link");link.rel="icon",link.type="image/svg+xml";let animatedSvg='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" fill="none"><rect width="18" height="18" rx="4" fill="#2563eb"/><rect x="2.5" y="5" width="2" height="8" rx="1" fill="white" opacity=".7"><animate attributeName="height" values="3;13;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0s"/><animate attributeName="y" values="7.5;2.5;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0s"/></rect><rect x="6.5" y="2" width="2" height="14" rx="1" fill="white"><animate attributeName="height" values="3;15;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.15s"/><animate attributeName="y" values="7.5;1.5;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.15s"/></rect><rect x="10.5" y="6" width="2" height="6" rx="1" fill="white" opacity=".7"><animate attributeName="height" values="3;12;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.3s"/><animate attributeName="y" values="7.5;3;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.3s"/></rect><rect x="14.5" y="4" width="2" height="10" rx="1" fill="white" opacity=".85"><animate attributeName="height" values="3;13;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.45s"/><animate attributeName="y" values="7.5;2.5;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.45s"/></rect></svg>';link.href=`data:image/svg+xml,${encodeURIComponent(animatedSvg)}`,head.appendChild(link),window.setTimeout(()=>{if(link.remove(),originalHref){let restore=document.createElement("link");restore.rel="icon",restore.type="image/svg+xml",restore.href=originalHref,head.appendChild(restore)}},durationMs)}function flashOverlayTrigger(){_externalFlashTrigger==null||_externalFlashTrigger()}function CornerTrigger({onClick,flashing}){let svgIcon=(0,import_jsx_runtime32.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 18 18",fill:"none","aria-hidden":"true",children:[(0,import_jsx_runtime32.jsx)("rect",{x:"2.5",y:"5",width:"2",height:"8",rx:"1",fill:"currentColor",opacity:"0.7"}),(0,import_jsx_runtime32.jsx)("rect",{x:"6.5",y:"2",width:"2",height:"14",rx:"1",fill:"currentColor"}),(0,import_jsx_runtime32.jsx)("rect",{x:"10.5",y:"6",width:"2",height:"6",rx:"1",fill:"currentColor",opacity:"0.7"}),(0,import_jsx_runtime32.jsx)("rect",{x:"14.5",y:"4",width:"2",height:"10",rx:"1",fill:"currentColor",opacity:"0.85"})]}),[pos,setPos]=import_react25.default.useState(null),[isDragging,setIsDragging]=import_react25.default.useState(!1),[isHolding,setIsHolding]=import_react25.default.useState(!1),dragOrigin=import_react25.default.useRef(null),holdTimer=import_react25.default.useRef(null),didDrag=import_react25.default.useRef(!1),buttonRef=import_react25.default.useRef(null),posRef=import_react25.default.useRef(null);posRef.current=pos;function getInitialPos(el2){let rect=el2.getBoundingClientRect();return{x:rect.left,y:rect.top}}function onPointerDown(e){let target=e.currentTarget,pointerId=e.pointerId,clientX=e.clientX,clientY=e.clientY;didDrag.current=!1,holdTimer.current=window.setTimeout(()=>{setIsHolding(!0);let startPos=posRef.current??getInitialPos(target);dragOrigin.current={mouseX:clientX,mouseY:clientY,posX:startPos.x,posY:startPos.y},target.setPointerCapture(pointerId)},300)}function onPointerMove(e){if(!dragOrigin.current)return;let dx=e.clientX-dragOrigin.current.mouseX,dy=e.clientY-dragOrigin.current.mouseY;!isDragging&&(Math.abs(dx)>3||Math.abs(dy)>3)&&setIsDragging(!0),didDrag.current=!0;let bw=window.innerWidth,bh=window.innerHeight,x=Math.max(8,Math.min(bw-64,dragOrigin.current.posX+dx)),y=Math.max(8,Math.min(bh-64,dragOrigin.current.posY+dy));setPos({x,y})}function onPointerUp(e){holdTimer.current!==null&&(window.clearTimeout(holdTimer.current),holdTimer.current=null);let wasDragged=didDrag.current;dragOrigin.current=null,setIsDragging(!1),setIsHolding(!1),didDrag.current=!1,wasDragged||onClick()}function onPointerCancel(){holdTimer.current!==null&&(window.clearTimeout(holdTimer.current),holdTimer.current=null),dragOrigin.current=null,setIsDragging(!1),setIsHolding(!1),didDrag.current=!1}let posStyle=pos!==null?{position:"fixed",left:pos.x,top:pos.y,bottom:"auto",right:"auto"}:{},className=["vibeflow-corner-trigger",flashing?"saved-flash":"",isHolding?"trigger-holding":"",isDragging?"trigger-dragging":""].filter(Boolean).join(" ");return(0,import_jsx_runtime32.jsx)("button",{ref:buttonRef,className,title:isDragging?"Drag to reposition":isHolding?"Drag to reposition \xB7 Release to open":"Open Kanban board \xB7 Hold to drag",style:posStyle,onPointerDown,onPointerMove,onPointerUp,onPointerCancel,"data-vibeflow-ignore":"true",children:svgIcon})}var STATUS_OPTIONS=["backlog","todo","in-progress","review","done"],STATUS_ACTIVE={backlog:{background:"rgba(100,116,139,0.2)",borderColor:"rgba(100,116,139,0.5)",color:"#94a3b8"},todo:{background:"rgba(245,158,11,0.15)",borderColor:"rgba(245,158,11,0.4)",color:"#fcd34d"},"in-progress":{background:"rgba(59,130,246,0.15)",borderColor:"rgba(59,130,246,0.4)",color:"#93c5fd"},review:{background:"rgba(139,92,246,0.15)",borderColor:"rgba(139,92,246,0.4)",color:"#c4b5fd"},done:{background:"rgba(52,211,153,0.12)",borderColor:"rgba(52,211,153,0.4)",color:"#6ee7b7"}};function OverlayAddModal({opts,onClose,onSubmit}){let[title,setTitle]=import_react25.default.useState(opts.initialTitle??""),[description,setDescription]=import_react25.default.useState(opts.initialDescription??""),[status,setStatus]=import_react25.default.useState("todo"),[type,setType]=import_react25.default.useState("Task"),[showPreview,setShowPreview]=import_react25.default.useState(!1),[titleError,setTitleError]=import_react25.default.useState(!1),titleRef=import_react25.default.useRef(null),[dragPos,setDragPos]=import_react25.default.useState(null),[isDragging,setIsDragging]=import_react25.default.useState(!1),dragOrigin=import_react25.default.useRef(null);function onHeaderPointerDown(e){if(e.target.closest("button, input, select, textarea, a"))return;e.currentTarget.setPointerCapture(e.pointerId);let startX=(dragPos==null?void 0:dragPos.x)??window.innerWidth/2-270,startY=(dragPos==null?void 0:dragPos.y)??window.innerHeight/2-200;dragOrigin.current={mouseX:e.clientX,mouseY:e.clientY,posX:startX,posY:startY},setIsDragging(!0)}function onHeaderPointerMove(e){if(!dragOrigin.current)return;let dx=e.clientX-dragOrigin.current.mouseX,dy=e.clientY-dragOrigin.current.mouseY;setDragPos({x:dragOrigin.current.posX+dx,y:dragOrigin.current.posY+dy})}function onHeaderPointerUp(){dragOrigin.current=null,setIsDragging(!1)}import_react25.default.useEffect(()=>{setTimeout(()=>{var _a;return(_a=titleRef.current)==null?void 0:_a.focus()},50)},[]);function handleBackdropClick(e){e.target===e.currentTarget&&onClose()}function handleKeyDown(e){e.key==="Escape"&&onClose(),(e.ctrlKey||e.metaKey)&&e.key==="Enter"&&handleSave()}function handleSave(){var _a;let t=title.trim();if(!t){setTitleError(!0),(_a=titleRef.current)==null||_a.focus();return}setTitleError(!1);let desc=description.trim()||t;if(type==="Bug"){let logs=getRecordedLogs();logs&&(desc+=logs)}onSubmit(opts.selector??location.pathname,opts.cssSelector??location.pathname,t,desc,status,type,{file:opts.file,line:opts.line,col:opts.col,component:opts.component}),onClose()}let statusBtnBase={padding:"2px 8px",borderRadius:4,fontSize:11,cursor:"pointer",border:"1px solid var(--vibeflow-border-strong)",background:"transparent",color:"var(--vibeflow-text-muted)",fontFamily:"inherit",fontWeight:500,transition:"all .12s"},modalStyle=dragPos!==null?{position:"fixed",left:dragPos.x,top:dragPos.y,margin:0}:{};return(0,import_jsx_runtime32.jsx)("div",{className:"vibeflow-modal-backdrop",onClick:handleBackdropClick,onKeyDown:handleKeyDown,children:(0,import_jsx_runtime32.jsxs)("div",{className:"vibeflow-modal overlay-add-modal",role:"dialog","aria-modal":"true",style:modalStyle,children:[(0,import_jsx_runtime32.jsxs)("div",{className:"modal-header overlay-modal-header",style:{cursor:isDragging?"grabbing":"grab",userSelect:"none"},onPointerDown:onHeaderPointerDown,onPointerMove:onHeaderPointerMove,onPointerUp:onHeaderPointerUp,children:[(0,import_jsx_runtime32.jsx)("span",{title:"Drag to move",style:{display:"flex",alignItems:"center",color:"var(--vibeflow-text-muted)",opacity:.5,flexShrink:0,pointerEvents:"none"},children:(0,import_jsx_runtime32.jsxs)("svg",{width:"12",height:"16",viewBox:"0 0 12 16",fill:"currentColor","aria-hidden":"true",children:[(0,import_jsx_runtime32.jsx)("circle",{cx:"3",cy:"3",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"9",cy:"3",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"3",cy:"8",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"9",cy:"8",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"3",cy:"13",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"9",cy:"13",r:"1.5"})]})}),(0,import_jsx_runtime32.jsx)(TypePicker,{value:type,onChange:setType}),(0,import_jsx_runtime32.jsx)("input",{ref:titleRef,type:"text",placeholder:"Task title\u2026",value:title,onChange:e=>{setTitle(e.target.value),titleError&&e.target.value.trim()&&setTitleError(!1)},style:{flex:1,fontSize:14,fontWeight:600,padding:"4px 8px",border:`1px solid ${titleError?"rgba(239,68,68,0.7)":"transparent"}`,borderRadius:6,background:titleError?"rgba(239,68,68,0.07)":"transparent",color:"var(--vibeflow-text-primary)",fontFamily:"inherit",outline:"none",cursor:"text"},onFocus:e=>{titleError||(e.currentTarget.style.borderColor="var(--vibeflow-accent-strong)",e.currentTarget.style.background="var(--vibeflow-surface-elevated)")},onBlur:e=>{titleError||(e.currentTarget.style.borderColor="transparent",e.currentTarget.style.background="transparent")},onKeyDown:e=>{e.key==="Enter"&&handleSave(),e.key==="Escape"&&onClose()}}),titleError&&(0,import_jsx_runtime32.jsx)("span",{style:{fontSize:11,color:"rgba(239,68,68,0.9)",flexShrink:0,whiteSpace:"nowrap"},children:"Title is required"}),(0,import_jsx_runtime32.jsx)("button",{type:"button",onClick:onClose,style:{width:26,height:26,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",borderRadius:6,border:"none",background:"transparent",color:"var(--vibeflow-text-muted)",cursor:"pointer"},onMouseOver:e=>{e.currentTarget.style.background="var(--vibeflow-surface-hover)",e.currentTarget.style.color="var(--vibeflow-text-secondary)"},onMouseOut:e=>{e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--vibeflow-text-muted)"},"aria-label":"Close",children:"\u2715"})]}),(0,import_jsx_runtime32.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"8px 16px",borderBottom:"1px solid var(--vibeflow-border-strong)"},children:[(0,import_jsx_runtime32.jsx)("span",{style:{fontSize:10,color:"var(--vibeflow-text-muted)",fontWeight:500,textTransform:"uppercase",letterSpacing:"0.04em",flexShrink:0},children:"Status"}),STATUS_OPTIONS.map(s=>(0,import_jsx_runtime32.jsx)("button",{type:"button",style:{...statusBtnBase,...s===status?STATUS_ACTIVE[s]:{}},onClick:()=>setStatus(s),onMouseOver:e=>{s!==status&&(e.currentTarget.style.background="var(--vibeflow-surface-hover)",e.currentTarget.style.color="var(--vibeflow-text-secondary)")},onMouseOut:e=>{s!==status&&(e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--vibeflow-text-muted)")},children:s},s))]}),(opts.file||opts.component)&&(0,import_jsx_runtime32.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 16px",background:"var(--vibeflow-surface-elevated)",borderBottom:"1px solid var(--vibeflow-border-subtle)",fontSize:11,color:"var(--vibeflow-text-muted)"},children:[opts.file&&(0,import_jsx_runtime32.jsxs)("a",{href:`vscode://file${opts.file}${opts.line!=null?`:${opts.line}`:""}`,target:"_blank",rel:"noreferrer",style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 6px",borderRadius:4,background:"var(--vibeflow-accent-soft)",border:"1px solid var(--vibeflow-accent-border)",color:"var(--vibeflow-accent-strong)",textDecoration:"none",fontSize:11},children:["\u{1F5CE} ",opts.file.split("/").slice(-2).join("/"),opts.line!=null?`:${opts.line}`:""]}),opts.component&&(0,import_jsx_runtime32.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 6px",borderRadius:4,background:"rgba(139,92,246,0.08)",border:"1px solid rgba(139,92,246,0.25)",color:"#8b5cf6",fontSize:11},children:["\u2B21 ",opts.component]})]}),(0,import_jsx_runtime32.jsxs)("div",{className:"modal-tabs",children:[(0,import_jsx_runtime32.jsx)("div",{className:`modal-tab${showPreview?"":" active"}`,onClick:()=>setShowPreview(!1),children:"Edit"}),(0,import_jsx_runtime32.jsx)("div",{className:`modal-tab${showPreview?" active":""}`,onClick:()=>setShowPreview(!0),children:"Preview"})]}),(0,import_jsx_runtime32.jsx)("div",{className:"modal-body",children:showPreview?(0,import_jsx_runtime32.jsx)(MarkdownPreview,{markdown:description,className:"modal-preview-pane"}):(0,import_jsx_runtime32.jsx)("div",{className:"modal-editor-pane",children:(0,import_jsx_runtime32.jsx)(AutoExpandTextarea,{className:"dp-textarea",placeholder:"Description (markdown supported)\u2026",value:description,onChange:setDescription,baseRows:5,maxRows:14})})}),type==="Bug"&&(0,import_jsx_runtime32.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"6px 16px",background:"rgba(239,68,68,0.06)",borderTop:"1px solid rgba(239,68,68,0.18)",fontSize:11,color:"rgba(239,68,68,0.75)"},children:[(0,import_jsx_runtime32.jsx)("span",{children:"\u{1F534}"}),(0,import_jsx_runtime32.jsx)("span",{children:"Console errors & warnings will be attached to this report"})]}),(0,import_jsx_runtime32.jsxs)("div",{className:"modal-footer",children:[(0,import_jsx_runtime32.jsxs)("div",{className:"modal-footer-left",children:[(0,import_jsx_runtime32.jsx)("button",{type:"button",className:"btn-primary",onClick:handleSave,disabled:!title.trim(),style:{opacity:title.trim()?1:.45,cursor:title.trim()?"pointer":"not-allowed"},children:"Add Task"}),(0,import_jsx_runtime32.jsx)("button",{type:"button",className:"btn-ghost",onClick:onClose,children:"Cancel"})]}),(0,import_jsx_runtime32.jsx)("div",{className:"modal-footer-center"})]})]})})}function OverlayApp({onOpenKanban,onSubmitTask}){let[addModalOpts,setAddModalOpts]=import_react25.default.useState(null),[triggerFlashing,setTriggerFlashing]=import_react25.default.useState(!1);import_react25.default.useEffect(()=>(_externalShowAddModal=opts=>setAddModalOpts(opts),_externalFlashTrigger=()=>{setTriggerFlashing(!0),window.setTimeout(()=>setTriggerFlashing(!1),1500),flashFavicon()},()=>{_externalShowAddModal=null,_externalFlashTrigger=null}),[]);let isKanbanPage=typeof document<"u"&&document.body.hasAttribute("data-vibeflow-cli-kanban");return(0,import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment,{children:[!isKanbanPage&&(0,import_jsx_runtime32.jsx)(CornerTrigger,{onClick:onOpenKanban,flashing:triggerFlashing}),addModalOpts!==null&&(0,import_jsx_runtime32.jsx)(OverlayAddModal,{opts:addModalOpts,onClose:()=>setAddModalOpts(null),onSubmit:(selector,cssSelector,title,description,status,type,meta)=>{onSubmitTask(selector,cssSelector,title,description,status,type,meta),setAddModalOpts(null)}})]})}function buildTypePickerEl(initialType="Task"){let selectedType=initialType,detailed=TASK_TYPES,currentInfo=()=>detailed.find(t=>t.value===selectedType)??detailed[0],container=el("div",{className:"type-picker"}),trigger=el("button",{className:"type-picker-trigger",type:"button"}),dropdown=el("div",{className:"type-picker-dropdown"}),refresh=()=>{let info=currentInfo();trigger.title=(info==null?void 0:info.tooltip)??"",trigger.replaceChildren(el("span",{className:"type-picker-icon"},(info==null?void 0:info.icon)??""),el("span",{className:"type-picker-label"},(info==null?void 0:info.label)??"")),dropdown.replaceChildren();for(let t of detailed){let opt=el("button",{className:t.value===selectedType?"type-picker-option type-picker-option--active":"type-picker-option",type:"button",title:t.tooltip},el("span",{className:"type-picker-icon"},t.icon),el("span",{className:"type-picker-label"},t.label));opt.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),selectedType=t.value,refresh(),dropdown.classList.remove("open")}),dropdown.appendChild(opt)}};return trigger.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),dropdown.classList.toggle("open")}),refresh(),container.append(trigger,dropdown),{el:container,getValue:()=>selectedType,setValue:v=>{selectedType=v,refresh()}}}function renderMarkdown2(md){return md?md.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/^### (.+)$/gm,"<h3>$1</h3>").replace(/^## (.+)$/gm,"<h2>$1</h2>").replace(/^# (.+)$/gm,"<h1>$1</h1>").replace(/[*][*](.+?)[*][*]/g,"<strong>$1</strong>").replace(/__(.+?)__/g,"<strong>$1</strong>").replace(/[*](.+?)[*]/g,"<em>$1</em>").replace(/_([^_]+?)_/g,"<em>$1</em>").replace(/`(.+?)`/g,"<code>$1</code>").replace(/^[-*] (.+)$/gm,"<li>$1</li>").replace(/^---$/gm,"<hr>").replace(/(<li>[\s\S]*?<\/li>\n?)+/g,m=>`<ul>${m}</ul>`).replace(/^(?!<[a-z]|$).+$/gm,line=>`<p>${line}</p>`):'<span class="modal-preview-empty">No description yet</span>'}function showEditModal(task){if(!state.root)return;state.editModal&&(state.editModal.remove(),state.editModal=null);let titleInput=el("input",{type:"text",placeholder:"Task title..."});titleInput.value=task.title??"";let statusSelect=el("select");for(let s of["backlog","todo","in-progress","review","done"]){let opt=el("option",{value:s},s);s===task.status&&(opt.selected=!0),statusSelect.appendChild(opt)}let typePicker=buildTypePickerEl(task.type??"Task"),header=el("div",{className:"modal-header"},titleInput,typePicker.el,statusSelect),tabEdit=el("div",{className:"modal-tab active"},"Edit"),tabPreview=el("div",{className:"modal-tab"},"Preview"),tabs=el("div",{className:"modal-tabs"},tabEdit,tabPreview),textarea=el("textarea",{placeholder:"Description (markdown supported)..."});textarea.value=task.description??"";let editorPane=el("div",{className:"modal-editor-pane"},textarea),previewPane=el("div",{className:"modal-preview-pane"});previewPane.style.display="none";let refreshPreview=()=>{previewPane.innerHTML=renderMarkdown2(textarea.value)},body=el("div",{className:"modal-body"},editorPane,previewPane);tabEdit.addEventListener("click",()=>{tabEdit.classList.add("active"),tabPreview.classList.remove("active"),editorPane.style.display="",previewPane.style.display="none"}),tabPreview.addEventListener("click",event=>{event.isTrusted&&(tabPreview.classList.add("active"),tabEdit.classList.remove("active"),editorPane.style.display="none",previewPane.style.display="",refreshPreview())});let btnSave=el("button",{className:"btn-primary"},"Save"),btnCancel=el("button",{className:"btn-ghost"},"Cancel"),footerLeft=el("div",{className:"modal-footer-left"},btnSave,btnCancel),footerRight=el("div",{className:"modal-footer-right"}),footerCenter=buildSourceRow({file:task.file,line:task.line,col:task.col,component:task.component}),footer=el("div",{className:"modal-footer"},footerLeft,footerCenter,footerRight),modal=el("div",{className:"vibeflow-modal"},header,tabs,body,footer),backdrop=el("div",{className:"vibeflow-modal-backdrop"},modal);state.editModal=backdrop,state.root.appendChild(backdrop),titleInput.focus(),backdrop.addEventListener("click",e=>{e.target===backdrop&&(backdrop.remove(),state.editModal=null)}),btnSave.addEventListener("click",()=>{let newTitle=titleInput.value.trim();if(!newTitle)return;let url=PROTO_CONFIG.boardId?`${PROTO_CONFIG.apiUrl}/${task.id}?boardId=${encodeURIComponent(PROTO_CONFIG.boardId)}`:`${PROTO_CONFIG.apiUrl}/${task.id}`;fetch(url,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:newTitle,status:statusSelect.value,type:typePicker.getValue(),description:textarea.value.trim()})}).then(r=>r.json()).then(d=>{d.success&&fetchTasksAndRender()}).catch(err=>console.error("[Vibeflow Studio]",err)),backdrop.remove(),state.editModal=null}),btnCancel.addEventListener("click",()=>{backdrop.remove(),state.editModal=null}),document.addEventListener("keydown",function onModalKey(e){if(!state.editModal){document.removeEventListener("keydown",onModalKey);return}e.key==="Escape"&&(backdrop.remove(),state.editModal=null,document.removeEventListener("keydown",onModalKey)),(e.ctrlKey||e.metaKey)&&e.key==="Enter"&&(btnSave.click(),document.removeEventListener("keydown",onModalKey))})}function fetchTasksAndRender(){fetchTasks()}function buildSourceRow(src){let row=el("div",{className:"modal-source-row"});if(!src.file&&!src.component)return row;let label="";src.file?(label=src.file.replace(/\\/g,"/").split("/").slice(-2).join("/"),src.line!=null&&(label+=`:${src.line}`),src.col!=null&&(label+=`:${src.col}`)):src.component&&(label=`\u2B21 ${src.component}`),src.component&&src.file&&(label+=` \xB7 \u2B21 ${src.component}`);let sourceEl=el("span",{className:"modal-source-label",title:src.file??""},label);if(src.file&&src.line!=null){let link=el("a",{className:"modal-source-link",title:"Open in editor",href:`vscode://file${src.file}:${src.line}`,target:"_blank"},"\u2197");row.append(sourceEl,link)}else row.append(sourceEl);return row}function showInspectModal(element,pointer){if(!state.root)return;state.editModal&&(state.editModal.remove(),state.editModal=null);let cssSelector=buildCssSelector(element),tag=element.tagName.toLowerCase(),elId=element.getAttribute("id"),classes=Array.from(element.classList).filter(c=>!c.startsWith("vibeflow-")),dataAttrs=Array.from(element.attributes).filter(a=>a.name.startsWith("data-")&&!a.name.startsWith("data-proto")).map(a=>({name:a.name,value:a.value})),heading=el("div",{className:"inspect-heading"},el("span",{className:"inspect-tag"},`<${tag}>`),el("span",{className:"inspect-title"},"Element Inspector")),closeBtn=el("button",{className:"inspect-close"},"\u2715");function makeRow(label,value,copyable=!0){let row=el("div",{className:"inspect-row"}),lbl=el("span",{className:"inspect-row-label"},label),val=el("code",{className:"inspect-row-value"},value||"\u2014");if(row.append(lbl,val),copyable&&value){let btn=el("button",{className:"inspect-copy-btn",title:"Copy"},"\u2398");btn.addEventListener("click",()=>{var _a;(_a=navigator.clipboard)==null||_a.writeText(value).catch(()=>{}),btn.textContent="\u2713",setTimeout(()=>{btn.textContent="\u2398"},1200)}),row.appendChild(btn)}return row}let rows=el("div",{className:"inspect-rows"});if(rows.appendChild(makeRow("Selector",pointer.selector)),cssSelector!==pointer.selector&&rows.appendChild(makeRow("CSS selector",cssSelector)),pointer.test_id&&rows.appendChild(makeRow("Test ID",pointer.test_id)),elId&&rows.appendChild(makeRow("id",elId)),classes.length>0&&rows.appendChild(makeRow("Classes",classes.join(" "))),pointer.file){let fileLine=pointer.file+(pointer.line!=null?`:${pointer.line}`:"")+(pointer.col!=null?`:${pointer.col}`:""),srcRow=makeRow("Source file",fileLine);if(pointer.line!=null){let openLink=el("a",{className:"inspect-copy-btn",title:"Open in VS Code",href:`vscode://file${pointer.file}:${pointer.line}`,target:"_blank"},"\u2197");srcRow.appendChild(openLink)}rows.appendChild(srcRow)}pointer.component&&rows.appendChild(makeRow("Component",pointer.component));for(let attr of dataAttrs)rows.appendChild(makeRow(attr.name,attr.value));let copyAllBtn=el("button",{className:"inspect-copy-all-btn"},"\u2398 Copy all");copyAllBtn.addEventListener("click",()=>{var _a;let lines=[];pointer.file&&lines.push(`Source: ${pointer.file}${pointer.line!=null?`:${pointer.line}`:""}${pointer.col!=null?`:${pointer.col}`:""}`),pointer.component&&lines.push(`Component: ${pointer.component}`),pointer.test_id&&lines.push(`TestID: ${pointer.test_id}`),lines.push(`Selector: ${pointer.selector}`),cssSelector!==pointer.selector&&lines.push(`CSS selector: ${cssSelector}`),elId&&lines.push(`id: ${elId}`),classes.length>0&&lines.push(`Classes: ${classes.join(" ")}`),(_a=navigator.clipboard)==null||_a.writeText(lines.join(`
1607
+ `)}`}var import_jsx_runtime32=__toESM(require_jsx_runtime(),1),_externalShowAddModal=null,_externalFlashTrigger=null;function flashFavicon(durationMs=2200){let head=document.head,existing=head.querySelector('link[rel*="icon"]'),originalHref=(existing==null?void 0:existing.href)??"";existing&&existing.remove();let link=document.createElement("link");link.rel="icon",link.type="image/svg+xml";let animatedSvg='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" fill="none"><rect width="18" height="18" rx="4" fill="#2563eb"/><rect x="2.5" y="5" width="2" height="8" rx="1" fill="white" opacity=".7"><animate attributeName="height" values="3;13;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0s"/><animate attributeName="y" values="7.5;2.5;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0s"/></rect><rect x="6.5" y="2" width="2" height="14" rx="1" fill="white"><animate attributeName="height" values="3;15;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.15s"/><animate attributeName="y" values="7.5;1.5;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.15s"/></rect><rect x="10.5" y="6" width="2" height="6" rx="1" fill="white" opacity=".7"><animate attributeName="height" values="3;12;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.3s"/><animate attributeName="y" values="7.5;3;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.3s"/></rect><rect x="14.5" y="4" width="2" height="10" rx="1" fill="white" opacity=".85"><animate attributeName="height" values="3;13;3" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.45s"/><animate attributeName="y" values="7.5;2.5;7.5" dur="0.8s" repeatCount="3" calcMode="spline" keySplines=".4 0 .2 1;.4 0 .2 1" begin="0.45s"/></rect></svg>';link.href=`data:image/svg+xml,${encodeURIComponent(animatedSvg)}`,head.appendChild(link),window.setTimeout(()=>{if(link.remove(),originalHref){let restore=document.createElement("link");restore.rel="icon",restore.type="image/svg+xml",restore.href=originalHref,head.appendChild(restore)}},durationMs)}function flashOverlayTrigger(){_externalFlashTrigger==null||_externalFlashTrigger()}function CornerTrigger({onClick,flashing,onHide}){let svgIcon=(0,import_jsx_runtime32.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 18 18",fill:"none","aria-hidden":"true",children:[(0,import_jsx_runtime32.jsx)("rect",{x:"2.5",y:"5",width:"2",height:"8",rx:"1",fill:"currentColor",opacity:"0.7"}),(0,import_jsx_runtime32.jsx)("rect",{x:"6.5",y:"2",width:"2",height:"14",rx:"1",fill:"currentColor"}),(0,import_jsx_runtime32.jsx)("rect",{x:"10.5",y:"6",width:"2",height:"6",rx:"1",fill:"currentColor",opacity:"0.7"}),(0,import_jsx_runtime32.jsx)("rect",{x:"14.5",y:"4",width:"2",height:"10",rx:"1",fill:"currentColor",opacity:"0.85"})]}),[pos,setPos]=import_react25.default.useState(()=>{try{let saved=localStorage.getItem("vibeflow-trigger-pos");if(saved){let parsed=JSON.parse(saved);if(typeof parsed.x=="number"&&typeof parsed.y=="number")return parsed}}catch{}return null}),[isDragging,setIsDragging]=import_react25.default.useState(!1),[isHolding,setIsHolding]=import_react25.default.useState(!1),dragOrigin=import_react25.default.useRef(null),holdTimer=import_react25.default.useRef(null),didDrag=import_react25.default.useRef(!1),isRightClick=import_react25.default.useRef(!1),buttonRef=import_react25.default.useRef(null),posRef=import_react25.default.useRef(null);posRef.current=pos;let[ctxMenu,setCtxMenu]=import_react25.default.useState(null);import_react25.default.useEffect(()=>{if(pos)try{localStorage.setItem("vibeflow-trigger-pos",JSON.stringify(pos))}catch{}},[pos]),import_react25.default.useEffect(()=>{if(!ctxMenu)return;function onDocClick(){setCtxMenu(null)}return document.addEventListener("click",onDocClick,{once:!0}),()=>document.removeEventListener("click",onDocClick)},[ctxMenu]);function getInitialPos(el2){let rect=el2.getBoundingClientRect();return{x:rect.left,y:rect.top}}function onPointerDown(e){let target=e.currentTarget,pointerId=e.pointerId,clientX=e.clientX,clientY=e.clientY;didDrag.current=!1,isRightClick.current=e.button===2,!isRightClick.current&&(holdTimer.current=window.setTimeout(()=>{setIsHolding(!0);let startPos=posRef.current??getInitialPos(target);dragOrigin.current={mouseX:clientX,mouseY:clientY,posX:startPos.x,posY:startPos.y},target.setPointerCapture(pointerId)},300))}function onPointerMove(e){if(!dragOrigin.current)return;let dx=e.clientX-dragOrigin.current.mouseX,dy=e.clientY-dragOrigin.current.mouseY;!isDragging&&(Math.abs(dx)>3||Math.abs(dy)>3)&&setIsDragging(!0),didDrag.current=!0;let bw=window.innerWidth,bh=window.innerHeight,x=Math.max(8,Math.min(bw-64,dragOrigin.current.posX+dx)),y=Math.max(8,Math.min(bh-64,dragOrigin.current.posY+dy));setPos({x,y})}function onPointerUp(e){holdTimer.current!==null&&(window.clearTimeout(holdTimer.current),holdTimer.current=null);let wasDragged=didDrag.current,wasRight=isRightClick.current;dragOrigin.current=null,setIsDragging(!1),setIsHolding(!1),didDrag.current=!1,isRightClick.current=!1,!wasDragged&&!wasRight&&onClick()}function onPointerCancel(){holdTimer.current!==null&&(window.clearTimeout(holdTimer.current),holdTimer.current=null),dragOrigin.current=null,setIsDragging(!1),setIsHolding(!1),didDrag.current=!1}let posStyle=pos!==null?{position:"fixed",left:pos.x,top:pos.y,bottom:"auto",right:"auto"}:{},className=["vibeflow-corner-trigger",flashing?"saved-flash":"",isHolding?"trigger-holding":"",isDragging?"trigger-dragging":""].filter(Boolean).join(" "),title=isDragging?"Drag to reposition":isHolding?"Drag to reposition \xB7 Release to open":"Open Kanban board \xB7 Hold to drag";function onContextMenu(e){e.preventDefault(),e.stopPropagation();let MENU_W=120,MENU_H=28,PAD=8,x=Math.min(e.clientX,window.innerWidth-MENU_W-PAD),y=Math.min(e.clientY,window.innerHeight-MENU_H-PAD);setCtxMenu({x:Math.max(PAD,x),y:Math.max(PAD,y)})}return(0,import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment,{children:[(0,import_jsx_runtime32.jsx)("button",{ref:buttonRef,className,title,style:posStyle,onPointerDown,onPointerMove,onPointerUp,onPointerCancel,onContextMenu,"data-vibeflow-ignore":"true",children:svgIcon}),ctxMenu&&(0,import_jsx_runtime32.jsx)("div",{className:"vibeflow-trigger-ctx-menu",style:{position:"fixed",left:ctxMenu.x,top:ctxMenu.y},onClick:e=>e.stopPropagation(),children:(0,import_jsx_runtime32.jsx)("button",{type:"button",onClick:()=>{setCtxMenu(null),onHide()},children:"Hide Vibeflow"})})]})}var STATUS_OPTIONS=["backlog","todo","in-progress","review","done"],STATUS_ACTIVE={backlog:{background:"rgba(100,116,139,0.2)",borderColor:"rgba(100,116,139,0.5)",color:"#94a3b8"},todo:{background:"rgba(245,158,11,0.15)",borderColor:"rgba(245,158,11,0.4)",color:"#fcd34d"},"in-progress":{background:"rgba(59,130,246,0.15)",borderColor:"rgba(59,130,246,0.4)",color:"#93c5fd"},review:{background:"rgba(139,92,246,0.15)",borderColor:"rgba(139,92,246,0.4)",color:"#c4b5fd"},done:{background:"rgba(52,211,153,0.12)",borderColor:"rgba(52,211,153,0.4)",color:"#6ee7b7"}};function OverlayAddModal({opts,onClose,onSubmit}){let[title,setTitle]=import_react25.default.useState(opts.initialTitle??""),[description,setDescription]=import_react25.default.useState(opts.initialDescription??""),[status,setStatus]=import_react25.default.useState("todo"),[type,setType]=import_react25.default.useState("Task"),[showPreview,setShowPreview]=import_react25.default.useState(!1),[titleError,setTitleError]=import_react25.default.useState(!1),titleRef=import_react25.default.useRef(null),[dragPos,setDragPos]=import_react25.default.useState(null),[isDragging,setIsDragging]=import_react25.default.useState(!1),dragOrigin=import_react25.default.useRef(null);function onHeaderPointerDown(e){if(e.target.closest("button, input, select, textarea, a"))return;e.currentTarget.setPointerCapture(e.pointerId);let startX=(dragPos==null?void 0:dragPos.x)??window.innerWidth/2-270,startY=(dragPos==null?void 0:dragPos.y)??window.innerHeight/2-200;dragOrigin.current={mouseX:e.clientX,mouseY:e.clientY,posX:startX,posY:startY},setIsDragging(!0)}function onHeaderPointerMove(e){if(!dragOrigin.current)return;let dx=e.clientX-dragOrigin.current.mouseX,dy=e.clientY-dragOrigin.current.mouseY;setDragPos({x:dragOrigin.current.posX+dx,y:dragOrigin.current.posY+dy})}function onHeaderPointerUp(){dragOrigin.current=null,setIsDragging(!1)}import_react25.default.useEffect(()=>{setTimeout(()=>{var _a;return(_a=titleRef.current)==null?void 0:_a.focus()},50)},[]);function handleBackdropClick(e){e.target===e.currentTarget&&onClose()}function handleKeyDown(e){e.key==="Escape"&&onClose(),(e.ctrlKey||e.metaKey)&&e.key==="Enter"&&handleSave()}function handleSave(){var _a;let t=title.trim();if(!t){setTitleError(!0),(_a=titleRef.current)==null||_a.focus();return}setTitleError(!1);let desc=description.trim()||t;if(type==="Bug"){let logs=getRecordedLogs();logs&&(desc+=logs)}onSubmit(opts.selector??location.pathname,opts.cssSelector??location.pathname,t,desc,status,type,{file:opts.file,line:opts.line,col:opts.col,component:opts.component}),onClose()}let statusBtnBase={padding:"2px 8px",borderRadius:4,fontSize:11,cursor:"pointer",border:"1px solid var(--vibeflow-border-strong)",background:"transparent",color:"var(--vibeflow-text-muted)",fontFamily:"inherit",fontWeight:500,transition:"all .12s"},modalStyle=dragPos!==null?{position:"fixed",left:dragPos.x,top:dragPos.y,margin:0}:{};return(0,import_jsx_runtime32.jsx)("div",{className:"vibeflow-modal-backdrop",onClick:handleBackdropClick,onKeyDown:handleKeyDown,children:(0,import_jsx_runtime32.jsxs)("div",{className:"vibeflow-modal overlay-add-modal",role:"dialog","aria-modal":"true",style:modalStyle,children:[(0,import_jsx_runtime32.jsxs)("div",{className:"modal-header overlay-modal-header",style:{cursor:isDragging?"grabbing":"grab",userSelect:"none"},onPointerDown:onHeaderPointerDown,onPointerMove:onHeaderPointerMove,onPointerUp:onHeaderPointerUp,children:[(0,import_jsx_runtime32.jsx)("span",{title:"Drag to move",style:{display:"flex",alignItems:"center",color:"var(--vibeflow-text-muted)",opacity:.5,flexShrink:0,pointerEvents:"none"},children:(0,import_jsx_runtime32.jsxs)("svg",{width:"12",height:"16",viewBox:"0 0 12 16",fill:"currentColor","aria-hidden":"true",children:[(0,import_jsx_runtime32.jsx)("circle",{cx:"3",cy:"3",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"9",cy:"3",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"3",cy:"8",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"9",cy:"8",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"3",cy:"13",r:"1.5"}),(0,import_jsx_runtime32.jsx)("circle",{cx:"9",cy:"13",r:"1.5"})]})}),(0,import_jsx_runtime32.jsx)(TypePicker,{value:type,onChange:setType}),(0,import_jsx_runtime32.jsx)("input",{ref:titleRef,type:"text",placeholder:"Task title\u2026",value:title,onChange:e=>{setTitle(e.target.value),titleError&&e.target.value.trim()&&setTitleError(!1)},style:{flex:1,fontSize:14,fontWeight:600,padding:"4px 8px",border:`1px solid ${titleError?"rgba(239,68,68,0.7)":"transparent"}`,borderRadius:6,background:titleError?"rgba(239,68,68,0.07)":"transparent",color:"var(--vibeflow-text-primary)",fontFamily:"inherit",outline:"none",cursor:"text"},onFocus:e=>{titleError||(e.currentTarget.style.borderColor="var(--vibeflow-accent-strong)",e.currentTarget.style.background="var(--vibeflow-surface-elevated)")},onBlur:e=>{titleError||(e.currentTarget.style.borderColor="transparent",e.currentTarget.style.background="transparent")},onKeyDown:e=>{e.key==="Enter"&&handleSave(),e.key==="Escape"&&onClose()}}),titleError&&(0,import_jsx_runtime32.jsx)("span",{style:{fontSize:11,color:"rgba(239,68,68,0.9)",flexShrink:0,whiteSpace:"nowrap"},children:"Title is required"}),(0,import_jsx_runtime32.jsx)("button",{type:"button",onClick:onClose,style:{width:26,height:26,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",borderRadius:6,border:"none",background:"transparent",color:"var(--vibeflow-text-muted)",cursor:"pointer"},onMouseOver:e=>{e.currentTarget.style.background="var(--vibeflow-surface-hover)",e.currentTarget.style.color="var(--vibeflow-text-secondary)"},onMouseOut:e=>{e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--vibeflow-text-muted)"},"aria-label":"Close",children:"\u2715"})]}),(0,import_jsx_runtime32.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"8px 16px",borderBottom:"1px solid var(--vibeflow-border-strong)"},children:[(0,import_jsx_runtime32.jsx)("span",{style:{fontSize:10,color:"var(--vibeflow-text-muted)",fontWeight:500,textTransform:"uppercase",letterSpacing:"0.04em",flexShrink:0},children:"Status"}),STATUS_OPTIONS.map(s=>(0,import_jsx_runtime32.jsx)("button",{type:"button",style:{...statusBtnBase,...s===status?STATUS_ACTIVE[s]:{}},onClick:()=>setStatus(s),onMouseOver:e=>{s!==status&&(e.currentTarget.style.background="var(--vibeflow-surface-hover)",e.currentTarget.style.color="var(--vibeflow-text-secondary)")},onMouseOut:e=>{s!==status&&(e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--vibeflow-text-muted)")},children:s},s))]}),(opts.file||opts.component)&&(0,import_jsx_runtime32.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 16px",background:"var(--vibeflow-surface-elevated)",borderBottom:"1px solid var(--vibeflow-border-subtle)",fontSize:11,color:"var(--vibeflow-text-muted)"},children:[opts.file&&(0,import_jsx_runtime32.jsxs)("a",{href:`vscode://file${opts.file}${opts.line!=null?`:${opts.line}`:""}`,target:"_blank",rel:"noreferrer",style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 6px",borderRadius:4,background:"var(--vibeflow-accent-soft)",border:"1px solid var(--vibeflow-accent-border)",color:"var(--vibeflow-accent-strong)",textDecoration:"none",fontSize:11},children:["\u{1F5CE} ",opts.file.split("/").slice(-2).join("/"),opts.line!=null?`:${opts.line}`:""]}),opts.component&&(0,import_jsx_runtime32.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 6px",borderRadius:4,background:"rgba(139,92,246,0.08)",border:"1px solid rgba(139,92,246,0.25)",color:"#8b5cf6",fontSize:11},children:["\u2B21 ",opts.component]})]}),(0,import_jsx_runtime32.jsxs)("div",{className:"modal-tabs",children:[(0,import_jsx_runtime32.jsx)("div",{className:`modal-tab${showPreview?"":" active"}`,onClick:()=>setShowPreview(!1),children:"Edit"}),(0,import_jsx_runtime32.jsx)("div",{className:`modal-tab${showPreview?" active":""}`,onClick:()=>setShowPreview(!0),children:"Preview"})]}),(0,import_jsx_runtime32.jsx)("div",{className:"modal-body",children:showPreview?(0,import_jsx_runtime32.jsx)(MarkdownPreview,{markdown:description,className:"modal-preview-pane"}):(0,import_jsx_runtime32.jsx)("div",{className:"modal-editor-pane",children:(0,import_jsx_runtime32.jsx)(AutoExpandTextarea,{className:"dp-textarea",placeholder:"Description (markdown supported)\u2026",value:description,onChange:setDescription,baseRows:5,maxRows:14})})}),type==="Bug"&&(0,import_jsx_runtime32.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"6px 16px",background:"rgba(239,68,68,0.06)",borderTop:"1px solid rgba(239,68,68,0.18)",fontSize:11,color:"rgba(239,68,68,0.75)"},children:[(0,import_jsx_runtime32.jsx)("span",{children:"\u{1F534}"}),(0,import_jsx_runtime32.jsx)("span",{children:"Console errors & warnings will be attached to this report"})]}),(0,import_jsx_runtime32.jsxs)("div",{className:"modal-footer",children:[(0,import_jsx_runtime32.jsxs)("div",{className:"modal-footer-left",children:[(0,import_jsx_runtime32.jsx)("button",{type:"button",className:"btn-primary",onClick:handleSave,disabled:!title.trim(),style:{opacity:title.trim()?1:.45,cursor:title.trim()?"pointer":"not-allowed"},children:"Add Task"}),(0,import_jsx_runtime32.jsx)("button",{type:"button",className:"btn-ghost",onClick:onClose,children:"Cancel"})]}),(0,import_jsx_runtime32.jsx)("div",{className:"modal-footer-center"})]})]})})}function OverlayApp({onOpenKanban,onSubmitTask}){let[addModalOpts,setAddModalOpts]=import_react25.default.useState(null),[triggerFlashing,setTriggerFlashing]=import_react25.default.useState(!1),[isHidden,setIsHidden]=import_react25.default.useState(!1);import_react25.default.useEffect(()=>(_externalShowAddModal=opts=>setAddModalOpts(opts),_externalFlashTrigger=()=>{setTriggerFlashing(!0),window.setTimeout(()=>setTriggerFlashing(!1),1500),flashFavicon()},()=>{_externalShowAddModal=null,_externalFlashTrigger=null}),[]);let isKanbanPage=typeof document<"u"&&document.body.hasAttribute("data-vibeflow-cli-kanban");return(0,import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment,{children:[!isKanbanPage&&!isHidden&&(0,import_jsx_runtime32.jsx)(CornerTrigger,{onClick:onOpenKanban,flashing:triggerFlashing,onHide:()=>setIsHidden(!0)}),addModalOpts!==null&&(0,import_jsx_runtime32.jsx)(OverlayAddModal,{opts:addModalOpts,onClose:()=>setAddModalOpts(null),onSubmit:(selector,cssSelector,title,description,status,type,meta)=>{onSubmitTask(selector,cssSelector,title,description,status,type,meta),setAddModalOpts(null)}})]})}function buildTypePickerEl(initialType="Task"){let selectedType=initialType,detailed=TASK_TYPES,currentInfo=()=>detailed.find(t=>t.value===selectedType)??detailed[0],container=el("div",{className:"type-picker"}),trigger=el("button",{className:"type-picker-trigger",type:"button"}),dropdown=el("div",{className:"type-picker-dropdown"}),refresh=()=>{let info=currentInfo();trigger.title=(info==null?void 0:info.tooltip)??"",trigger.replaceChildren(el("span",{className:"type-picker-icon"},(info==null?void 0:info.icon)??""),el("span",{className:"type-picker-label"},(info==null?void 0:info.label)??"")),dropdown.replaceChildren();for(let t of detailed){let opt=el("button",{className:t.value===selectedType?"type-picker-option type-picker-option--active":"type-picker-option",type:"button",title:t.tooltip},el("span",{className:"type-picker-icon"},t.icon),el("span",{className:"type-picker-label"},t.label));opt.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),selectedType=t.value,refresh(),dropdown.classList.remove("open")}),dropdown.appendChild(opt)}};return trigger.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),dropdown.classList.toggle("open")}),refresh(),container.append(trigger,dropdown),{el:container,getValue:()=>selectedType,setValue:v=>{selectedType=v,refresh()}}}function renderMarkdown2(md){return md?md.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/^### (.+)$/gm,"<h3>$1</h3>").replace(/^## (.+)$/gm,"<h2>$1</h2>").replace(/^# (.+)$/gm,"<h1>$1</h1>").replace(/[*][*](.+?)[*][*]/g,"<strong>$1</strong>").replace(/__(.+?)__/g,"<strong>$1</strong>").replace(/[*](.+?)[*]/g,"<em>$1</em>").replace(/_([^_]+?)_/g,"<em>$1</em>").replace(/`(.+?)`/g,"<code>$1</code>").replace(/^[-*] (.+)$/gm,"<li>$1</li>").replace(/^---$/gm,"<hr>").replace(/(<li>[\s\S]*?<\/li>\n?)+/g,m=>`<ul>${m}</ul>`).replace(/^(?!<[a-z]|$).+$/gm,line=>`<p>${line}</p>`):'<span class="modal-preview-empty">No description yet</span>'}function showEditModal(task){if(!state.root)return;state.editModal&&(state.editModal.remove(),state.editModal=null);let titleInput=el("input",{type:"text",placeholder:"Task title..."});titleInput.value=task.title??"";let statusSelect=el("select");for(let s of["backlog","todo","in-progress","review","done"]){let opt=el("option",{value:s},s);s===task.status&&(opt.selected=!0),statusSelect.appendChild(opt)}let typePicker=buildTypePickerEl(task.type??"Task"),header=el("div",{className:"modal-header"},titleInput,typePicker.el,statusSelect),tabEdit=el("div",{className:"modal-tab active"},"Edit"),tabPreview=el("div",{className:"modal-tab"},"Preview"),tabs=el("div",{className:"modal-tabs"},tabEdit,tabPreview),textarea=el("textarea",{placeholder:"Description (markdown supported)..."});textarea.value=task.description??"";let editorPane=el("div",{className:"modal-editor-pane"},textarea),previewPane=el("div",{className:"modal-preview-pane"});previewPane.style.display="none";let refreshPreview=()=>{previewPane.innerHTML=renderMarkdown2(textarea.value)},body=el("div",{className:"modal-body"},editorPane,previewPane);tabEdit.addEventListener("click",()=>{tabEdit.classList.add("active"),tabPreview.classList.remove("active"),editorPane.style.display="",previewPane.style.display="none"}),tabPreview.addEventListener("click",event=>{event.isTrusted&&(tabPreview.classList.add("active"),tabEdit.classList.remove("active"),editorPane.style.display="none",previewPane.style.display="",refreshPreview())});let btnSave=el("button",{className:"btn-primary"},"Save"),btnCancel=el("button",{className:"btn-ghost"},"Cancel"),footerLeft=el("div",{className:"modal-footer-left"},btnSave,btnCancel),footerRight=el("div",{className:"modal-footer-right"}),footerCenter=buildSourceRow({file:task.file,line:task.line,col:task.col,component:task.component}),footer=el("div",{className:"modal-footer"},footerLeft,footerCenter,footerRight),modal=el("div",{className:"vibeflow-modal"},header,tabs,body,footer),backdrop=el("div",{className:"vibeflow-modal-backdrop"},modal);state.editModal=backdrop,state.root.appendChild(backdrop),titleInput.focus(),backdrop.addEventListener("click",e=>{e.target===backdrop&&(backdrop.remove(),state.editModal=null)}),btnSave.addEventListener("click",()=>{let newTitle=titleInput.value.trim();if(!newTitle)return;let url=PROTO_CONFIG.boardId?`${PROTO_CONFIG.apiUrl}/${task.id}?boardId=${encodeURIComponent(PROTO_CONFIG.boardId)}`:`${PROTO_CONFIG.apiUrl}/${task.id}`;fetch(url,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:newTitle,status:statusSelect.value,type:typePicker.getValue(),description:textarea.value.trim()})}).then(r=>r.json()).then(d=>{d.success&&fetchTasksAndRender()}).catch(err=>console.error("[Vibeflow Studio]",err)),backdrop.remove(),state.editModal=null}),btnCancel.addEventListener("click",()=>{backdrop.remove(),state.editModal=null}),document.addEventListener("keydown",function onModalKey(e){if(!state.editModal){document.removeEventListener("keydown",onModalKey);return}e.key==="Escape"&&(backdrop.remove(),state.editModal=null,document.removeEventListener("keydown",onModalKey)),(e.ctrlKey||e.metaKey)&&e.key==="Enter"&&(btnSave.click(),document.removeEventListener("keydown",onModalKey))})}function fetchTasksAndRender(){fetchTasks()}function buildSourceRow(src){let row=el("div",{className:"modal-source-row"});if(!src.file&&!src.component)return row;let label="";src.file?(label=src.file.replace(/\\/g,"/").split("/").slice(-2).join("/"),src.line!=null&&(label+=`:${src.line}`),src.col!=null&&(label+=`:${src.col}`)):src.component&&(label=`\u2B21 ${src.component}`),src.component&&src.file&&(label+=` \xB7 \u2B21 ${src.component}`);let sourceEl=el("span",{className:"modal-source-label",title:src.file??""},label);if(src.file&&src.line!=null){let link=el("a",{className:"modal-source-link",title:"Open in editor",href:`vscode://file${src.file}:${src.line}`,target:"_blank"},"\u2197");row.append(sourceEl,link)}else row.append(sourceEl);return row}function showInspectModal(element,pointer){if(!state.root)return;state.editModal&&(state.editModal.remove(),state.editModal=null);let cssSelector=buildCssSelector(element),tag=element.tagName.toLowerCase(),elId=element.getAttribute("id"),classes=Array.from(element.classList).filter(c=>!c.startsWith("vibeflow-")),dataAttrs=Array.from(element.attributes).filter(a=>a.name.startsWith("data-")&&!a.name.startsWith("data-proto")).map(a=>({name:a.name,value:a.value})),heading=el("div",{className:"inspect-heading"},el("span",{className:"inspect-tag"},`<${tag}>`),el("span",{className:"inspect-title"},"Element Inspector")),closeBtn=el("button",{className:"inspect-close"},"\u2715");function makeRow(label,value,copyable=!0){let row=el("div",{className:"inspect-row"}),lbl=el("span",{className:"inspect-row-label"},label),val=el("code",{className:"inspect-row-value"},value||"\u2014");if(row.append(lbl,val),copyable&&value){let btn=el("button",{className:"inspect-copy-btn",title:"Copy"},"\u2398");btn.addEventListener("click",()=>{var _a;(_a=navigator.clipboard)==null||_a.writeText(value).catch(()=>{}),btn.textContent="\u2713",setTimeout(()=>{btn.textContent="\u2398"},1200)}),row.appendChild(btn)}return row}let rows=el("div",{className:"inspect-rows"});if(rows.appendChild(makeRow("Selector",pointer.selector)),cssSelector!==pointer.selector&&rows.appendChild(makeRow("CSS selector",cssSelector)),pointer.test_id&&rows.appendChild(makeRow("Test ID",pointer.test_id)),elId&&rows.appendChild(makeRow("id",elId)),classes.length>0&&rows.appendChild(makeRow("Classes",classes.join(" "))),pointer.file){let fileLine=pointer.file+(pointer.line!=null?`:${pointer.line}`:"")+(pointer.col!=null?`:${pointer.col}`:""),srcRow=makeRow("Source file",fileLine);if(pointer.line!=null){let openLink=el("a",{className:"inspect-copy-btn",title:"Open in VS Code",href:`vscode://file${pointer.file}:${pointer.line}`,target:"_blank"},"\u2197");srcRow.appendChild(openLink)}rows.appendChild(srcRow)}pointer.component&&rows.appendChild(makeRow("Component",pointer.component));for(let attr of dataAttrs)rows.appendChild(makeRow(attr.name,attr.value));let copyAllBtn=el("button",{className:"inspect-copy-all-btn"},"\u2398 Copy all");copyAllBtn.addEventListener("click",()=>{var _a;let lines=[];pointer.file&&lines.push(`Source: ${pointer.file}${pointer.line!=null?`:${pointer.line}`:""}${pointer.col!=null?`:${pointer.col}`:""}`),pointer.component&&lines.push(`Component: ${pointer.component}`),pointer.test_id&&lines.push(`TestID: ${pointer.test_id}`),lines.push(`Selector: ${pointer.selector}`),cssSelector!==pointer.selector&&lines.push(`CSS selector: ${cssSelector}`),elId&&lines.push(`id: ${elId}`),classes.length>0&&lines.push(`Classes: ${classes.join(" ")}`),(_a=navigator.clipboard)==null||_a.writeText(lines.join(`
1577
1608
  `)).catch(()=>{}),copyAllBtn.textContent="\u2713 Copied!",setTimeout(()=>{copyAllBtn.textContent="\u2398 Copy all"},1500)});let box=el("div",{className:"vibeflow-inspect-modal"},el("div",{className:"inspect-header"},heading,closeBtn),rows,el("div",{className:"inspect-footer"},copyAllBtn)),backdrop=el("div",{className:"vibeflow-modal-backdrop"},box);state.editModal=backdrop,state.root.appendChild(backdrop),closeBtn.addEventListener("click",()=>{backdrop.remove(),state.editModal=null}),backdrop.addEventListener("click",e=>{e.target===backdrop&&(backdrop.remove(),state.editModal=null)}),document.addEventListener("keydown",function onInspectKey(e){if(!state.editModal){document.removeEventListener("keydown",onInspectKey);return}e.key==="Escape"&&(backdrop.remove(),state.editModal=null,document.removeEventListener("keydown",onInspectKey))})}function getTaskTypeTooltip(type){var _a;return((_a=TASK_TYPES.find(t=>t.value===(type??"Task")))==null?void 0:_a.tooltip)??""}function buildOverlayTaskCard(task,options){let{currentPath,onOpen,onDone,onDelete,showSelector=!0,showDescription=!0,showActions=!1}=options,statusBadge=el("span",{className:`status-badge status-${task.status.replace(" ","-")}`},task.status),effectiveType=task.type??"Task",typeBadge=el("span",{className:`type-badge type-badge-${effectiveType.toLowerCase()}`,title:getTaskTypeTooltip(effectiveType)},effectiveType),header=el("div",{className:"task-card-header"},statusBadge,typeBadge);task.status==="in-progress"&&header.appendChild(el("span",{className:"task-spinner"})),task.url&&task.url!==currentPath&&header.appendChild(el("span",{className:"task-url-badge"},task.url));let icon=getTaskTypeIcon(task.type),card=el("div",{className:task.status==="in-progress"?"task-card in-progress":"task-card"},el("span",{className:"task-watermark",title:`Type: ${task.type??"Task"}`},icon),header,el("div",{className:"task-title"},task.title??"Untitled"));if(showSelector&&card.appendChild(el("div",{className:"task-selector"},task.selector)),showDescription&&task.description&&card.appendChild(el("div",{className:"task-description"},task.description)),card.addEventListener("click",e=>{var _a,_b;(_b=(_a=e.target).closest)!=null&&_b.call(_a,".task-actions")||onOpen(task)}),showActions){let actions=el("div",{className:"task-actions"});if(task.status!=="done"&&onDone){let doneBtn=el("button",{className:"done-btn"},"\u2713 Done");doneBtn.addEventListener("click",e=>{e.stopPropagation(),onDone(task)}),actions.appendChild(doneBtn)}if(onDelete){let deleteBtn=el("button",{className:"delete-btn"},"\u2715");deleteBtn.addEventListener("click",e=>{e.stopPropagation(),onDelete(task)}),actions.appendChild(deleteBtn)}card.appendChild(actions)}return card}function renderIndicators(){if(!state.indicatorContainer||(state.indicatorContainer.replaceChildren(),forceHideTooltip(),!state.indicatorsVisible||state.tasks.length===0))return;let currentPath=location.pathname,pageTasks=state.tasks.filter(t=>!t.url||t.url===currentPath);if(pageTasks.length===0)return;let bySelector={};for(let t of pageTasks){let domSel=t.cssSelector||t.selector;bySelector[domSel]||(bySelector[domSel]=[]),bySelector[domSel].push(t)}let vpW=window.innerWidth||document.documentElement.clientWidth,vpH=window.innerHeight||document.documentElement.clientHeight;for(let sel of Object.keys(bySelector)){let group=bySelector[sel],targetEl;try{targetEl=document.querySelector(sel)}catch{continue}if(!targetEl)continue;let rect=targetEl.getBoundingClientRect();if(rect.width===0&&rect.height===0||rect.bottom<0||rect.top>vpH||rect.right<0||rect.left>vpW)continue;let activeTasks=group.filter(t=>t.status!=="done"),allDone=activeTasks.length===0;if(allDone&&!state.sidebarShowDone)continue;let indicator=el("div",{className:"vibeflow-task-indicator"+(allDone?" all-done":"")});indicator.textContent=allDone?"\u2713":String(activeTasks.length),indicator.style.left=`${rect.right-10}px`,indicator.style.top=`${rect.top-10}px`;let grp=group,capturedAllDone=allDone;indicator.addEventListener("mouseenter",()=>{state.tooltipPinned||showIndicatorTooltip(indicator,grp)}),indicator.addEventListener("mouseleave",e=>{if(state.tooltipPinned)return;let rel=e.relatedTarget;state.activeTooltip&&rel&&(rel===state.activeTooltip||state.activeTooltip.contains(rel))||hideIndicatorTooltip()}),indicator.addEventListener("click",e=>{e.stopPropagation(),grp.length===1?(forceHideTooltip(),showEditModal(grp[0])):(forceHideTooltip(),showIndicatorTooltip(indicator,grp),state.tooltipPinned=!0)}),state.indicatorContainer.appendChild(indicator)}}function scheduleRenderIndicators(){state.indicatorRafId||(state.indicatorRafId=requestAnimationFrame(()=>{state.indicatorRafId=null,renderIndicators()}))}function hideIndicatorTooltip(){state.tooltipPinned||state.activeTooltip&&(state.activeTooltip.remove(),state.activeTooltip=null)}function forceHideTooltip(){state.tooltipPinned=!1,state.activeTooltip&&(state.activeTooltip.remove(),state.activeTooltip=null)}function showIndicatorTooltip(indicator,group){if(!state.root)return;hideIndicatorTooltip();let tooltip=el("div",{className:"vibeflow-task-tooltip"}),closeBtn=el("button",{className:"tooltip-close-btn"},"\u2715");closeBtn.addEventListener("click",e=>{e.stopPropagation(),forceHideTooltip()}),tooltip.appendChild(closeBtn);for(let task of group){let card=buildOverlayTaskCard(task,{currentPath:location.pathname,showSelector:!1,showDescription:!0,showActions:!1,onOpen:capturedTask=>{forceHideTooltip(),showEditModal(capturedTask)}});tooltip.appendChild(card)}let iRect=indicator.getBoundingClientRect();tooltip.style.left=`${Math.min(iRect.right+6,window.innerWidth-330)}px`,tooltip.style.top=`${Math.max(4,Math.min(iRect.top-8,window.innerHeight-420))}px`,tooltip.addEventListener("mouseleave",hideIndicatorTooltip),state.root.appendChild(tooltip),state.activeTooltip=tooltip}function setupIndicatorScrollRefresh(){window.addEventListener("scroll",scheduleRenderIndicators,!0),window.addEventListener("resize",scheduleRenderIndicators)}function setupInteractionDebounce(host){let interactionDebounce=null;function onUserInteraction(e){e.composedPath().indexOf(host)===-1&&(interactionDebounce&&clearTimeout(interactionDebounce),interactionDebounce=setTimeout(()=>{interactionDebounce=null,renderIndicators()},150))}document.addEventListener("click",onUserInteraction,!0),document.addEventListener("keyup",onUserInteraction,!0)}function setupClickOutsideTooltipClose(host){document.addEventListener("click",e=>{!state.tooltipPinned||!state.activeTooltip||(e.composedPath?e.composedPath():[e.target]).includes(host)||forceHideTooltip()},!0)}function detectReactQuality(root=document){let sampleElements=Array.from(root.querySelectorAll("*")).slice(0,50),hasReact=!1,hasDebugSource=!1,hasDebugOwner=!1;for(let elem of sampleElements){for(let key of Object.keys(elem)){if(!key.startsWith("__reactFiber$")&&!key.startsWith("__reactInternalInstance"))continue;hasReact=!0;let fiber=elem[key];if(fiber!=null&&fiber._debugSource){hasDebugSource=!0;break}if(fiber!=null&&fiber._debugStack){hasDebugSource=!0;break}fiber!=null&&fiber._debugOwner&&(hasDebugOwner=!0)}if(hasDebugSource)break}return hasReact?hasDebugSource?"full":hasDebugOwner?"partial":"none":"not-react"}var SHOWN_KEY="vibeflow-react-quality-shown";function hasShownQualityModal(){try{return!!localStorage.getItem(SHOWN_KEY)}catch{return!1}}function markQualityModalShown(){try{localStorage.setItem(SHOWN_KEY,"1")}catch{}}function showReactQualityModal(quality){if(!state.root)return;closeReactQualityModal(),markQualityModalShown();let levelCards=[{icon:"\u{1F7E2}",label:"Full context",color:"#4ade80",desc:"React dev mode + source maps. Component name + source file + line.",active:quality==="full"},{icon:"\u{1F7E1}",label:"Partial",color:"#fbbf24",desc:"React dev mode, but no debug stack found. Component name only.",active:quality==="partial"},{icon:"\u{1F534}",label:"No context",color:"#f87171",desc:"Production build. DOM selectors only \u2014 no component or source info.",active:quality==="none"}].map(lv=>{let card=el("div",{className:"rq-level"+(lv.active?" rq-level--active":"")});return card.appendChild(el("div",{className:"rq-level-icon"},lv.icon)),card.appendChild(Object.assign(el("div",{className:"rq-level-label"},lv.label),{style:`color:${lv.color}`})),card.appendChild(el("div",{className:"rq-level-desc"},lv.desc)),card}),levelRow=el("div",{className:"rq-levels"},...levelCards),heading=el("div",{className:"rq-heading"},{full:"You have full context",partial:"You have partial context",none:"No React context available","not-react":"React not detected"}[quality]??"React context"),features=buildFeatureRows(quality),header=el("div",{className:"rq-header"},heading,levelRow),body=el("div",{className:"rq-body"},...features),closeBtn=el("button",{className:"rq-close",title:"Close","aria-label":"Close"},"\u2715"),btnContinue=el("button",{className:"rq-btn rq-btn-secondary"},"Continue annotating"),footer=el("div",{className:"rq-footer"},btnContinue),modal=el("div",{className:"vibeflow-rq-modal",id:"vibeflow-rq-modal"},closeBtn,header,body,footer),overlay=el("div",{className:"vibeflow-rq-overlay",id:"vibeflow-rq-overlay"},modal);function close(){overlay.remove()}closeBtn.addEventListener("click",close),btnContinue.addEventListener("click",close),overlay.addEventListener("click",e=>{e.target===overlay&&close()}),state.root.appendChild(overlay)}function closeReactQualityModal(){var _a,_b;(_b=(_a=state.root)==null?void 0:_a.querySelector("#vibeflow-rq-overlay"))==null||_b.remove()}function featureRow(icon,text,detail){let row=el("div",{className:"rq-feature"});row.appendChild(el("span",{className:"rq-feature-icon"},icon));let textEl=el("div",{className:"rq-feature-text"});return textEl.appendChild(el("strong",null,text)),textEl.appendChild(el("span",null," \u2014 "+detail)),row.appendChild(textEl),row}function codeBlock(code){let pre=el("pre",{className:"rq-codeblock"});return pre.appendChild(el("code",null,code)),pre}function sectionTitle(title){return el("div",{className:"rq-section-title"},title)}function buildFeatureRows(quality){let rows=[];return rows.push(sectionTitle("What is captured now")),rows.push(featureRow("\u2705","CSS selector","always available \u2014 stable element targeting")),quality==="full"?(rows.push(featureRow("\u2705","Component name","from React fiber (_debugOwner)")),rows.push(featureRow("\u2705","Source file + line","resolved via source maps (React 18.3+ _debugStack or legacy _debugSource)")),rows.push(el("div",{className:"rq-note rq-note--success"},"You have the best possible context. Your agent receives component name, source file, and line number for each annotation.")),rows):(quality==="partial"&&(rows.push(featureRow("\u2705","Component name","from React fiber (_debugOwner)")),rows.push(featureRow("\u274C","Source file + line","no debug stack found on React fibers")),rows.push(sectionTitle("How to get source file + line")),rows.push(el("div",{className:"rq-note rq-note--amber"},"Source file resolution requires React dev mode with debug stacks (_debugStack / _debugSource) and source maps served by your bundler. Both are enabled by default when running in development mode.")),rows.push(codeBlock(`# Next.js
1578
1609
  next dev (or: npm run dev)
1579
1610
 
@@ -1635,7 +1666,6 @@ lucide-react/dist/esm/shared/src/utils.js:
1635
1666
  lucide-react/dist/esm/defaultAttributes.js:
1636
1667
  lucide-react/dist/esm/Icon.js:
1637
1668
  lucide-react/dist/esm/createLucideIcon.js:
1638
- lucide-react/dist/esm/icons/bot.js:
1639
1669
  lucide-react/dist/esm/icons/circle-check-big.js:
1640
1670
  lucide-react/dist/esm/icons/eye.js:
1641
1671
  lucide-react/dist/esm/icons/lock.js: