@uselay/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var Ao=Object.create;var Le=Object.defineProperty;var Po=Object.getOwnPropertyDescriptor;var Mo=Object.getOwnPropertyNames;var _o=Object.getPrototypeOf,Io=Object.prototype.hasOwnProperty;var Lo=(e,t)=>{for(var o in t)Le(e,o,{get:t[o],enumerable:!0})},Et=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Mo(t))!Io.call(e,r)&&r!==o&&Le(e,r,{get:()=>t[r],enumerable:!(n=Po(t,r))||n.enumerable});return e};var xt=(e,t,o)=>(o=e!=null?Ao(_o(e)):{},Et(t||!e||!e.__esModule?Le(o,"default",{value:e,enumerable:!0}):o,e)),ko=e=>Et(Le({},"__esModule",{value:!0}),e);var Pn={};Lo(Pn,{AIContextCard:()=>Ro,ArchivedThreadsPanel:()=>Fe,CommentActions:()=>Ze,CommentAnchor:()=>Xe,CommentDot:()=>Je,CommentDots:()=>et,CommentItem:()=>Pe,CommentLayer:()=>Ve,CommentThread:()=>je,DetachedCommentsPanel:()=>ze,ElementHighlighter:()=>We,LayProvider:()=>Co,LayToggle:()=>Ge,ReplyInput:()=>qe,captureElementMetadata:()=>Ae,computeContrastRatio:()=>ht,createHostedAdapter:()=>De,createMemoryAdapter:()=>ke,findByFingerprint:()=>$e,formatRelativeTime:()=>Q,generateDomPath:()=>he,generateFingerprint:()=>Be,getGuestAuthor:()=>le,isAIContextReview:()=>_e,isAIContextSupport:()=>Eo,isCommentable:()=>ye,isGeneratedClassName:()=>mt,parseUserAgent:()=>yt,persistGuestName:()=>Ee,resolveAuthor:()=>te,resolveEffectiveBackground:()=>pt,resolveElement:()=>Qe,saveGuestAuthor:()=>Ke,scoreFingerprintMatch:()=>dt,summarizeDomPath:()=>He,useCommentMode:()=>Oe,useComments:()=>Z,useElementSelector:()=>Ue,useLayContext:()=>R});module.exports=ko(Pn);var M=require("react");function Do(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function ke(){let e=[],t=new Set;function o(n){t.forEach(r=>r(n))}return{async getConfig(){return{mode:"review",active:!0}},async getComments(n,r,a){let s=e.filter(i=>i.project_id===n&&i.url_path===r);return a?.sessionToken&&(s=s.filter(i=>i.author.id===a.sessionToken)),s},async addComment(n){let r=new Date().toISOString(),a={...n,id:Do(),created_at:r,updated_at:r};return e.push(a),o({type:"INSERT",comment:a}),a},async updateComment(n,r){let a=e.findIndex(i=>i.id===n);if(a===-1)throw new Error(`Comment not found: ${n}`);let s={...e[a],...r,updated_at:new Date().toISOString()};return e[a]=s,o({type:"UPDATE",comment:s}),s},async uploadScreenshot(){},subscribe(n,r){return t.add(r),()=>{t.delete(r)}}}}var No="https://uselay.com",Oo="Lay:";function rt(e){console.warn(`${Oo} ${e}`)}function De(e){let t=typeof e=="string"?{apiUrl:e}:e??{},o=(t.apiUrl??No).replace(/\/$/,""),n=t.ai!==!1;function r(s){return s?{Authorization:`Bearer ${s}`}:{}}async function a(s,i,d){let l;try{l=await fetch(`${o}${s}`,{...i,headers:{"Content-Type":"application/json",...r(d),...i?.headers??{}}})}catch{throw rt("Unable to reach API. Comments won't persist."),new Error("Network error")}if(!l.ok){let c=(await l.json().catch(()=>({}))).error??`API error: ${l.status}`;throw l.status===403?rt("This domain is not authorized for this project."):l.status===404&&rt("Invalid project ID. Comments won't persist."),new Error(c)}return l.json()}return{async getConfig(s){let i=new URLSearchParams({projectId:s});return a(`/api/v1/config?${i.toString()}`)},async getComments(s,i,d){let l=new URLSearchParams({projectId:s,urlPath:i});return a(`/api/v1/comments?${l.toString()}`,void 0,d?.sessionToken)},async addComment(s,i){return a("/api/v1/comments",{method:"POST",body:JSON.stringify(s),...n?{}:{headers:{"X-FL-AI":"false"}}},i?.sessionToken)},async updateComment(s,i,d){return a(`/api/v1/comments/${s}`,{method:"PATCH",body:JSON.stringify(i)},d?.sessionToken)},async uploadScreenshot(s,i,d,l,m){let c=new FormData;c.append("file",d,`${i}.webp`),c.append("projectId",s),c.append("commentId",i),c.append("elementBounds",JSON.stringify(l));let u={};m?.sessionToken&&(u.Authorization=`Bearer ${m.sessionToken}`);let f;try{f=await fetch(`${o}/api/v1/screenshots`,{method:"POST",headers:u,body:c})}catch{return}f.ok},subscribe(s,i,d){let l=new URLSearchParams({projectId:s});d?.sessionToken&&l.set("token",d.sessionToken);let m=`${o}/api/v1/stream?${l.toString()}`,c=new EventSource(m);return c.onmessage=u=>{try{let f=JSON.parse(u.data);(f.type==="INSERT"||f.type==="UPDATE")&&i(f)}catch{}},c.onerror=()=>{},()=>{c.close()}}}}var k={BASE:1e5,HIGHLIGHT:100001,DOT:100002,POPOVER:100003,TOGGLE:100004};var U={PARTICLE_COUNT:5,PARTICLE_SIZE_MIN:3,PARTICLE_SIZE_MAX:4,DURATION:450,SPREAD_ANGLE:120,DISTANCE_MIN:14,DISTANCE_MAX:28},O={MARKER_HEIGHT:22,MARKER_MIN_WIDTH:20,MARKER_POINTER:4,MARKER_FONT_SIZE:11,MARKER_MAX_COUNT:99,TOGGLE_SIZE:36,BORDER_RADIUS:8,BORDER_RADIUS_SM:6,HIGHLIGHT_OUTLINE:2},Rt={TOGGLE_COMMENT_MODE:"c"},fe={ROOT:"data-fl-root",IGNORE:"data-fl-ignore"},nt={ANCESTOR_DEPTH:4,PROXIMITY_THRESHOLD:30},wt={MAX_SEGMENTS:3,MAX_LENGTH:50},Ce={WIDTH:320,COLLAPSED_HEIGHT:40,GAP:8,EXPAND_DURATION:150},Tt=[{label:"Visual bug",value:"Visual bug"},{label:"Copy issue",value:"Copy issue"},{label:"Love this",value:"Love this"}],Ne={HOVER_DELAY:300,MAX_CONTENT_LENGTH:60},At={id:null,name:"Anonymous",avatar:null};var at="lay_session_";function Pt(e){try{return localStorage.getItem(`${at}${e}`)}catch{return null}}function Mt(e,t){try{localStorage.setItem(`${at}${e}`,t)}catch{}}function _t(e){try{localStorage.removeItem(`${at}${e}`)}catch{}}var V=require("react"),zt=require("react-dom");var we=require("react");var It=require("react");function R(){let e=(0,It.useContext)(st);if(!e)throw new Error("useLayContext must be used within a <LayProvider />. Wrap your app in <LayProvider> to use uselay.");return e}function Oe(){let{isCommentMode:e,dispatch:t}=R(),o=(0,we.useCallback)(()=>{t({type:"TOGGLE_COMMENT_MODE"})},[t]),n=(0,we.useCallback)(r=>{t({type:"SET_COMMENT_MODE",payload:r})},[t]);return(0,we.useEffect)(()=>{function r(a){let s=a.target;s.tagName==="INPUT"||s.tagName==="TEXTAREA"||s.tagName==="SELECT"||s.isContentEditable||a.key.toLowerCase()===Rt.TOGGLE_COMMENT_MODE&&!a.metaKey&&!a.ctrlKey&&!a.altKey&&(a.preventDefault(),o())}return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[o]),{isCommentMode:e,toggleCommentMode:o,setCommentMode:n}}var pe=require("react");function Z(){let{comments:e,detachedDomPaths:t}=R(),o=(0,pe.useMemo)(()=>{let m=new Map;for(let c of e){let u=m.get(c.dom_path);u?u.push(c):m.set(c.dom_path,[c])}return Array.from(m,([c,u])=>({domPath:c,comments:u}))},[e]),n=(0,pe.useMemo)(()=>{let m=new Map;for(let c of e){let u=m.get(c.dom_path);u?u.push(c):m.set(c.dom_path,[c])}return Array.from(m,([c,u])=>{let f=[],g=new Map;for(let x of u)if(x.thread_id===null)f.push(x);else{let y=g.get(x.thread_id);y?y.push(x):g.set(x.thread_id,[x])}f.sort((x,y)=>new Date(x.created_at).getTime()-new Date(y.created_at).getTime());let N=f.map(x=>{let y=g.get(x.id)??[];return y.sort((A,X)=>new Date(A.created_at).getTime()-new Date(X.created_at).getTime()),{root:x,replies:y}});return{domPath:c,threads:N,allComments:u}})},[e]),r=(0,pe.useMemo)(()=>e.filter(c=>c.thread_id===null&&c.status==="archived").map(c=>{let u=e.filter(f=>f.thread_id===c.id).sort((f,g)=>new Date(f.created_at).getTime()-new Date(g.created_at).getTime());return{root:c,replies:u}}),[e]),a=r.length,s=(0,pe.useMemo)(()=>t.size===0?[]:e.filter(c=>c.thread_id===null&&t.has(c.dom_path)&&c.status!=="archived").map(c=>{let u=e.filter(f=>f.thread_id===c.id).sort((f,g)=>new Date(f.created_at).getTime()-new Date(g.created_at).getTime());return{root:c,replies:u}}),[e,t]),i=s.length,d=(0,pe.useMemo)(()=>{let m=new Map;for(let c of e)c.thread_id!==null||m.get(c.dom_path)===!1||m.set(c.dom_path,c.status==="resolved"||c.status==="archived");return c=>m.get(c)??!1},[e]),l=(0,pe.useMemo)(()=>{let m=new Map;for(let c of e)c.thread_id!==null||m.get(c.dom_path)===!1||m.set(c.dom_path,c.status==="archived");return c=>m.get(c)??!1},[e]);return{comments:e,groupedByDomPath:o,threadsByDomPath:n,archivedThreads:r,archivedCount:a,detachedThreads:s,detachedCount:i,isDomPathFullyResolved:d,isDomPathFullyArchived:l}}var J=require("react"),Lt=require("react-dom");var W=require("react/jsx-runtime"),Fo={position:"fixed",top:"50%",right:60,transform:"translateY(-50%)",width:300,maxHeight:320,backgroundColor:"var(--fl-surface-raised)",border:"1px solid var(--fl-border)",borderRadius:"var(--fl-border-radius)",boxShadow:"var(--fl-shadow-lg)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-base)",color:"var(--fl-text-primary)",display:"flex",flexDirection:"column",overflow:"hidden",zIndex:k.POPOVER},Ho={padding:"10px 12px",fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-text-secondary)",fontFamily:"var(--fl-font-family)",borderBottom:"1px solid var(--fl-border)",flexShrink:0},zo={overflowY:"auto",flexGrow:1,minHeight:0},Go={padding:"20px 12px",textAlign:"center",fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Bo={padding:"10px 12px",borderBottom:"1px solid var(--fl-border)",fontFamily:"var(--fl-font-family)"},$o={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)",lineHeight:"var(--fl-line-height)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},Uo={display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:4},Wo={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},kt={display:"inline-flex",alignItems:"center",padding:"2px 8px",border:"none",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"transparent",color:"var(--fl-text-tertiary)",cursor:"pointer",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",transition:"color var(--fl-duration-fast) ease-out"},Ko={...kt,color:"var(--fl-accent)"};function Xo({thread:e,onRestore:t}){let[o,n]=(0,J.useState)(!1);return(0,W.jsxs)("div",{style:Bo,children:[(0,W.jsxs)("div",{style:$o,children:["\u201C",e.root.content,"\u201D"]}),(0,W.jsxs)("div",{style:Uo,children:[(0,W.jsx)("span",{style:Wo,children:e.root.author.name}),(0,W.jsx)("button",{type:"button",style:o?Ko:kt,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),onClick:()=>t(e.root),children:"Restore"})]})]})}function Fe({onClose:e}){let{portalRoot:t,adapter:o,config:n,dispatch:r}=R(),{archivedThreads:a}=Z(),s=(0,J.useRef)(null),i=(0,J.useCallback)(d=>{let l={...d,status:"open",resolved_by:null,resolved_at:null,archived_at:null};r({type:"UPDATE_COMMENT",payload:l}),o.updateComment(d.id,{status:"open",resolved_by:null,resolved_at:null,archived_at:null}).catch(()=>{r({type:"UPDATE_COMMENT",payload:d})})},[o,r]);return(0,J.useEffect)(()=>{function d(l){l.key==="Escape"&&(l.preventDefault(),e())}return document.addEventListener("keydown",d,!0),()=>document.removeEventListener("keydown",d,!0)},[e]),(0,J.useEffect)(()=>{function d(m){let c=m.target;s.current?.contains(c)||c.closest("[data-fl-ignore]")||e()}let l=setTimeout(()=>{document.addEventListener("mousedown",d,!0)},50);return()=>{clearTimeout(l),document.removeEventListener("mousedown",d,!0)}},[e]),t?(0,Lt.createPortal)((0,W.jsxs)("div",{ref:s,style:Fo,"data-fl-ignore":"",children:[(0,W.jsx)("div",{style:Ho,children:"Archived Threads"}),(0,W.jsx)("div",{style:zo,children:a.length===0?(0,W.jsx)("div",{style:Go,children:"No archived threads on this page."}):a.map(d=>(0,W.jsx)(Xo,{thread:d,onRestore:i},d.root.id))})]}),t):null}var Te=require("react"),Ft=require("react-dom");function Q(e){let t=new Date(e),o=new Date,n=o.getTime()-t.getTime(),r=Math.floor(n/1e3),a=Math.floor(r/60),s=Math.floor(a/60),i=Math.floor(s/24);if(r<60)return"just now";if(a<60)return`${a} min ago`;if(s<24)return`${s} hr ago`;if(i===1)return"Yesterday";let d=t.toLocaleString("en-US",{month:"short"}),l=t.getDate();return t.getFullYear()===o.getFullYear()?`${d} ${l}`:`${d} ${l}, ${t.getFullYear()}`}var Dt={nav:"navigation",main:"main",header:"header",footer:"footer",section:"section",article:"article",aside:"sidebar",form:"form",table:"table",ul:"list",ol:"list",li:"item",h1:"heading",h2:"heading",h3:"heading",h4:"heading",h5:"heading",h6:"heading",p:"text",img:"image",figure:"figure",video:"video",picture:"image",button:"button",a:"link",input:"input",select:"dropdown",textarea:"text input"};function Vo(e){let t=e.tagName.toLowerCase();if(e.id)return`#${e.id}`;let o=e.getAttribute("aria-label");if(o)return`"${it(o,20)}"`;if(["button","a","h1","h2","h3","h4","h5","h6"].includes(t)){let r=e.textContent?.trim();if(r&&r.length<=25)return`"${it(r,20)}" ${Dt[t]??t}`}let n=e.getAttribute("data-testid")??e.getAttribute("data-feedback-id");return n||(Dt[t]??t)}function Ot(e){let t=[],o=e;for(;o&&o!==document.body&&(t.unshift(Vo(o)),!o.id);)o=o.parentElement;return e.closest("[id]")||t.unshift("page"),t.slice(-wt.MAX_SEGMENTS)}function He(e){let t=e.split(/\s*>\s*/);if(t.length===0)return e;let o=Nt(t[t.length-1]),n="";for(let a=t.length-2;a>=0;a--){let s=t[a];if(s.includes("#")||s.includes("[data-feedback-id")||s.includes("[data-testid")){n=Nt(s);break}let i=s.split(/[.:[\s]/)[0];if(["main","nav","header","footer","section","article","aside","form"].includes(i)){n=i;break}}let r=n?`${o} in ${n}`:o;return it(r,30)}function Nt(e){let t=e.match(/\[data-(?:feedback-id|testid)="([^"]+)"\]/);if(t)return t[1];let o=e.match(/#([a-zA-Z0-9_-]+)/);if(o)return`#${o[1]}`;let n=e.match(/^([a-z]+)\.([a-zA-Z0-9_-]+)/);if(n)return`${n[1]}.${n[2]}`;let r=e.match(/^([a-z]+):nth-child\(\d+\)/);return r?r[1]:e}function it(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}var z=require("react/jsx-runtime"),Yo={position:"fixed",top:"50%",right:60,transform:"translateY(-50%)",width:300,maxHeight:320,backgroundColor:"var(--fl-surface-raised)",borderWidth:1,borderStyle:"solid",borderColor:"var(--fl-border)",borderRadius:"var(--fl-border-radius)",boxShadow:"var(--fl-shadow-lg)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-base)",color:"var(--fl-text-primary)",display:"flex",flexDirection:"column",overflow:"hidden",zIndex:k.POPOVER},Zo={padding:"10px 12px",fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-text-secondary)",fontFamily:"var(--fl-font-family)",borderBottomWidth:1,borderBottomStyle:"solid",borderBottomColor:"var(--fl-border)",flexShrink:0},qo={padding:"6px 12px 8px",fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",lineHeight:1.4},jo={overflowY:"auto",flexGrow:1,minHeight:0},Jo={padding:"20px 12px",textAlign:"center",fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Qo={padding:"10px 12px",borderBottomWidth:1,borderBottomStyle:"solid",borderBottomColor:"var(--fl-border)",fontFamily:"var(--fl-font-family)"},er={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)",lineHeight:"var(--fl-line-height)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},tr={display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:4},or={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},rr={fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},nr={marginTop:4,fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",fontStyle:"italic"};function ar({thread:e}){let t=He(e.root.dom_path);return(0,z.jsxs)("div",{style:Qo,children:[(0,z.jsxs)("div",{style:er,children:["\u201C",e.root.content,"\u201D"]}),(0,z.jsxs)("div",{style:tr,children:[(0,z.jsx)("span",{style:or,children:e.root.author.name}),(0,z.jsx)("span",{style:rr,children:Q(e.root.created_at)})]}),(0,z.jsxs)("div",{style:nr,children:["Was on: ",t]})]})}function ze({onClose:e}){let{portalRoot:t}=R(),{detachedThreads:o}=Z(),n=(0,Te.useRef)(null);return(0,Te.useEffect)(()=>{function r(a){a.key==="Escape"&&(a.preventDefault(),e())}return document.addEventListener("keydown",r,!0),()=>document.removeEventListener("keydown",r,!0)},[e]),(0,Te.useEffect)(()=>{function r(s){let i=s.target;n.current?.contains(i)||i.closest("[data-fl-ignore]")||e()}let a=setTimeout(()=>{document.addEventListener("mousedown",r,!0)},50);return()=>{clearTimeout(a),document.removeEventListener("mousedown",r,!0)}},[e]),t?(0,Ft.createPortal)((0,z.jsxs)("div",{ref:n,style:Yo,"data-fl-ignore":"",children:[(0,z.jsx)("div",{style:Zo,children:"Detached Comments"}),(0,z.jsx)("div",{style:qo,children:"These comments can't find their original element."}),(0,z.jsx)("div",{style:jo,children:o.length===0?(0,z.jsx)("div",{style:Jo,children:"No detached comments on this page."}):o.map(r=>(0,z.jsx)(ar,{thread:r},r.root.id))})]}),t):null}var D=require("react/jsx-runtime"),ct={position:"fixed",right:16,top:"50%",transform:"translateY(-50%)",width:"var(--fl-toggle-size)",height:"var(--fl-toggle-size)",borderRadius:"50%",borderWidth:1.5,borderStyle:"solid",borderColor:"var(--fl-border)",backgroundColor:"var(--fl-surface-raised)",color:"var(--fl-text-secondary)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",zIndex:k.TOGGLE,boxShadow:"var(--fl-shadow)",animation:"fl-toggle-beam 2s ease-out 1s infinite",transition:"all var(--fl-duration-normal) ease-in-out",padding:0,outline:"none",fontFamily:"var(--fl-font-family)"},sr={...ct,transform:"translateY(-50%) translateX(-4px)",borderColor:"var(--fl-border-strong)",color:"var(--fl-text-primary)",boxShadow:"var(--fl-shadow-lg)"},Gt={...ct,backgroundColor:"var(--fl-accent)",borderColor:"var(--fl-accent)",color:"#FFFFFF",boxShadow:"var(--fl-shadow-lg)",animation:"none"},ir={...Gt,transform:"translateY(-50%) translateX(-4px)"},Bt={position:"absolute",right:"100%",top:"50%",transform:"translateY(-50%)",marginRight:8,padding:"4px 8px",backgroundColor:"var(--fl-text-primary)",color:"var(--fl-surface)",fontSize:"var(--fl-font-size-sm)",fontFamily:"var(--fl-font-family)",fontWeight:"var(--fl-font-weight-medium)",borderRadius:"var(--fl-border-radius-sm)",whiteSpace:"nowrap",pointerEvents:"none",opacity:0,transition:"opacity var(--fl-duration-fast) ease-out"},lr={...Bt,opacity:1},lt={position:"absolute",right:"100%",top:"100%",marginRight:8,marginTop:4,padding:"3px 8px",backgroundColor:"var(--fl-surface-raised)",borderWidth:1,borderStyle:"solid",borderColor:"var(--fl-border)",borderRadius:10,fontSize:"var(--fl-font-size-sm)",fontFamily:"var(--fl-font-family)",fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-text-secondary)",whiteSpace:"nowrap",cursor:"pointer",lineHeight:1.3,transition:"color var(--fl-duration-fast) ease-out, border-color var(--fl-duration-fast) ease-out"},Ht={...lt,color:"var(--fl-text-primary)",borderColor:"var(--fl-border-strong)"};function cr({active:e}){return(0,D.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:e?"#FFFFFF":"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,D.jsx)("path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}),(0,D.jsx)("path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}),(0,D.jsx)("path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}),(0,D.jsx)("path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"})]})}function Ge(){let{isCommentMode:e,toggleCommentMode:t}=Oe(),{portalRoot:o,mode:n}=R(),{archivedCount:r,detachedCount:a}=Z(),s=n!=="support",[i,d]=(0,V.useState)(!1),[l,m]=(0,V.useState)(!1),[c,u]=(0,V.useState)(!1),[f,g]=(0,V.useState)(!1),[N,x]=(0,V.useState)(!1),y=(0,V.useCallback)(h=>{h.stopPropagation(),g(C=>!C),x(!1)},[]),A=(0,V.useCallback)(h=>{h.stopPropagation(),x(C=>!C),g(!1)},[]),X=(0,V.useCallback)(()=>{g(!1)},[]),v=(0,V.useCallback)(()=>{x(!1)},[]);if(!o)return null;let b;return e?b=i?ir:Gt:b=i?sr:ct,(0,zt.createPortal)((0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)("button",{type:"button",onClick:t,onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),style:b,"aria-label":e?"Exit comment mode":"Enter comment mode",[fe.IGNORE]:"",children:[(0,D.jsx)(cr,{active:e}),(0,D.jsx)("span",{style:i?lr:Bt,children:"Comment mode (C)"}),s&&r>0&&(0,D.jsxs)("span",{role:"button",tabIndex:0,style:l?Ht:lt,onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),onClick:y,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),y(h))},children:[r," archived"]}),s&&a>0&&(0,D.jsxs)("span",{role:"button",tabIndex:0,style:{...c?Ht:lt,top:r>0?"calc(100% + 28px)":"100%"},onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1),onClick:A,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),A(h))},children:[a," detached"]})]}),s&&f&&(0,D.jsx)(Fe,{onClose:X}),s&&N&&(0,D.jsx)(ze,{onClose:v})]}),o)}var ie=require("react");function he(e){let t=[],o=e;for(;o&&o!==document.documentElement;){if(o===document.body){t.unshift("body");break}let n=o.getAttribute("data-feedback-id");if(n){t.unshift(`[data-feedback-id="${n}"]`);break}let r=o.getAttribute("data-testid");if(r){t.unshift(`[data-testid="${r}"]`);break}if(o.id){t.unshift(`#${o.id}`);break}let a=o.tagName.toLowerCase(),s=mr(o);if(s.length>0){a+=`.${s[0]}`;let d=o.parentElement;if(d&&Array.from(d.children).filter(m=>m.matches(`${o.tagName.toLowerCase()}.${s[0]}`)).length===1){t.unshift(a),o=o.parentElement;continue}}let i=o.parentElement;if(i){let d=Array.from(i.children);if(d.filter(m=>m.tagName===o.tagName).length>1){let m=d.indexOf(o)+1;a=`${o.tagName.toLowerCase()}:nth-child(${m})`}}t.unshift(a),o=o.parentElement}return t.join(" > ")}function mr(e){return Array.from(e.classList).filter(o=>!mt(o))}function mt(e){return!!(e.length<=2||e.startsWith("_")||/^[a-zA-Z]+_[a-zA-Z0-9]{5,}$/.test(e)||/^css-[a-z0-9]+$/i.test(e)||/^sc-[a-zA-Z0-9]+$/.test(e)||/^[a-z]{1,3}[A-Z][a-zA-Z0-9]{4,}$/.test(e))}function ye(e){let t=e.tagName.toLowerCase();return!(["html","head","script","style","link","meta","noscript","br"].includes(t)||e.closest("[data-fl-root]")||e.hasAttribute("data-fl-ignore"))}var dr=["id","class","role","type","name","href","src","data-testid","data-feedback-id"];function Be(e){let t=e.tagName.toLowerCase(),o=(e.textContent?.trim()??"").slice(0,80),n={};for(let l of dr){let m=e.getAttribute(l);m!==null&&m!==""&&(n[l]=m)}let r=e.parentElement,a=0,s=1;if(r){let l=Array.from(r.children).filter(m=>m.tagName===e.tagName);s=l.length,a=l.indexOf(e)}let i=r?.tagName.toLowerCase()??"",d=r?.parentElement?.tagName.toLowerCase()??"";return{tag:t,textContent:o,attributes:n,siblingIndex:a,siblingCount:s,parentTag:i,grandparentTag:d}}function dt(e,t){if(t.tagName.toLowerCase()!==e.tag)return 0;let o=20,n=(t.textContent?.trim()??"").slice(0,80);n===e.textContent&&n.length>0?o+=25:e.textContent.length>0&&n.length>0&&(n.includes(e.textContent)||e.textContent.includes(n))&&(o+=15);let r=e.attributes;r["data-feedback-id"]&&t.getAttribute("data-feedback-id")===r["data-feedback-id"]&&(o+=30),r["data-testid"]&&t.getAttribute("data-testid")===r["data-testid"]&&(o+=25),r.id&&t.id===r.id&&(o+=20),r.role&&t.getAttribute("role")===r.role&&(o+=5),r.type&&t.getAttribute("type")===r.type&&(o+=5),r.href&&t.getAttribute("href")===r.href&&(o+=10),r.name&&t.getAttribute("name")===r.name&&(o+=5);let a=t.parentElement;a&&a.tagName.toLowerCase()===e.parentTag&&(o+=10);let s=a?.parentElement;return s&&s.tagName.toLowerCase()===e.grandparentTag&&(o+=5),Math.min(o,100)}function $e(e,t=40){let o=document.querySelectorAll(e.tag),n=null,r=0;for(let a of o){if(a.closest("[data-fl-root]")||a.hasAttribute("data-fl-ignore"))continue;let s=dt(e,a);s>r&&(r=s,n=a)}return r>=t?{element:n,score:r}:{element:null,score:r}}var ur=["font-family","font-size","font-weight","color","background-color","padding","margin","width","height","border-radius","display","position","line-height","letter-spacing","text-align","opacity"];function $t(e){let t=e.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/);return t?{r:Number(t[1]),g:Number(t[2]),b:Number(t[3])}:null}function ft(e){if(e==="transparent"||e==="rgba(0, 0, 0, 0)")return!0;let t=e.match(/rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*([\d.]+)\s*\)/);return t?Number(t[1])===0:!1}function Wt(e){let t=window.getComputedStyle(e),o=t.getPropertyValue("background-color");if(o&&!ft(o))return!0;let n=t.getPropertyValue("background-image");if(n&&n!=="none")return!0;let r=t.getPropertyValue("box-shadow");if(r&&r!=="none")return!0;for(let a of["top","right","bottom","left"]){let s=t.getPropertyValue(`border-${a}-width`),i=t.getPropertyValue(`border-${a}-style`);if(s!=="0px"&&i!=="none")return!0}return!1}function pt(e){let t=e;for(;t&&t!==document.documentElement;){let o=window.getComputedStyle(t).backgroundColor;if(o&&!ft(o))return o;t=t.parentElement}if(document.documentElement){let o=window.getComputedStyle(document.documentElement).backgroundColor;if(o&&!ft(o))return o}return"rgb(255, 255, 255)"}function ut(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Ut(e){return .2126*ut(e.r)+.7152*ut(e.g)+.0722*ut(e.b)}function ht(e,t){let o=$t(e),n=$t(t);if(!o||!n)return{ratio:0,passesAA:!1};let r=Ut(o),a=Ut(n),s=Math.max(r,a),i=Math.min(r,a),d=Math.round((s+.05)/(i+.05)*100)/100;return{ratio:d,passesAA:d>=4.5}}function yt(e){if(/iPhone/i.test(e))return"iPhone";if(/iPad/i.test(e))return"iPad";if(/Android/i.test(e))return/Mobile/i.test(e)?"Android Phone":"Android Tablet";let t="Browser";/Edg\//i.test(e)?t="Edge":/Chrome\//i.test(e)?t="Chrome":/Firefox\//i.test(e)?t="Firefox":/Safari\//i.test(e)&&!/Chrome/i.test(e)&&(t="Safari");let o="";return/Macintosh|Mac OS/i.test(e)?o="macOS":/Windows/i.test(e)?o="Windows":/Linux/i.test(e)?o="Linux":/CrOS/i.test(e)&&(o="ChromeOS"),o?`${t} on ${o}`:t}function Ae(e){let t=window.getComputedStyle(e),o={};for(let u of ur)o[u]=t.getPropertyValue(u);let n=e.getAttribute("role"),r=e.getAttribute("aria-label"),a=o.color,s=pt(e);s!==o["background-color"]&&(o["effective-background-color"]=s);let{ratio:i,passesAA:d}=ht(a,s),l={width:window.innerWidth,height:window.innerHeight},m=yt(navigator.userAgent),c;try{c=Be(e)}catch{}return{computed_styles:o,accessibility:{role:n,aria_label:r,contrast_ratio:i,contrast_passes_aa:d},viewport:l,device:m,fingerprint:c}}function Kt(e){let t=e.tagName.toLowerCase();return["button","a","input","select","textarea"].includes(t)||e.getAttribute("role")==="button"||e.getAttribute("role")==="link"||e.hasAttribute("data-feedback-id")||e.hasAttribute("data-testid")?3:["h1","h2","h3","h4","h5","h6","p","img","figure","figcaption","picture","video","section","article","nav","header","footer","main","aside","form","table","ul","ol","li","blockquote","details"].includes(t)?2:1}var fr='button,a,input,select,textarea,h1,h2,h3,h4,h5,h6,p,img,figure,nav,section,article,header,footer,main,[role="button"],[role="link"],[data-feedback-id],[data-testid]';function gt(e,t){let o=Kt(t);if(o>=2||Wt(t))return null;let n=null,r=o,a=t.parentElement,s=0;for(;a&&a!==document.body&&s<nt.ANCESTOR_DEPTH&&a.getAttribute("data-fl-magnet")!=="off";){let c=Kt(a);c>r&&(n=a,r=c),a=a.parentElement,s++}if(n)return n;let i={x:e.clientX,y:e.clientY},d=t.parentElement;if(!d)return null;let l=d.querySelectorAll(fr),m=null;for(let c of l){if(c===t||c.getAttribute("data-fl-magnet")==="off"||!ye(c))continue;let u=c.getBoundingClientRect(),f=pr(i,u);f<=nt.PROXIMITY_THRESHOLD&&(!m||f<m.dist)&&(m={el:c,dist:f})}return m?.el??null}function pr(e,t){let o=Math.max(t.left-e.x,0,e.x-t.right),n=Math.max(t.top-e.y,0,e.y-t.bottom);return Math.sqrt(o*o+n*n)}function Ue(){let{isCommentMode:e}=R(),[t,o]=(0,ie.useState)({hoveredElement:null,selectedElement:null}),n=(0,ie.useRef)(t);n.current=t;let r=(0,ie.useCallback)(()=>{o(a=>({...a,selectedElement:null}))},[]);return(0,ie.useEffect)(()=>{if(!e){o({hoveredElement:null,selectedElement:null});return}function a(l){let m=l.target;if(!m||!ye(m)){o(u=>u.hoveredElement!==null?{...u,hoveredElement:null}:u);return}let c=gt(l,m)??m;o(u=>u.hoveredElement!==c?{...u,hoveredElement:c}:u)}function s(l){let m=l.relatedTarget;(!m||m===document.documentElement)&&o(c=>c.hoveredElement!==null?{...c,hoveredElement:null}:c)}function i(l){let m=l.target;if(!m||!ye(m))return;l.preventDefault(),l.stopPropagation();let c=gt(l,m)??m;o(u=>({...u,selectedElement:c,hoveredElement:null}))}document.body.addEventListener("mouseover",a,!0),document.body.addEventListener("mouseout",s,!0),document.body.addEventListener("click",i,!0);let d=document.body.style.cursor;return document.body.style.cursor="crosshair",()=>{document.body.removeEventListener("mouseover",a,!0),document.body.removeEventListener("mouseout",s,!0),document.body.removeEventListener("click",i,!0),document.body.style.cursor=d}},[e]),{hoveredElement:t.hoveredElement,selectedElement:t.selectedElement,clearSelection:r}}var ee=require("react"),Xt=require("react-dom");var Vt=require("react/jsx-runtime"),hr={position:"fixed",pointerEvents:"none",border:"2px solid var(--fl-accent)",borderRadius:"var(--fl-border-radius-sm)",transition:"all var(--fl-duration-instant) ease-out",zIndex:k.HIGHLIGHT,boxSizing:"border-box"};function We({hoveredElement:e,selectedElement:t}){let{isCommentMode:o,portalRoot:n}=R(),[r,a]=(0,ee.useState)(null),s=(0,ee.useRef)(0),i=(0,ee.useCallback)(()=>{let d=t?null:e;if(!d){a(null);return}let l=d.getBoundingClientRect();a({top:l.top,left:l.left,width:l.width,height:l.height})},[e,t]);return(0,ee.useEffect)(()=>{i()},[i]),(0,ee.useEffect)(()=>{if(!o||!e&&!t)return;function d(){cancelAnimationFrame(s.current),s.current=requestAnimationFrame(()=>{i()})}return window.addEventListener("scroll",d,!0),window.addEventListener("resize",d),()=>{window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d),cancelAnimationFrame(s.current)}},[o,e,t,i]),!o||!n||!r?null:(0,Xt.createPortal)((0,Vt.jsx)("div",{style:{...hr,top:r.top,left:r.left,width:r.width,height:r.height},"data-fl-ignore":""}),n)}var q=require("react"),Yt=require("react-dom");var qt=require("react/jsx-runtime"),yr={position:"fixed",pointerEvents:"none",padding:"2px 8px",backgroundColor:"var(--fl-surface)",border:"1px solid var(--fl-border)",borderRadius:4,fontSize:11,fontFamily:"var(--fl-font-family)",color:"var(--fl-text-secondary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:320,zIndex:k.HIGHLIGHT,boxShadow:"0 1px 3px rgba(26,26,24,0.06)",transition:"all var(--fl-duration-instant) ease-out"};function Zt({hoveredElement:e,selectedElement:t}){let{isCommentMode:o,portalRoot:n}=R(),[r,a]=(0,q.useState)(null),[s,i]=(0,q.useState)(""),d=(0,q.useRef)(0),l=t?null:e,m=(0,q.useCallback)(()=>{if(!l){a(null);return}let c=l.getBoundingClientRect(),u=Ot(l);i(u.join(" \u203A "));let f=Math.max(4,c.top-28),g=Math.max(4,Math.min(c.left,window.innerWidth-328));a({top:f,left:g})},[l]);return(0,q.useEffect)(()=>{m()},[m]),(0,q.useEffect)(()=>{if(!o||!l)return;function c(){cancelAnimationFrame(d.current),d.current=requestAnimationFrame(()=>{m()})}return window.addEventListener("scroll",c,!0),window.addEventListener("resize",c),()=>{window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c),cancelAnimationFrame(d.current)}},[o,l,m]),!o||!n||!r?null:(0,Yt.createPortal)((0,qt.jsx)("div",{style:{...yr,top:r.top,left:r.left},"data-fl-ignore":"",children:s}),n)}var E=require("react"),to=require("react-dom");var jt="fl-author";function le(){try{let e=localStorage.getItem(jt);if(!e)return null;let t=JSON.parse(e);return t&&typeof t.name=="string"&&t.name.trim()?{name:t.name.trim()}:null}catch{return null}}function Ke(e){try{let t=e.trim();if(!t)return;localStorage.setItem(jt,JSON.stringify({name:t}))}catch{}}function te(e,t){if(e.user)return e.user;let o=t.trim();return o?{id:null,name:o,avatar:null}:{...At}}function Ee(e){let t=e.trim();t&&Ke(t)}var gr=.65;async function Jt(e){let t=e.getBoundingClientRect(),o={x:Math.round(t.x),y:Math.round(t.y),width:Math.round(t.width),height:Math.round(t.height)},n;try{n=(await import("html-to-image")).toCanvas}catch{return console.info("Lay: Screenshot capture unavailable. This may be caused by a CSP restriction or bundler issue."),null}let r;try{let a=await n(document.body,{filter:i=>!i.hasAttribute?.(fe.IGNORE),pixelRatio:1});r=document.createElement("canvas"),r.width=window.innerWidth,r.height=window.innerHeight;let s=r.getContext("2d");if(!s)return null;s.drawImage(a,window.scrollX,window.scrollY,window.innerWidth,window.innerHeight,0,0,window.innerWidth,window.innerHeight)}catch{return null}return new Promise(a=>{r.toBlob(s=>{if(!s){a(null);return}a({blob:s,bounds:o})},"image/webp",gr)})}var K=require("react/jsx-runtime"),oo={position:"fixed",zIndex:k.POPOVER,width:Ce.WIDTH,backgroundColor:"var(--fl-surface-raised)",border:"1px solid var(--fl-border)",borderRadius:"var(--fl-border-radius)",boxShadow:"var(--fl-shadow-popover)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-base)",color:"var(--fl-text-primary)",overflow:"hidden",opacity:0,transform:"translateY(4px)",transition:`opacity var(--fl-duration-fast) ease-out, transform var(--fl-duration-fast) ease-out, max-height ${Ce.EXPAND_DURATION}ms ease-out`},vr={...oo,opacity:1,transform:"translateY(0)"},br={display:"flex",flexDirection:"column",gap:8,padding:12},Sr={width:"100%",padding:"6px 8px",border:"1px solid var(--fl-border)",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"var(--fl-surface)",color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-sm)",lineHeight:"var(--fl-line-height)",outline:"none",boxSizing:"border-box",transition:"border-color var(--fl-duration-fast) ease-out"},Qt={width:"100%",minHeight:64,padding:8,borderWidth:1,borderStyle:"solid",borderColor:"var(--fl-border)",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"var(--fl-surface)",color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-base)",lineHeight:"var(--fl-line-height)",resize:"vertical",outline:"none",boxSizing:"border-box",transition:"border-color var(--fl-duration-fast) ease-out"},Cr={display:"flex",alignItems:"center",justifyContent:"flex-end",gap:8},ro={padding:"4px 12px",backgroundColor:"var(--fl-accent)",color:"#FFFFFF",border:"none",borderRadius:"var(--fl-border-radius-sm)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",cursor:"pointer",outline:"none",transition:"background-color var(--fl-duration-fast) ease-out"},Er={...ro,opacity:.4,cursor:"default"},xr={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Rr={display:"flex",alignItems:"center",gap:6,padding:"6px 8px"},no={padding:"4px 10px",borderWidth:1,borderStyle:"solid",borderColor:"var(--fl-border)",borderRadius:12,backgroundColor:"var(--fl-surface)",color:"var(--fl-text-secondary)",fontSize:"var(--fl-font-size-sm)",fontFamily:"var(--fl-font-family)",fontWeight:"var(--fl-font-weight-medium)",cursor:"pointer",outline:"none",whiteSpace:"nowrap",transition:"background-color var(--fl-duration-fast) ease-out, border-color var(--fl-duration-fast) ease-out, color var(--fl-duration-fast) ease-out",lineHeight:1,flexShrink:0},wr={...no,backgroundColor:"var(--fl-accent-subtle)",borderColor:"var(--fl-accent)",color:"var(--fl-accent)"},Tr={flex:1,padding:"4px 8px",color:"var(--fl-text-tertiary)",fontSize:"var(--fl-font-size-sm)",fontFamily:"var(--fl-font-family)",cursor:"text",minWidth:0},ge=8,eo=120;function Ar(e){let t=window.innerWidth,o=window.innerHeight,n=e.bottom+ge,r=e.left;return n+eo>o&&(n=e.top-eo-ge),r+Ce.WIDTH>t&&(r=t-Ce.WIDTH-ge),r<ge&&(r=ge),n<ge&&(n=ge),{top:n,left:r}}function Xe({selectedElement:e,onClearSelection:t}){let{portalRoot:o,adapter:n,config:r}=R(),[a,s]=(0,E.useState)(""),[i,d]=(0,E.useState)(""),[l,m]=(0,E.useState)(null),[c,u]=(0,E.useState)(!1),[f,g]=(0,E.useState)(!1),[N,x]=(0,E.useState)(null),y=(0,E.useRef)(null),A=(0,E.useRef)(null),X=(0,E.useRef)(null),v=(0,E.useRef)(0),b=!!r.user,h=r.starterChips??Tt,C=(0,E.useCallback)(()=>{if(!e){m(null);return}let p=e.getBoundingClientRect();m(Ar(p))},[e]);(0,E.useEffect)(()=>{if(e){if(d(""),g(!1),x(null),C(),!b){let p=le();s(p?.name??"")}requestAnimationFrame(()=>{u(!0)})}else u(!1),m(null)},[e,C,b]),(0,E.useEffect)(()=>{if(!e)return;function p(){cancelAnimationFrame(v.current),v.current=requestAnimationFrame(()=>{C()})}return window.addEventListener("scroll",p,!0),window.addEventListener("resize",p),()=>{window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),cancelAnimationFrame(v.current)}},[e,C]);let B=(0,E.useRef)(f);B.current=f,(0,E.useEffect)(()=>{if(!e)return;function p(P){P.key==="Escape"&&(P.preventDefault(),P.stopPropagation(),B.current?(g(!1),d("")):t())}return document.addEventListener("keydown",p,!0),()=>document.removeEventListener("keydown",p,!0)},[e,t]),(0,E.useEffect)(()=>{if(!e||f)return;function p(P){P.key.length===1&&!P.ctrlKey&&!P.metaKey&&(P.preventDefault(),g(!0),d(P.key),setTimeout(()=>{A.current?.focus(),A.current&&(A.current.selectionStart=A.current.value.length)},10))}return document.addEventListener("keydown",p,!0),()=>document.removeEventListener("keydown",p,!0)},[e,f]),(0,E.useEffect)(()=>{if(!e)return;function p(S){let _=S.target;X.current?.contains(_)||_.closest("[data-fl-root]")||t()}let P=setTimeout(()=>{document.addEventListener("mousedown",p,!0)},50);return()=>{clearTimeout(P),document.removeEventListener("mousedown",p,!0)}},[e,t]);let[ue,be]=(0,E.useState)(!1),Se=r.screenshots!==!1,re=(0,E.useCallback)((p,P)=>{Se&&Jt(p).then(S=>{S&&n.uploadScreenshot(r.projectId,P,S.blob,S.bounds).catch(()=>{})})},[Se,n,r.projectId]),Re=(0,E.useCallback)(async p=>{if(!e)return;let P=e,S=he(P),_=window.location.pathname,se=le(),ot=te(r,se?.name??""),Ie=null;try{Ie=Ae(P)}catch{}let wo={project_id:r.projectId,thread_id:null,author:ot,content:p.value??p.label,status:"open",dom_path:S,url_path:_,element_metadata:Ie,resolved_by:null,resolved_at:null,archived_at:null,ai_context:null,screenshot_url:null,element_bounds:null};try{let To=await n.addComment(wo);re(P,To.id),t()}catch{d(p.value??p.label),g(!0),setTimeout(()=>A.current?.focus(),10)}},[e,r,n,t,re]),H=(0,E.useCallback)(async()=>{if(!i.trim()||!e)return;let p=e,P=he(p),S=window.location.pathname,_=te(r,a);b||Ee(a);let se=null;try{se=Ae(p)}catch{console.warn("Lay: Could not capture element metadata.")}let ot={project_id:r.projectId,thread_id:null,author:_,content:i.trim(),status:"open",dom_path:P,url_path:S,element_metadata:se,resolved_by:null,resolved_at:null,archived_at:null,ai_context:null,screenshot_url:null,element_bounds:null};try{let Ie=await n.addComment(ot);d(""),re(p,Ie.id),t()}catch{be(!0),setTimeout(()=>be(!1),1200)}},[i,a,e,r,n,t,b,re]),ne=(0,E.useCallback)(()=>{g(!0),setTimeout(()=>A.current?.focus(),10)},[]),j=(0,E.useCallback)(p=>{p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),H())},[H]),T=(0,E.useCallback)(p=>{p.key==="Enter"&&(p.preventDefault(),A.current?.focus())},[]);if((0,E.useEffect)(()=>{f&&e&&!i&&setTimeout(()=>{if(!b&&!le()?.name){y.current?.focus();return}A.current?.focus()},10)},[f,e,b,i]),!o||!e||!l)return null;let ae=i.trim();return(0,to.createPortal)((0,K.jsx)("div",{ref:X,style:{...c?vr:oo,top:l.top,left:l.left,maxHeight:f?400:Ce.COLLAPSED_HEIGHT},"data-fl-ignore":"",children:f?(0,K.jsxs)("div",{style:br,children:[b?null:(0,K.jsx)("input",{ref:y,type:"text",value:a,onChange:p=>s(p.target.value),onKeyDown:T,placeholder:"Your name (optional)",style:Sr}),(0,K.jsx)("textarea",{ref:A,value:i,onChange:p=>d(p.target.value),onKeyDown:j,placeholder:"Leave feedback...",style:ue?{...Qt,borderColor:"#D32F2F"}:Qt,rows:3}),(0,K.jsxs)("div",{style:Cr,children:[(0,K.jsx)("span",{style:xr,children:"Esc \u21A9 collapse"}),(0,K.jsx)("button",{type:"button",onClick:H,disabled:!ae,style:ae?ro:Er,children:"Submit"})]})]}):(0,K.jsxs)("div",{style:Rr,children:[h.map((p,P)=>(0,K.jsx)("button",{type:"button",onClick:()=>Re(p),onMouseEnter:()=>x(P),onMouseLeave:()=>x(null),style:N===P?wr:no,children:p.label},p.label)),(0,K.jsx)("span",{style:Tr,onClick:ne,role:"button",tabIndex:0,children:"Type..."})]})}),o)}var ce=require("react/jsx-runtime");function Ve(){let{hoveredElement:e,selectedElement:t,clearSelection:o}=Ue();return(0,ce.jsxs)(ce.Fragment,{children:[(0,ce.jsx)(We,{hoveredElement:e,selectedElement:t}),(0,ce.jsx)(Zt,{hoveredElement:e,selectedElement:t}),(0,ce.jsx)(Xe,{selectedElement:t,onClearSelection:o})]})}var oe=require("react");var w=require("react"),yo=require("react-dom");var I=xt(require("react")),fo=require("react-dom");var Y=require("react/jsx-runtime"),ao={padding:"10px 0",fontFamily:"var(--fl-font-family)"},Pr={...ao,marginLeft:16,paddingLeft:12,borderLeft:"2px solid var(--fl-border)"},Mr={display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:4},_r={display:"flex",alignItems:"center",gap:6,minWidth:0},Ir={fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-text-secondary)",fontFamily:"var(--fl-font-family)"},Lr={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},kr={fontSize:"var(--fl-font-size-base)",lineHeight:"var(--fl-line-height)",color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)",whiteSpace:"pre-wrap",wordBreak:"break-word"},Dr={display:"flex",alignItems:"center",gap:4,marginTop:6,fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Nr={color:"var(--fl-accent)",fontSize:12};function Pe({comment:e,isReply:t=!1,actions:o}){return(0,Y.jsxs)("div",{style:t?Pr:ao,children:[(0,Y.jsxs)("div",{style:Mr,children:[(0,Y.jsxs)("div",{style:_r,children:[(0,Y.jsx)("span",{style:Ir,children:e.author.name}),(0,Y.jsx)("span",{style:Lr,children:Q(e.created_at)})]}),o]}),(0,Y.jsx)("div",{style:kr,children:e.content}),e.status==="resolved"&&e.resolved_by&&!t&&(0,Y.jsxs)("div",{style:Dr,children:[(0,Y.jsx)("span",{style:Nr,children:"\u2713"}),(0,Y.jsxs)("span",{children:["Resolved by ",e.resolved_by.name,e.resolved_at?` \xB7 ${Q(e.resolved_at)}`:""]})]})]})}var Ye=require("react"),ve=require("react/jsx-runtime"),so={display:"flex",alignItems:"center",gap:4},vt={display:"flex",alignItems:"center",justifyContent:"center",width:24,height:24,padding:0,border:"none",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"transparent",color:"var(--fl-text-tertiary)",cursor:"pointer",fontFamily:"var(--fl-font-family)",fontSize:14,lineHeight:1,transition:"color var(--fl-duration-fast) ease-out, background-color var(--fl-duration-fast) ease-out"},io={...vt,color:"var(--fl-accent)",backgroundColor:"var(--fl-accent-subtle)"},lo={display:"inline-flex",alignItems:"center",padding:"2px 6px",border:"none",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"transparent",color:"var(--fl-text-tertiary)",cursor:"pointer",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",lineHeight:1,transition:"color var(--fl-duration-fast) ease-out"},Or={...lo,color:"var(--fl-text-secondary)"};function Ze({comment:e,onResolve:t,onReopen:o,onArchive:n}){let[r,a]=(0,Ye.useState)(!1),[s,i]=(0,Ye.useState)(!1),[d,l]=(0,Ye.useState)(!1);return e.status==="open"?(0,ve.jsx)("div",{style:so,children:(0,ve.jsx)("button",{type:"button",title:"Resolve",style:r?io:vt,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),onClick:m=>{m.stopPropagation(),t(e)},children:"\u2713"})}):e.status==="resolved"?(0,ve.jsxs)("div",{style:so,children:[(0,ve.jsx)("button",{type:"button",title:"Reopen",style:s?io:vt,onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),onClick:m=>{m.stopPropagation(),o(e)},children:"\u21A9"}),(0,ve.jsx)("button",{type:"button",title:"Archive",style:d?Or:lo,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),onClick:m=>{m.stopPropagation(),n(e)},children:"Archive"})]}):null}var $=require("react");var me=require("react/jsx-runtime"),Fr={display:"flex",flexDirection:"column",gap:6,padding:12},Hr={width:"100%",padding:"4px 8px",border:"1px solid var(--fl-border)",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"var(--fl-surface)",color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-sm)",lineHeight:"var(--fl-line-height)",outline:"none",boxSizing:"border-box",transition:"border-color var(--fl-duration-fast) ease-out"},co={width:"100%",minHeight:48,padding:"6px 8px",borderWidth:1,borderStyle:"solid",borderColor:"var(--fl-border)",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"var(--fl-surface)",color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-base)",lineHeight:"var(--fl-line-height)",resize:"vertical",outline:"none",boxSizing:"border-box",transition:"border-color var(--fl-duration-fast) ease-out"},zr={display:"flex",alignItems:"center",justifyContent:"flex-end",gap:8},mo={padding:"4px 12px",backgroundColor:"var(--fl-accent)",color:"#FFFFFF",border:"none",borderRadius:"var(--fl-border-radius-sm)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",cursor:"pointer",outline:"none",transition:"background-color var(--fl-duration-fast) ease-out"},Gr={...mo,opacity:.4,cursor:"default"},Br={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"};function qe({rootComment:e,onReplySubmitted:t}){let{adapter:o,config:n}=R(),[r,a]=(0,$.useState)(""),[s,i]=(0,$.useState)(""),[d,l]=(0,$.useState)(!1),m=(0,$.useRef)(null),c=(0,$.useRef)(null),u=!!n.user;(0,$.useEffect)(()=>{if(!u){let y=le();a(y?.name??"")}},[u]);let f=(0,$.useCallback)(async()=>{if(!s.trim())return;let y=te(n,r);u||Ee(r);let A={project_id:n.projectId,thread_id:e.id,author:y,content:s.trim(),status:"open",dom_path:e.dom_path,url_path:e.url_path,element_metadata:null,resolved_by:null,resolved_at:null,archived_at:null,ai_context:null,screenshot_url:null,element_bounds:null};try{await o.addComment(A),i(""),t?.(),setTimeout(()=>{c.current?.focus()},10)}catch{l(!0),setTimeout(()=>l(!1),1200)}},[s,r,n,o,e,u,t]),g=(0,$.useCallback)(y=>{y.key==="Enter"&&!y.shiftKey&&(y.preventDefault(),f())},[f]),N=(0,$.useCallback)(y=>{y.key==="Enter"&&(y.preventDefault(),c.current?.focus())},[]),x=s.trim();return(0,me.jsxs)("div",{style:Fr,children:[u?null:(0,me.jsx)("input",{ref:m,type:"text",value:r,onChange:y=>a(y.target.value),onKeyDown:N,placeholder:"Your name (optional)",style:Hr}),(0,me.jsx)("textarea",{ref:c,value:s,onChange:y=>i(y.target.value),onKeyDown:g,placeholder:"Reply...",style:d?{...co,borderColor:"#D32F2F"}:co,rows:2}),(0,me.jsxs)("div",{style:zr,children:[(0,me.jsx)("span",{style:Br,children:"Esc"}),(0,me.jsx)("button",{type:"button",onClick:f,disabled:!x,style:x?mo:Gr,children:"Reply"})]})]})}var G=require("react/jsx-runtime"),po={position:"fixed",zIndex:k.POPOVER,width:320,maxHeight:400,backgroundColor:"var(--fl-surface-raised)",border:"1px solid var(--fl-border)",borderRadius:"var(--fl-border-radius)",boxShadow:"var(--fl-shadow-popover)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-base)",color:"var(--fl-text-primary)",display:"flex",flexDirection:"column",overflow:"hidden",opacity:0,transform:"translateY(4px)",transition:"opacity var(--fl-duration-fast) ease-out, transform var(--fl-duration-fast) ease-out"},$r={...po,opacity:1,transform:"translateY(0)"},Ur={overflowY:"auto",padding:12,flexGrow:1,minHeight:0},ho={height:1,backgroundColor:"var(--fl-border)",margin:"0",border:"none",flexShrink:0},Wr={...ho,backgroundColor:"var(--fl-border-strong)"},de=8,bt=320,uo=200;function Kr(e){let t=window.innerWidth,o=window.innerHeight,n=e.bottom+de,r=e.right-bt;return n+uo>o&&(n=e.top-uo-de),r<de&&(r=de),r+bt>t-de&&(r=t-bt-de),n<de&&(n=de),{top:n,left:r}}function Xr(e){let t=[],o=new Map;for(let n of e)if(n.thread_id===null)t.push(n);else{let r=o.get(n.thread_id);r?r.push(n):o.set(n.thread_id,[n])}return t.sort((n,r)=>new Date(n.created_at).getTime()-new Date(r.created_at).getTime()),t.map(n=>{let r=o.get(n.id)??[];return r.sort((a,s)=>new Date(a.created_at).getTime()-new Date(s.created_at).getTime()),{root:n,replies:r}})}function je({comments:e,dotRect:t,onClose:o,onDidResolve:n}){let{portalRoot:r,adapter:a,config:s,dispatch:i}=R(),d=(0,I.useRef)(null),l=(0,I.useRef)(null),[m,c]=I.default.useState(!1),u=Kr(t),f=(0,I.useMemo)(()=>Xr(e),[e]),g=f.length>0?f[0].root:null,N=(0,I.useCallback)(v=>{let b=te(s,""),h=new Date().toISOString(),C={...v,status:"resolved",resolved_by:b,resolved_at:h};i({type:"UPDATE_COMMENT",payload:C}),n?.(),o(),a.updateComment(v.id,{status:"resolved",resolved_by:b,resolved_at:h}).catch(()=>{i({type:"UPDATE_COMMENT",payload:v})})},[a,s,i,n,o]),x=(0,I.useCallback)(v=>{let b={...v,status:"open",resolved_by:null,resolved_at:null};i({type:"UPDATE_COMMENT",payload:b}),a.updateComment(v.id,{status:"open",resolved_by:null,resolved_at:null}).catch(()=>{i({type:"UPDATE_COMMENT",payload:v})})},[a,i]),y=(0,I.useCallback)(v=>{let b=new Date().toISOString(),h={...v,status:"archived",archived_at:b};i({type:"UPDATE_COMMENT",payload:h}),a.updateComment(v.id,{status:"archived",archived_at:b}).catch(()=>{i({type:"UPDATE_COMMENT",payload:v})})},[a,i]);(0,I.useEffect)(()=>{requestAnimationFrame(()=>{c(!0)})},[]),(0,I.useEffect)(()=>{m&&l.current&&(l.current.scrollTop=l.current.scrollHeight)},[m]);let A=(0,I.useRef)(e.length);(0,I.useEffect)(()=>{e.length>A.current&&l.current&&(l.current.scrollTop=l.current.scrollHeight),A.current=e.length},[e.length]);let X=(0,I.useCallback)(()=>{},[]);return(0,I.useEffect)(()=>{function v(b){b.key==="Escape"&&(b.preventDefault(),o())}return document.addEventListener("keydown",v,!0),()=>document.removeEventListener("keydown",v,!0)},[o]),(0,I.useEffect)(()=>{function v(h){let C=h.target;d.current?.contains(C)||C.closest("[data-fl-ignore]")||o()}let b=setTimeout(()=>{document.addEventListener("mousedown",v,!0)},50);return()=>{clearTimeout(b),document.removeEventListener("mousedown",v,!0)}},[o]),r?(0,fo.createPortal)((0,G.jsxs)("div",{ref:d,style:{...m?$r:po,top:u.top,left:u.left},"data-fl-ignore":"",children:[(0,G.jsx)("div",{ref:l,style:Ur,children:f.map((v,b)=>(0,G.jsxs)(I.default.Fragment,{children:[b>0?(0,G.jsx)("hr",{style:ho}):null,(0,G.jsx)(Pe,{comment:v.root,actions:(0,G.jsx)(Ze,{comment:v.root,onResolve:N,onReopen:x,onArchive:y})}),v.replies.map(h=>(0,G.jsx)(Pe,{comment:h,isReply:!0},h.id))]},v.root.id))}),g?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)("hr",{style:Wr}),(0,G.jsx)(qe,{rootComment:g,onReplySubmitted:X})]}):null]}),r):null}var F=require("react/jsx-runtime");function Vr(e){let t=[],n=U.SPREAD_ANGLE/2;for(let r=0;r<e;r++){let s=90-n+U.SPREAD_ANGLE/(e-1)*r+(Math.random()-.5)*15,i=U.DISTANCE_MIN+Math.random()*(U.DISTANCE_MAX-U.DISTANCE_MIN),d=s*Math.PI/180,l=Math.cos(d)*i,m=-Math.sin(d)*i,c=U.PARTICLE_SIZE_MIN+Math.random()*(U.PARTICLE_SIZE_MAX-U.PARTICLE_SIZE_MIN),u=["var(--fl-accent)","var(--fl-accent-hover)","#F4A261"],f=u[r%u.length];t.push({endX:l,endY:m,size:c,color:f,delay:r*20})}return t}var St={position:"fixed",minWidth:O.MARKER_MIN_WIDTH,height:O.MARKER_HEIGHT,padding:"0 5px",borderRadius:4,border:"none",backgroundColor:"var(--fl-accent)",color:"#FFFFFF",fontSize:O.MARKER_FONT_SIZE,fontFamily:"var(--fl-font-family)",fontWeight:600,lineHeight:`${O.MARKER_HEIGHT}px`,textAlign:"center",cursor:"pointer",zIndex:k.DOT,outline:"none",display:"flex",alignItems:"center",justifyContent:"center",animation:"fl-marker-enter var(--fl-duration-marker-enter) ease-out",transition:"transform var(--fl-duration-fast) ease-out",boxSizing:"border-box"},Yr={...St,transform:"scale(1.15)"},go={...St,backgroundColor:"var(--fl-resolved)"},Zr={...go,transform:"scale(1.15)"},vo={position:"absolute",bottom:-O.MARKER_POINTER,left:"50%",transform:"translateX(-50%)",width:0,height:0,borderLeft:`${O.MARKER_POINTER}px solid transparent`,borderRight:`${O.MARKER_POINTER}px solid transparent`,borderTopWidth:O.MARKER_POINTER,borderTopStyle:"solid",borderTopColor:"var(--fl-accent)",pointerEvents:"none"},qr={...vo,borderTopColor:"var(--fl-resolved)"},bo={position:"absolute",top:`calc(100% + ${O.MARKER_POINTER+6}px)`,left:"50%",transform:"translateX(-50%)",backgroundColor:"var(--fl-text-primary)",color:"var(--fl-surface)",padding:"6px 10px",borderRadius:"var(--fl-border-radius-sm)",fontFamily:"var(--fl-font-family)",fontSize:"var(--fl-font-size-sm)",lineHeight:1.4,whiteSpace:"nowrap",pointerEvents:"none",zIndex:k.POPOVER,boxShadow:"var(--fl-shadow)",maxWidth:260,opacity:0,transition:"opacity var(--fl-duration-fast) ease-out"},jr={...bo,opacity:1},Jr={display:"flex",gap:6,alignItems:"baseline"},Qr={fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-surface)"},en={color:"rgba(255, 255, 255, 0.55)"},tn={color:"rgba(255, 255, 255, 0.8)",whiteSpace:"normal",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:1,WebkitBoxOrient:"vertical"};function on(e){return e.length<=Ne.MAX_CONTENT_LENGTH?e:e.slice(0,Ne.MAX_CONTENT_LENGTH).trimEnd()+"\u2026"}function rn(e){let t=e.getBoundingClientRect(),o=window.innerWidth,n=window.innerHeight;if(t.bottom<0||t.top>n||t.right<0||t.left>o)return{top:0,left:0,visible:!1};let r=t.top-O.MARKER_HEIGHT-O.MARKER_POINTER,a=t.right-O.MARKER_MIN_WIDTH/2;return{top:r,left:a,visible:!0}}var Je=(0,w.memo)(function({domPath:t,comments:o,isResolved:n=!1,isNew:r=!1,resolvedElement:a}){let{portalRoot:s}=R(),[i,d]=(0,w.useState)(null),[l,m]=(0,w.useState)(!1),[c,u]=(0,w.useState)(!1),[f,g]=(0,w.useState)(!1),[N,x]=(0,w.useState)(r),[y,A]=(0,w.useState)(!1),[X,v]=(0,w.useState)([]),b=(0,w.useRef)(null),h=(0,w.useRef)(0),C=(0,w.useRef)(null),B=(0,w.useCallback)(()=>{let T=a??document.querySelector(t);if(!T){d(null);return}d(rn(T))},[t,a]);(0,w.useEffect)(()=>{B()},[B]),(0,w.useEffect)(()=>{function T(){cancelAnimationFrame(h.current),h.current=requestAnimationFrame(()=>{B()})}return window.addEventListener("scroll",T,!0),window.addEventListener("resize",T),()=>{window.removeEventListener("scroll",T,!0),window.removeEventListener("resize",T),cancelAnimationFrame(h.current)}},[B]),(0,w.useEffect)(()=>{if(!N)return;let T=setTimeout(()=>x(!1),U.DURATION);return()=>clearTimeout(T)},[N]);let ue=(0,w.useCallback)(()=>{v(Vr(U.PARTICLE_COUNT)),A(!0);let T=setTimeout(()=>{A(!1),v([])},U.DURATION+100);return()=>clearTimeout(T)},[]),be=(0,w.useCallback)(()=>{m(!0),C.current=setTimeout(()=>{u(!0)},Ne.HOVER_DELAY)},[]),Se=(0,w.useCallback)(()=>{m(!1),C.current&&(clearTimeout(C.current),C.current=null),u(!1)},[]);(0,w.useEffect)(()=>()=>{C.current&&clearTimeout(C.current)},[]);let re=(0,w.useCallback)(T=>{T.stopPropagation(),u(!1),C.current&&(clearTimeout(C.current),C.current=null),g(ae=>!ae)},[]),Re=(0,w.useCallback)(()=>{g(!1)},[]);if(!s||!i||!i.visible)return null;let H=o.length,ne;H===1?ne=o[o.length-1].author.name.charAt(0).toUpperCase():ne=H>O.MARKER_MAX_COUNT?"99+":`${H}`;let j;return n?j=l?Zr:go:j=l?Yr:St,(0,yo.createPortal)((0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)("button",{ref:b,type:"button",onClick:re,onMouseEnter:be,onMouseLeave:Se,style:{...j,top:i.top,left:i.left},"aria-label":`${H} comment${H>1?"s":""}${n?" (resolved)":""}`,"data-fl-ignore":"",children:[ne,(0,F.jsx)("span",{style:n?qr:vo}),N?(0,F.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",width:O.MARKER_HEIGHT,height:O.MARKER_HEIGHT,borderRadius:"50%",border:"2px solid var(--fl-accent)",animation:"fl-marker-ripple var(--fl-duration-marker-ripple) ease-out forwards",pointerEvents:"none"}}):null,y?X.map((T,ae)=>(0,F.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",width:T.size,height:T.size,borderRadius:"50%",backgroundColor:T.color,pointerEvents:"none","--fl-end-dx":`${T.endX}px`,"--fl-end-dy":`${T.endY}px`,"--fl-dx":"0px","--fl-dy":"0px",animation:`fl-resolve-particle var(--fl-duration-resolve-burst) ease-out ${T.delay}ms forwards`}},ae)):null,!f&&o.length>0&&(0,F.jsxs)("span",{style:c?jr:bo,children:[(0,F.jsxs)("span",{style:Jr,children:[(0,F.jsx)("span",{style:Qr,children:o[0].author.name}),(0,F.jsx)("span",{style:en,children:Q(o[0].created_at)})]}),(0,F.jsx)("div",{style:tn,children:on(o[0].content)})]})]}),f&&b.current?(0,F.jsx)(je,{comments:o,dotRect:b.current.getBoundingClientRect(),onClose:Re,onDidResolve:ue}):null]}),s)});function Qe(e,t){let o=e.match(/\[data-feedback-id="([^"]+)"\]/);if(o){let n=document.querySelector(`[data-feedback-id="${o[1]}"]`);if(n)return{element:n,method:"feedback-id"}}try{let n=document.querySelector(e);if(n)return{element:n,method:"selector"}}catch{}if(t){let n=$e(t);if(n.element)return{element:n.element,method:"fingerprint",score:n.score}}return{element:null,method:"detached"}}var Me=require("react/jsx-runtime"),nn=60;function et(){let{groupedByDomPath:e,isDomPathFullyResolved:t,isDomPathFullyArchived:o}=Z(),{adapter:n,setDetachedDomPaths:r}=R(),a=(0,oe.useRef)(null);a.current===null&&(a.current=new Set(e.map(l=>l.domPath)));let s=(0,oe.useRef)(new Set),i=(0,oe.useMemo)(()=>e.filter(l=>!o(l.domPath)),[e,o]),d=(0,oe.useMemo)(()=>{let l=new Map;for(let m of i){let c=null;for(let f of m.comments){let g=f.element_metadata?.fingerprint;if(g){c=g;break}}let u=Qe(m.domPath,c);l.set(m.domPath,u)}return l},[i]);return(0,oe.useEffect)(()=>{let l=new Set;for(let[m,c]of d)c.method==="detached"&&l.add(m);r(l)},[d,r]),(0,oe.useEffect)(()=>{for(let l of i){let m=d.get(l.domPath);if(m&&m.method==="fingerprint"&&m.element&&m.score!==void 0&&m.score>=nn&&!s.current.has(l.domPath)){s.current.add(l.domPath);let c=he(m.element);for(let u of l.comments)u.thread_id===null&&n.updateComment(u.id,{dom_path:c}).catch(()=>{})}}},[i,d,n]),i.length===0?null:(0,Me.jsx)(Me.Fragment,{children:i.map(l=>{let m=d.get(l.domPath);return!m||m.method==="detached"?null:(0,Me.jsx)(Je,{domPath:l.domPath,comments:l.comments,isResolved:t(l.domPath),isNew:!a.current.has(l.domPath),resolvedElement:m.element},l.domPath)})})}var xe=require("react/jsx-runtime");function an(e,t){switch(t.type){case"TOGGLE_COMMENT_MODE":return{...e,isCommentMode:!e.isCommentMode};case"SET_COMMENT_MODE":return{...e,isCommentMode:t.payload};case"SET_COMMENTS":return{...e,comments:t.payload};case"ADD_COMMENT":return{...e,comments:[...e.comments,t.payload]};case"UPDATE_COMMENT":return{...e,comments:e.comments.map(o=>o.id===t.payload.id?t.payload:o)};default:return e}}var sn={isCommentMode:!1,comments:[]},st=(0,M.createContext)(null),ln="[data-fl-root]{--fl-accent:#E8611A;--fl-accent-hover:#C85215;--fl-accent-subtle:rgba(232,97,26,0.1);--fl-accent-glow:rgba(232,97,26,0.2);--fl-surface:#FAFAF7;--fl-surface-raised:#FFFFFF;--fl-border:#E8E5DF;--fl-border-strong:#D4CFC6;--fl-text-primary:#1A1A18;--fl-text-secondary:#6B6860;--fl-text-tertiary:#9C978E;--fl-resolved:#9C978E;--fl-z-base:100000;--fl-duration-instant:80ms;--fl-duration-fast:120ms;--fl-duration-normal:150ms;--fl-duration-marker-enter:280ms;--fl-duration-marker-ripple:400ms;--fl-duration-resolve-burst:450ms;--fl-marker-height:22px;--fl-marker-min-width:20px;--fl-marker-pointer-size:4px;--fl-marker-font-size:11px;--fl-toggle-size:36px;--fl-border-radius:8px;--fl-border-radius-sm:6px;--fl-shadow:0 2px 8px rgba(26,26,24,0.08),0 1px 2px rgba(26,26,24,0.04);--fl-shadow-lg:0 4px 16px rgba(26,26,24,0.12),0 2px 4px rgba(26,26,24,0.06);--fl-shadow-popover:0 8px 30px rgba(26,26,24,0.16),0 2px 6px rgba(26,26,24,0.08);--fl-font-family:'Instrument Sans',-apple-system,BlinkMacSystemFont,sans-serif;--fl-font-size-sm:12px;--fl-font-size-base:14px;--fl-font-size-lg:16px;--fl-line-height:1.5;--fl-font-weight-normal:400;--fl-font-weight-medium:500;font-family:var(--fl-font-family);font-size:var(--fl-font-size-base);line-height:var(--fl-line-height);color:var(--fl-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",cn="@keyframes fl-marker-enter{0%{opacity:0;transform:scale(0.4)}50%{opacity:1;transform:scale(1.08)}72%{transform:scale(0.97)}100%{transform:scale(1.0)}}@keyframes fl-marker-ripple{0%{transform:translate(-50%,-50%) scale(0.6);opacity:0.35}100%{transform:translate(-50%,-50%) scale(2.4);opacity:0}}@keyframes fl-resolve-particle{0%{opacity:0.9;transform:translate(var(--fl-dx),var(--fl-dy)) scale(1)}100%{opacity:0;transform:translate(var(--fl-end-dx),var(--fl-end-dy)) scale(0.3)}}@keyframes fl-toggle-beam{0%{box-shadow:0 2px 8px rgba(26,26,24,0.08),0 1px 2px rgba(26,26,24,0.04),0 0 0 0 rgba(232,97,26,0.25)}70%{box-shadow:0 2px 8px rgba(26,26,24,0.08),0 1px 2px rgba(26,26,24,0.04),0 0 0 10px transparent}100%{box-shadow:0 2px 8px rgba(26,26,24,0.08),0 1px 2px rgba(26,26,24,0.04),0 0 0 0 transparent}}",mn="@font-face{font-family:'Instrument Sans';font-style:normal;font-weight:400;font-display:swap;src:url('https://fonts.gstatic.com/s/instrumentsans/v1/pximypc9vsFDm051Uf6KVwgkfoSxQ0GsQv8To18.woff2') format('woff2')}@font-face{font-family:'Instrument Sans';font-style:normal;font-weight:500;font-display:swap;src:url('https://fonts.gstatic.com/s/instrumentsans/v1/pximypc9vsFDm051Uf6KVwgkfoSxQ0GsQv8To18.woff2') format('woff2')}@font-face{font-family:'Instrument Sans';font-style:normal;font-weight:600;font-display:swap;src:url('https://fonts.gstatic.com/s/instrumentsans/v1/pximypc9vsFDm051Uf6KVwgkfoSxQ0GsQv8To18.woff2') format('woff2')}";function dn(e,t){function o(){let n=t();return n?{sessionToken:n}:void 0}return{getConfig:n=>e.getConfig(n),getComments:(n,r)=>e.getComments(n,r,o()),addComment:n=>e.addComment(n,o()),updateComment:(n,r)=>e.updateComment(n,r,o()),uploadScreenshot:(n,r,a,s)=>e.uploadScreenshot(n,r,a,s,o()),subscribe:(n,r)=>e.subscribe(n,r,o())}}var So="Lay:";async function un(e,t,o,n){if(o?.id&&n){let a=await fetch(`${e}/api/v1/sessions/identify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:t,userId:o.id,userHash:n,userName:o.name??null})});if(!a.ok){let s=await a.json().catch(()=>({}));throw new Error(s.error??`Session error: ${a.status}`)}return a.json()}let r=await fetch(`${e}/api/v1/sessions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:t})});if(!r.ok){let a=await r.json().catch(()=>({}));throw new Error(a.error??`Session error: ${r.status}`)}return r.json()}function fn(e,t,o,n){return e||(o?De({apiUrl:o,ai:n}):ke())}function pn(e){return(e??"https://uselay.com").replace(/\/$/,"")}function Co({children:e,projectId:t,user:o,userHash:n,adapter:r,apiUrl:a,version:s,ai:i,mode:d,active:l,starterChips:m,screenshots:c}){let[u,f]=(0,M.useReducer)(an,sn),g=(0,M.useRef)(fn(r,t,a,i)),[N,x]=(0,M.useState)(null),[y,A]=(0,M.useState)(new Set),[X,v]=(0,M.useState)(null),b=(0,M.useRef)(null),[h,C]=(0,M.useState)(!1),B=(0,M.useCallback)(S=>{b.current=S,v(S),S?Mt(t,S):_t(t)},[t]),ue=(0,M.useRef)(dn(g.current,()=>b.current)),[be,Se]=(0,M.useState)("review"),[re,Re]=(0,M.useState)(!0),[H,ne]=(0,M.useState)(!1),j=d??be,T=l??re;(0,M.useEffect)(()=>{g.current.getConfig(t).then(S=>{Se(S.mode),Re(S.active),ne(!0)},()=>{ne(!0)})},[t]),(0,M.useEffect)(()=>{if(j!=="support"){C(!0);return}if(!H)return;o?.id&&!n&&console.warn(`${So} user.id provided without userHash in support mode. Comments will be anonymous. Pass userHash from createUserHash() for verified identity.`);let S=Pt(t);if(S){B(S),C(!0);return}let _=pn(a);un(_,t,o,n).then(se=>{B(se.token),C(!0)},se=>{console.warn(`${So} Failed to create session:`,se),C(!0)})},[t,j,H,o,n,a,B]),(0,M.useEffect)(()=>{let S=document.createElement("div");S.setAttribute(fe.ROOT,""),S.setAttribute(fe.IGNORE,""),document.body.appendChild(S);let _=document.createElement("style");return _.textContent=mn+ln+cn,S.appendChild(_),x(S),()=>{document.body.removeChild(S)}},[]),(0,M.useEffect)(()=>{if(!h)return;let S=window.location.pathname;ue.current.getComments(t,S).then(_=>{f({type:"SET_COMMENTS",payload:_})},_=>{if(_ instanceof Error&&_.message.includes("401")){B(null),C(!1);return}})},[t,h,B]),(0,M.useEffect)(()=>{if(!h)return;let S;try{S=ue.current.subscribe(t,_=>{switch(_.type){case"INSERT":f({type:"ADD_COMMENT",payload:_.comment});break;case"UPDATE":f({type:"UPDATE_COMMENT",payload:_.comment});break}})}catch{}return()=>S?.()},[t,h]);let ae={projectId:t,user:o,userHash:n,apiUrl:a,version:s,ai:i,mode:d,active:l,starterChips:m,screenshots:c},p=N&&H&&h&&T,P={isCommentMode:u.isCommentMode,comments:u.comments,adapter:ue.current,config:ae,dispatch:f,portalRoot:N,mode:j,remoteConfigLoaded:H,detachedDomPaths:y,setDetachedDomPaths:A};return(0,xe.jsxs)(st.Provider,{value:P,children:[e,p&&(0,xe.jsx)(Ge,{}),p&&(0,xe.jsx)(Ve,{}),p&&(0,xe.jsx)(et,{})]})}var xo=require("react");function _e(e){return e.mode==="review"}function Eo(e){return e.mode==="support"}var L=require("react/jsx-runtime"),hn={marginTop:6,border:"1px solid var(--fl-border)",borderRadius:"var(--fl-border-radius-sm)",backgroundColor:"var(--fl-surface)",fontFamily:"var(--fl-font-family)",fontSize:12,overflow:"hidden"},yn={display:"flex",alignItems:"flex-start",gap:6,padding:"6px 8px",cursor:"pointer",userSelect:"none",color:"var(--fl-text-secondary)",lineHeight:1.4},gn={flexShrink:0,fontSize:10,lineHeight:"16.8px",color:"var(--fl-text-tertiary)"},vn={minWidth:0,wordBreak:"break-word"},bn={padding:"0 8px 8px",display:"flex",flexDirection:"column",gap:6},Sn={fontSize:11,fontWeight:600,color:"var(--fl-text-tertiary)",textTransform:"uppercase",letterSpacing:.5,marginBottom:2,fontFamily:"var(--fl-font-family)"},tt={display:"inline-block",fontSize:11,fontWeight:500,padding:"1px 6px",borderRadius:3,backgroundColor:"var(--fl-border)",color:"var(--fl-text-secondary)",fontFamily:"var(--fl-font-family)"},Cn={...tt,backgroundColor:"#D32F2F",color:"#FFFFFF"},En={...tt,backgroundColor:"#F9A825",color:"#1A1A18"},Ct={fontSize:12,lineHeight:1.5,color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)"},xn={fontSize:12,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",fontStyle:"italic",animation:"fl-analyzing-pulse 1.5s ease-in-out infinite"},Rn={display:"flex",gap:6,flexWrap:"wrap",marginBottom:4},wn="@keyframes fl-analyzing-pulse{0%,100%{opacity:0.4}50%{opacity:1}}";function Tn(e){return e?_e(e)?e.category:`${e.intent.replace("_"," ")} \xB7 ${e.urgency} urgency`:"Analyzing..."}function An(e){return e==="high"?Cn:e==="medium"?En:tt}function Ro({elementMetadata:e,aiContext:t,aiEnabled:o=!0}){let[n,r]=(0,xo.useState)(!1);if(!e||!o||t&&!("mode"in t))return null;let a=Tn(t),s=!t;return(0,L.jsxs)("div",{style:hn,children:[s&&(0,L.jsx)("style",{children:wn}),(0,L.jsxs)("div",{style:yn,onClick:()=>r(i=>!i),role:"button",tabIndex:0,onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),r(d=>!d))},children:[(0,L.jsx)("span",{style:gn,children:n?"\u25BE":"\u25B8"}),(0,L.jsx)("span",{style:vn,children:n?"AI Interpretation":a})]}),n&&(0,L.jsx)("div",{style:bn,children:s?(0,L.jsxs)("div",{children:[(0,L.jsx)("div",{style:Sn,children:"AI Interpretation"}),(0,L.jsx)("div",{style:xn,children:"Analyzing..."})]}):t&&_e(t)?(0,L.jsx)("div",{children:t.interpretation?(0,L.jsx)("div",{style:Ct,children:t.interpretation}):(0,L.jsx)("div",{style:Ct,children:t.category})}):t?(0,L.jsxs)("div",{children:[(0,L.jsxs)("div",{style:Rn,children:[(0,L.jsx)("span",{style:tt,children:t.intent.replace("_"," ")}),(0,L.jsxs)("span",{style:An(t.urgency),children:[t.urgency," urgency"]})]}),(0,L.jsx)("div",{style:Ct,children:t.summary})]}):null})]})}0&&(module.exports={AIContextCard,ArchivedThreadsPanel,CommentActions,CommentAnchor,CommentDot,CommentDots,CommentItem,CommentLayer,CommentThread,DetachedCommentsPanel,ElementHighlighter,LayProvider,LayToggle,ReplyInput,captureElementMetadata,computeContrastRatio,createHostedAdapter,createMemoryAdapter,findByFingerprint,formatRelativeTime,generateDomPath,generateFingerprint,getGuestAuthor,isAIContextReview,isAIContextSupport,isCommentable,isGeneratedClassName,parseUserAgent,persistGuestName,resolveAuthor,resolveEffectiveBackground,resolveElement,saveGuestAuthor,scoreFingerprintMatch,summarizeDomPath,useCommentMode,useComments,useElementSelector,useLayContext});
2
+ //# sourceMappingURL=index.js.map