@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/LICENSE +21 -0
- package/README.md +112 -0
- package/dist/index.d.mts +493 -0
- package/dist/index.d.ts +493 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/server/index.d.mts +3 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +2 -0
- package/dist/server/index.mjs.map +1 -0
- package/package.json +71 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createContext as Bn,useReducer as $n,useRef as wt,useEffect as Ee,useState as re,useCallback as Un}from"react";function Do(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function He(){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 ze(e){console.warn(`${Oo} ${e}`)}function Ge(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 ze("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?ze("This domain is not authorized for this project."):l.status===404&&ze("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 P={BASE:1e5,HIGHLIGHT:100001,DOT:100002,POPOVER:100003,TOGGLE:100004};var k={PARTICLE_COUNT:5,PARTICLE_SIZE_MIN:3,PARTICLE_SIZE_MAX:4,DURATION:450,SPREAD_ANGLE:120,DISTANCE_MIN:14,DISTANCE_MAX:28},_={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},Pt={TOGGLE_COMMENT_MODE:"c"},V={ROOT:"data-fl-root",IGNORE:"data-fl-ignore"},Be={ANCESTOR_DEPTH:4,PROXIMITY_THRESHOLD:30},Mt={MAX_SEGMENTS:3,MAX_LENGTH:50},se={WIDTH:320,COLLAPSED_HEIGHT:40,GAP:8,EXPAND_DURATION:150},_t=[{label:"Visual bug",value:"Visual bug"},{label:"Copy issue",value:"Copy issue"},{label:"Love this",value:"Love this"}],Re={HOVER_DELAY:300,MAX_CONTENT_LENGTH:60},It={id:null,name:"Anonymous",avatar:null};var $e="lay_session_";function Lt(e){try{return localStorage.getItem(`${$e}${e}`)}catch{return null}}function kt(e,t){try{localStorage.setItem(`${$e}${e}`,t)}catch{}}function Dt(e){try{localStorage.removeItem(`${$e}${e}`)}catch{}}import{useState as ye,useCallback as Te}from"react";import{createPortal as pr}from"react-dom";import{useCallback as Nt,useEffect as Ho}from"react";import{useContext as Fo}from"react";function x(){let e=Fo(Ue);if(!e)throw new Error("useLayContext must be used within a <LayProvider />. Wrap your app in <LayProvider> to use uselay.");return e}function We(){let{isCommentMode:e,dispatch:t}=x(),o=Nt(()=>{t({type:"TOGGLE_COMMENT_MODE"})},[t]),n=Nt(r=>{t({type:"SET_COMMENT_MODE",payload:r})},[t]);return Ho(()=>{function r(a){let s=a.target;s.tagName==="INPUT"||s.tagName==="TEXTAREA"||s.tagName==="SELECT"||s.isContentEditable||a.key.toLowerCase()===Pt.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}}import{useMemo as ie}from"react";function F(){let{comments:e,detachedDomPaths:t}=x(),o=ie(()=>{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=ie(()=>{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 E of u)if(E.thread_id===null)f.push(E);else{let y=g.get(E.thread_id);y?y.push(E):g.set(E.thread_id,[E])}f.sort((E,y)=>new Date(E.created_at).getTime()-new Date(y.created_at).getTime());let M=f.map(E=>{let y=g.get(E.id)??[];return y.sort((w,D)=>new Date(w.created_at).getTime()-new Date(D.created_at).getTime()),{root:E,replies:y}});return{domPath:c,threads:M,allComments:u}})},[e]),r=ie(()=>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=ie(()=>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=ie(()=>{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=ie(()=>{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}}import{useEffect as Ot,useRef as zo,useCallback as Go,useState as Bo}from"react";import{createPortal as $o}from"react-dom";import{jsx as le,jsxs as we}from"react/jsx-runtime";var Uo={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:P.POPOVER},Wo={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},Ko={overflowY:"auto",flexGrow:1,minHeight:0},Xo={padding:"20px 12px",textAlign:"center",fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Vo={padding:"10px 12px",borderBottom:"1px solid var(--fl-border)",fontFamily:"var(--fl-font-family)"},Yo={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"},Zo={display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:4},qo={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Ft={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"},jo={...Ft,color:"var(--fl-accent)"};function Jo({thread:e,onRestore:t}){let[o,n]=Bo(!1);return we("div",{style:Vo,children:[we("div",{style:Yo,children:["\u201C",e.root.content,"\u201D"]}),we("div",{style:Zo,children:[le("span",{style:qo,children:e.root.author.name}),le("button",{type:"button",style:o?jo:Ft,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),onClick:()=>t(e.root),children:"Restore"})]})]})}function Ke({onClose:e}){let{portalRoot:t,adapter:o,config:n,dispatch:r}=x(),{archivedThreads:a}=F(),s=zo(null),i=Go(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 Ot(()=>{function d(l){l.key==="Escape"&&(l.preventDefault(),e())}return document.addEventListener("keydown",d,!0),()=>document.removeEventListener("keydown",d,!0)},[e]),Ot(()=>{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?$o(we("div",{ref:s,style:Uo,"data-fl-ignore":"",children:[le("div",{style:Wo,children:"Archived Threads"}),le("div",{style:Ko,children:a.length===0?le("div",{style:Xo,children:"No archived threads on this page."}):a.map(d=>le(Jo,{thread:d,onRestore:i},d.root.id))})]}),t):null}import{useEffect as Bt,useRef as er}from"react";import{createPortal as tr}from"react-dom";function $(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 Ht={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 Qo(e){let t=e.tagName.toLowerCase();if(e.id)return`#${e.id}`;let o=e.getAttribute("aria-label");if(o)return`"${Xe(o,20)}"`;if(["button","a","h1","h2","h3","h4","h5","h6"].includes(t)){let r=e.textContent?.trim();if(r&&r.length<=25)return`"${Xe(r,20)}" ${Ht[t]??t}`}let n=e.getAttribute("data-testid")??e.getAttribute("data-feedback-id");return n||(Ht[t]??t)}function Gt(e){let t=[],o=e;for(;o&&o!==document.body&&(t.unshift(Qo(o)),!o.id);)o=o.parentElement;return e.closest("[id]")||t.unshift("page"),t.slice(-Mt.MAX_SEGMENTS)}function Ve(e){let t=e.split(/\s*>\s*/);if(t.length===0)return e;let o=zt(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=zt(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 Xe(r,30)}function zt(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 Xe(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}import{jsx as Y,jsxs as he}from"react/jsx-runtime";var or={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:P.POPOVER},rr={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},nr={padding:"6px 12px 8px",fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",lineHeight:1.4},ar={overflowY:"auto",flexGrow:1,minHeight:0},sr={padding:"20px 12px",textAlign:"center",fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},ir={padding:"10px 12px",borderBottomWidth:1,borderBottomStyle:"solid",borderBottomColor:"var(--fl-border)",fontFamily:"var(--fl-font-family)"},lr={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"},cr={display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:4},mr={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},dr={fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},ur={marginTop:4,fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",fontStyle:"italic"};function fr({thread:e}){let t=Ve(e.root.dom_path);return he("div",{style:ir,children:[he("div",{style:lr,children:["\u201C",e.root.content,"\u201D"]}),he("div",{style:cr,children:[Y("span",{style:mr,children:e.root.author.name}),Y("span",{style:dr,children:$(e.root.created_at)})]}),he("div",{style:ur,children:["Was on: ",t]})]})}function Ye({onClose:e}){let{portalRoot:t}=x(),{detachedThreads:o}=F(),n=er(null);return Bt(()=>{function r(a){a.key==="Escape"&&(a.preventDefault(),e())}return document.addEventListener("keydown",r,!0),()=>document.removeEventListener("keydown",r,!0)},[e]),Bt(()=>{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?tr(he("div",{ref:n,style:or,"data-fl-ignore":"",children:[Y("div",{style:rr,children:"Detached Comments"}),Y("div",{style:nr,children:"These comments can't find their original element."}),Y("div",{style:ar,children:o.length===0?Y("div",{style:sr,children:"No detached comments on this page."}):o.map(r=>Y(fr,{thread:r},r.root.id))})]}),t):null}import{Fragment as br,jsx as U,jsxs as ge}from"react/jsx-runtime";var qe={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:P.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)"},hr={...qe,transform:"translateY(-50%) translateX(-4px)",borderColor:"var(--fl-border-strong)",color:"var(--fl-text-primary)",boxShadow:"var(--fl-shadow-lg)"},Ut={...qe,backgroundColor:"var(--fl-accent)",borderColor:"var(--fl-accent)",color:"#FFFFFF",boxShadow:"var(--fl-shadow-lg)",animation:"none"},yr={...Ut,transform:"translateY(-50%) translateX(-4px)"},Wt={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"},gr={...Wt,opacity:1},Ze={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"},$t={...Ze,color:"var(--fl-text-primary)",borderColor:"var(--fl-border-strong)"};function vr({active:e}){return ge("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:e?"#FFFFFF":"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[U("path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}),U("path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}),U("path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}),U("path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"})]})}function je(){let{isCommentMode:e,toggleCommentMode:t}=We(),{portalRoot:o,mode:n}=x(),{archivedCount:r,detachedCount:a}=F(),s=n!=="support",[i,d]=ye(!1),[l,m]=ye(!1),[c,u]=ye(!1),[f,g]=ye(!1),[M,E]=ye(!1),y=Te(h=>{h.stopPropagation(),g(C=>!C),E(!1)},[]),w=Te(h=>{h.stopPropagation(),E(C=>!C),g(!1)},[]),D=Te(()=>{g(!1)},[]),v=Te(()=>{E(!1)},[]);if(!o)return null;let b;return e?b=i?yr:Ut:b=i?hr:qe,pr(ge(br,{children:[ge("button",{type:"button",onClick:t,onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),style:b,"aria-label":e?"Exit comment mode":"Enter comment mode",[V.IGNORE]:"",children:[U(vr,{active:e}),U("span",{style:i?gr:Wt,children:"Comment mode (C)"}),s&&r>0&&ge("span",{role:"button",tabIndex:0,style:l?$t:Ze,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&&ge("span",{role:"button",tabIndex:0,style:{...c?$t:Ze,top:r>0?"calc(100% + 28px)":"100%"},onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1),onClick:w,onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),w(h))},children:[a," detached"]})]}),s&&f&&U(Ke,{onClose:D}),s&&M&&U(Ye,{onClose:v})]}),o)}import{useState as wr,useEffect as Tr,useCallback as Ar,useRef as Pr}from"react";function ce(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=Sr(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 Sr(e){return Array.from(e.classList).filter(o=>!Kt(o))}function Kt(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 me(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 Cr=["id","class","role","type","name","href","src","data-testid","data-feedback-id"];function Je(e){let t=e.tagName.toLowerCase(),o=(e.textContent?.trim()??"").slice(0,80),n={};for(let l of Cr){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 Xt(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 Qe(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=Xt(e,a);s>r&&(r=s,n=a)}return r>=t?{element:n,score:r}:{element:null,score:r}}var Er=["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 Vt(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 tt(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 Zt(e){let t=window.getComputedStyle(e),o=t.getPropertyValue("background-color");if(o&&!tt(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 qt(e){let t=e;for(;t&&t!==document.documentElement;){let o=window.getComputedStyle(t).backgroundColor;if(o&&!tt(o))return o;t=t.parentElement}if(document.documentElement){let o=window.getComputedStyle(document.documentElement).backgroundColor;if(o&&!tt(o))return o}return"rgb(255, 255, 255)"}function et(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Yt(e){return .2126*et(e.r)+.7152*et(e.g)+.0722*et(e.b)}function jt(e,t){let o=Vt(e),n=Vt(t);if(!o||!n)return{ratio:0,passesAA:!1};let r=Yt(o),a=Yt(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 Jt(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 Er)o[u]=t.getPropertyValue(u);let n=e.getAttribute("role"),r=e.getAttribute("aria-label"),a=o.color,s=qt(e);s!==o["background-color"]&&(o["effective-background-color"]=s);let{ratio:i,passesAA:d}=jt(a,s),l={width:window.innerWidth,height:window.innerHeight},m=Jt(navigator.userAgent),c;try{c=Je(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 Qt(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 xr='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 ot(e,t){let o=Qt(t);if(o>=2||Zt(t))return null;let n=null,r=o,a=t.parentElement,s=0;for(;a&&a!==document.body&&s<Be.ANCESTOR_DEPTH&&a.getAttribute("data-fl-magnet")!=="off";){let c=Qt(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(xr),m=null;for(let c of l){if(c===t||c.getAttribute("data-fl-magnet")==="off"||!me(c))continue;let u=c.getBoundingClientRect(),f=Rr(i,u);f<=Be.PROXIMITY_THRESHOLD&&(!m||f<m.dist)&&(m={el:c,dist:f})}return m?.el??null}function Rr(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 rt(){let{isCommentMode:e}=x(),[t,o]=wr({hoveredElement:null,selectedElement:null}),n=Pr(t);n.current=t;let r=Ar(()=>{o(a=>({...a,selectedElement:null}))},[]);return Tr(()=>{if(!e){o({hoveredElement:null,selectedElement:null});return}function a(l){let m=l.target;if(!m||!me(m)){o(u=>u.hoveredElement!==null?{...u,hoveredElement:null}:u);return}let c=ot(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||!me(m))return;l.preventDefault(),l.stopPropagation();let c=ot(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}}import{useState as Mr,useEffect as eo,useCallback as _r,useRef as Ir}from"react";import{createPortal as Lr}from"react-dom";import{jsx as Dr}from"react/jsx-runtime";var kr={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:P.HIGHLIGHT,boxSizing:"border-box"};function nt({hoveredElement:e,selectedElement:t}){let{isCommentMode:o,portalRoot:n}=x(),[r,a]=Mr(null),s=Ir(0),i=_r(()=>{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 eo(()=>{i()},[i]),eo(()=>{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:Lr(Dr("div",{style:{...kr,top:r.top,left:r.left,width:r.width,height:r.height},"data-fl-ignore":""}),n)}import{useState as to,useEffect as oo,useCallback as Nr,useRef as Or}from"react";import{createPortal as Fr}from"react-dom";import{jsx as zr}from"react/jsx-runtime";var Hr={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:P.HIGHLIGHT,boxShadow:"0 1px 3px rgba(26,26,24,0.06)",transition:"all var(--fl-duration-instant) ease-out"};function ro({hoveredElement:e,selectedElement:t}){let{isCommentMode:o,portalRoot:n}=x(),[r,a]=to(null),[s,i]=to(""),d=Or(0),l=t?null:e,m=Nr(()=>{if(!l){a(null);return}let c=l.getBoundingClientRect(),u=Gt(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 oo(()=>{m()},[m]),oo(()=>{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:Fr(zr("div",{style:{...Hr,top:r.top,left:r.left},"data-fl-ignore":"",children:s}),n)}import{useState as q,useEffect as de,useCallback as j,useRef as be}from"react";import{createPortal as Br}from"react-dom";var no="fl-author";function Z(){try{let e=localStorage.getItem(no);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 at(e){try{let t=e.trim();if(!t)return;localStorage.setItem(no,JSON.stringify({name:t}))}catch{}}function W(e,t){if(e.user)return e.user;let o=t.trim();return o?{id:null,name:o,avatar:null}:{...It}}function ve(e){let t=e.trim();t&&at(t)}var Gr=.65;async function ao(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?.(V.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)})}import{jsx as Q,jsxs as st}from"react/jsx-runtime";var lo={position:"fixed",zIndex:P.POPOVER,width:se.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 ${se.EXPAND_DURATION}ms ease-out`},$r={...lo,opacity:1,transform:"translateY(0)"},Ur={display:"flex",flexDirection:"column",gap:8,padding:12},Wr={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"},so={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"},Kr={display:"flex",alignItems:"center",justifyContent:"flex-end",gap:8},co={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"},Xr={...co,opacity:.4,cursor:"default"},Vr={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Yr={display:"flex",alignItems:"center",gap:6,padding:"6px 8px"},mo={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},Zr={...mo,backgroundColor:"var(--fl-accent-subtle)",borderColor:"var(--fl-accent)",color:"var(--fl-accent)"},qr={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},J=8,io=120;function jr(e){let t=window.innerWidth,o=window.innerHeight,n=e.bottom+J,r=e.left;return n+io>o&&(n=e.top-io-J),r+se.WIDTH>t&&(r=t-se.WIDTH-J),r<J&&(r=J),n<J&&(n=J),{top:n,left:r}}function it({selectedElement:e,onClearSelection:t}){let{portalRoot:o,adapter:n,config:r}=x(),[a,s]=q(""),[i,d]=q(""),[l,m]=q(null),[c,u]=q(!1),[f,g]=q(!1),[M,E]=q(null),y=be(null),w=be(null),D=be(null),v=be(0),b=!!r.user,h=r.starterChips??_t,C=j(()=>{if(!e){m(null);return}let p=e.getBoundingClientRect();m(jr(p))},[e]);de(()=>{if(e){if(d(""),g(!1),E(null),C(),!b){let p=Z();s(p?.name??"")}requestAnimationFrame(()=>{u(!0)})}else u(!1),m(null)},[e,C,b]),de(()=>{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 L=be(f);L.current=f,de(()=>{if(!e)return;function p(T){T.key==="Escape"&&(T.preventDefault(),T.stopPropagation(),L.current?(g(!1),d("")):t())}return document.addEventListener("keydown",p,!0),()=>document.removeEventListener("keydown",p,!0)},[e,t]),de(()=>{if(!e||f)return;function p(T){T.key.length===1&&!T.ctrlKey&&!T.metaKey&&(T.preventDefault(),g(!0),d(T.key),setTimeout(()=>{w.current?.focus(),w.current&&(w.current.selectionStart=w.current.value.length)},10))}return document.addEventListener("keydown",p,!0),()=>document.removeEventListener("keydown",p,!0)},[e,f]),de(()=>{if(!e)return;function p(S){let A=S.target;D.current?.contains(A)||A.closest("[data-fl-root]")||t()}let T=setTimeout(()=>{document.addEventListener("mousedown",p,!0)},50);return()=>{clearTimeout(T),document.removeEventListener("mousedown",p,!0)}},[e,t]);let[X,ne]=q(!1),ae=r.screenshots!==!1,H=j((p,T)=>{ae&&ao(p).then(S=>{S&&n.uploadScreenshot(r.projectId,T,S.blob,S.bounds).catch(()=>{})})},[ae,n,r.projectId]),pe=j(async p=>{if(!e)return;let T=e,S=ce(T),A=window.location.pathname,B=Z(),Fe=W(r,B?.name??""),xe=null;try{xe=Ae(T)}catch{}let Lo={project_id:r.projectId,thread_id:null,author:Fe,content:p.value??p.label,status:"open",dom_path:S,url_path:A,element_metadata:xe,resolved_by:null,resolved_at:null,archived_at:null,ai_context:null,screenshot_url:null,element_bounds:null};try{let ko=await n.addComment(Lo);H(T,ko.id),t()}catch{d(p.value??p.label),g(!0),setTimeout(()=>w.current?.focus(),10)}},[e,r,n,t,H]),I=j(async()=>{if(!i.trim()||!e)return;let p=e,T=ce(p),S=window.location.pathname,A=W(r,a);b||ve(a);let B=null;try{B=Ae(p)}catch{console.warn("Lay: Could not capture element metadata.")}let Fe={project_id:r.projectId,thread_id:null,author:A,content:i.trim(),status:"open",dom_path:T,url_path:S,element_metadata:B,resolved_by:null,resolved_at:null,archived_at:null,ai_context:null,screenshot_url:null,element_bounds:null};try{let xe=await n.addComment(Fe);d(""),H(p,xe.id),t()}catch{ne(!0),setTimeout(()=>ne(!1),1200)}},[i,a,e,r,n,t,b,H]),z=j(()=>{g(!0),setTimeout(()=>w.current?.focus(),10)},[]),O=j(p=>{p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),I())},[I]),R=j(p=>{p.key==="Enter"&&(p.preventDefault(),w.current?.focus())},[]);if(de(()=>{f&&e&&!i&&setTimeout(()=>{if(!b&&!Z()?.name){y.current?.focus();return}w.current?.focus()},10)},[f,e,b,i]),!o||!e||!l)return null;let G=i.trim();return Br(Q("div",{ref:D,style:{...c?$r:lo,top:l.top,left:l.left,maxHeight:f?400:se.COLLAPSED_HEIGHT},"data-fl-ignore":"",children:f?st("div",{style:Ur,children:[b?null:Q("input",{ref:y,type:"text",value:a,onChange:p=>s(p.target.value),onKeyDown:R,placeholder:"Your name (optional)",style:Wr}),Q("textarea",{ref:w,value:i,onChange:p=>d(p.target.value),onKeyDown:O,placeholder:"Leave feedback...",style:X?{...so,borderColor:"#D32F2F"}:so,rows:3}),st("div",{style:Kr,children:[Q("span",{style:Vr,children:"Esc \u21A9 collapse"}),Q("button",{type:"button",onClick:I,disabled:!G,style:G?co:Xr,children:"Submit"})]})]}):st("div",{style:Yr,children:[h.map((p,T)=>Q("button",{type:"button",onClick:()=>pe(p),onMouseEnter:()=>E(T),onMouseLeave:()=>E(null),style:M===T?Zr:mo,children:p.label},p.label)),Q("span",{style:qr,onClick:z,role:"button",tabIndex:0,children:"Type..."})]})}),o)}import{Fragment as Jr,jsx as lt,jsxs as Qr}from"react/jsx-runtime";function ct(){let{hoveredElement:e,selectedElement:t,clearSelection:o}=rt();return Qr(Jr,{children:[lt(nt,{hoveredElement:e,selectedElement:t}),lt(ro,{hoveredElement:e,selectedElement:t}),lt(it,{selectedElement:t,onClearSelection:o})]})}import{useRef as Ao,useEffect as Po,useMemo as Mo}from"react";import{useState as te,useEffect as ke,useCallback as ue,useRef as St,memo as wn}from"react";import{createPortal as Tn}from"react-dom";import So,{useEffect as Ce,useRef as yt,useMemo as gn,useCallback as Le}from"react";import{createPortal as vn}from"react-dom";import{jsx as Pe,jsxs as Se}from"react/jsx-runtime";var uo={padding:"10px 0",fontFamily:"var(--fl-font-family)"},en={...uo,marginLeft:16,paddingLeft:12,borderLeft:"2px solid var(--fl-border)"},tn={display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:4},on={display:"flex",alignItems:"center",gap:6,minWidth:0},rn={fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-text-secondary)",fontFamily:"var(--fl-font-family)"},nn={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},an={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"},sn={display:"flex",alignItems:"center",gap:4,marginTop:6,fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},ln={color:"var(--fl-accent)",fontSize:12};function Me({comment:e,isReply:t=!1,actions:o}){return Se("div",{style:t?en:uo,children:[Se("div",{style:tn,children:[Se("div",{style:on,children:[Pe("span",{style:rn,children:e.author.name}),Pe("span",{style:nn,children:$(e.created_at)})]}),o]}),Pe("div",{style:an,children:e.content}),e.status==="resolved"&&e.resolved_by&&!t&&Se("div",{style:sn,children:[Pe("span",{style:ln,children:"\u2713"}),Se("span",{children:["Resolved by ",e.resolved_by.name,e.resolved_at?` \xB7 ${$(e.resolved_at)}`:""]})]})]})}import{useState as mt}from"react";import{jsx as _e,jsxs as mn}from"react/jsx-runtime";var fo={display:"flex",alignItems:"center",gap:4},dt={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"},po={...dt,color:"var(--fl-accent)",backgroundColor:"var(--fl-accent-subtle)"},ho={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"},cn={...ho,color:"var(--fl-text-secondary)"};function ut({comment:e,onResolve:t,onReopen:o,onArchive:n}){let[r,a]=mt(!1),[s,i]=mt(!1),[d,l]=mt(!1);return e.status==="open"?_e("div",{style:fo,children:_e("button",{type:"button",title:"Resolve",style:r?po:dt,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),onClick:m=>{m.stopPropagation(),t(e)},children:"\u2713"})}):e.status==="resolved"?mn("div",{style:fo,children:[_e("button",{type:"button",title:"Reopen",style:s?po:dt,onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),onClick:m=>{m.stopPropagation(),o(e)},children:"\u21A9"}),_e("button",{type:"button",title:"Archive",style:d?cn:ho,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),onClick:m=>{m.stopPropagation(),n(e)},children:"Archive"})]}):null}import{useState as ft,useCallback as pt,useRef as yo,useEffect as dn}from"react";import{jsx as Ie,jsxs as vo}from"react/jsx-runtime";var un={display:"flex",flexDirection:"column",gap:6,padding:12},fn={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"},go={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"},pn={display:"flex",alignItems:"center",justifyContent:"flex-end",gap:8},bo={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"},hn={...bo,opacity:.4,cursor:"default"},yn={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"};function ht({rootComment:e,onReplySubmitted:t}){let{adapter:o,config:n}=x(),[r,a]=ft(""),[s,i]=ft(""),[d,l]=ft(!1),m=yo(null),c=yo(null),u=!!n.user;dn(()=>{if(!u){let y=Z();a(y?.name??"")}},[u]);let f=pt(async()=>{if(!s.trim())return;let y=W(n,r);u||ve(r);let w={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(w),i(""),t?.(),setTimeout(()=>{c.current?.focus()},10)}catch{l(!0),setTimeout(()=>l(!1),1200)}},[s,r,n,o,e,u,t]),g=pt(y=>{y.key==="Enter"&&!y.shiftKey&&(y.preventDefault(),f())},[f]),M=pt(y=>{y.key==="Enter"&&(y.preventDefault(),c.current?.focus())},[]),E=s.trim();return vo("div",{style:un,children:[u?null:Ie("input",{ref:m,type:"text",value:r,onChange:y=>a(y.target.value),onKeyDown:M,placeholder:"Your name (optional)",style:fn}),Ie("textarea",{ref:c,value:s,onChange:y=>i(y.target.value),onKeyDown:g,placeholder:"Reply...",style:d?{...go,borderColor:"#D32F2F"}:go,rows:2}),vo("div",{style:pn,children:[Ie("span",{style:yn,children:"Esc"}),Ie("button",{type:"button",onClick:f,disabled:!E,style:E?bo:hn,children:"Reply"})]})]})}import{Fragment as Rn,jsx as ee,jsxs as vt}from"react/jsx-runtime";var Eo={position:"fixed",zIndex:P.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"},bn={...Eo,opacity:1,transform:"translateY(0)"},Sn={overflowY:"auto",padding:12,flexGrow:1,minHeight:0},xo={height:1,backgroundColor:"var(--fl-border)",margin:"0",border:"none",flexShrink:0},Cn={...xo,backgroundColor:"var(--fl-border-strong)"},K=8,gt=320,Co=200;function En(e){let t=window.innerWidth,o=window.innerHeight,n=e.bottom+K,r=e.right-gt;return n+Co>o&&(n=e.top-Co-K),r<K&&(r=K),r+gt>t-K&&(r=t-gt-K),n<K&&(n=K),{top:n,left:r}}function xn(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 bt({comments:e,dotRect:t,onClose:o,onDidResolve:n}){let{portalRoot:r,adapter:a,config:s,dispatch:i}=x(),d=yt(null),l=yt(null),[m,c]=So.useState(!1),u=En(t),f=gn(()=>xn(e),[e]),g=f.length>0?f[0].root:null,M=Le(v=>{let b=W(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]),E=Le(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=Le(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]);Ce(()=>{requestAnimationFrame(()=>{c(!0)})},[]),Ce(()=>{m&&l.current&&(l.current.scrollTop=l.current.scrollHeight)},[m]);let w=yt(e.length);Ce(()=>{e.length>w.current&&l.current&&(l.current.scrollTop=l.current.scrollHeight),w.current=e.length},[e.length]);let D=Le(()=>{},[]);return Ce(()=>{function v(b){b.key==="Escape"&&(b.preventDefault(),o())}return document.addEventListener("keydown",v,!0),()=>document.removeEventListener("keydown",v,!0)},[o]),Ce(()=>{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?vn(vt("div",{ref:d,style:{...m?bn:Eo,top:u.top,left:u.left},"data-fl-ignore":"",children:[ee("div",{ref:l,style:Sn,children:f.map((v,b)=>vt(So.Fragment,{children:[b>0?ee("hr",{style:xo}):null,ee(Me,{comment:v.root,actions:ee(ut,{comment:v.root,onResolve:M,onReopen:E,onArchive:y})}),v.replies.map(h=>ee(Me,{comment:h,isReply:!0},h.id))]},v.root.id))}),g?vt(Rn,{children:[ee("hr",{style:Cn}),ee(ht,{rootComment:g,onReplySubmitted:D})]}):null]}),r):null}import{Fragment as Hn,jsx as oe,jsxs as De}from"react/jsx-runtime";function An(e){let t=[],n=k.SPREAD_ANGLE/2;for(let r=0;r<e;r++){let s=90-n+k.SPREAD_ANGLE/(e-1)*r+(Math.random()-.5)*15,i=k.DISTANCE_MIN+Math.random()*(k.DISTANCE_MAX-k.DISTANCE_MIN),d=s*Math.PI/180,l=Math.cos(d)*i,m=-Math.sin(d)*i,c=k.PARTICLE_SIZE_MIN+Math.random()*(k.PARTICLE_SIZE_MAX-k.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 Ct={position:"fixed",minWidth:_.MARKER_MIN_WIDTH,height:_.MARKER_HEIGHT,padding:"0 5px",borderRadius:4,border:"none",backgroundColor:"var(--fl-accent)",color:"#FFFFFF",fontSize:_.MARKER_FONT_SIZE,fontFamily:"var(--fl-font-family)",fontWeight:600,lineHeight:`${_.MARKER_HEIGHT}px`,textAlign:"center",cursor:"pointer",zIndex:P.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"},Pn={...Ct,transform:"scale(1.15)"},Ro={...Ct,backgroundColor:"var(--fl-resolved)"},Mn={...Ro,transform:"scale(1.15)"},wo={position:"absolute",bottom:-_.MARKER_POINTER,left:"50%",transform:"translateX(-50%)",width:0,height:0,borderLeft:`${_.MARKER_POINTER}px solid transparent`,borderRight:`${_.MARKER_POINTER}px solid transparent`,borderTopWidth:_.MARKER_POINTER,borderTopStyle:"solid",borderTopColor:"var(--fl-accent)",pointerEvents:"none"},_n={...wo,borderTopColor:"var(--fl-resolved)"},To={position:"absolute",top:`calc(100% + ${_.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:P.POPOVER,boxShadow:"var(--fl-shadow)",maxWidth:260,opacity:0,transition:"opacity var(--fl-duration-fast) ease-out"},In={...To,opacity:1},Ln={display:"flex",gap:6,alignItems:"baseline"},kn={fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-surface)"},Dn={color:"rgba(255, 255, 255, 0.55)"},Nn={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<=Re.MAX_CONTENT_LENGTH?e:e.slice(0,Re.MAX_CONTENT_LENGTH).trimEnd()+"\u2026"}function Fn(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-_.MARKER_HEIGHT-_.MARKER_POINTER,a=t.right-_.MARKER_MIN_WIDTH/2;return{top:r,left:a,visible:!0}}var Et=wn(function({domPath:t,comments:o,isResolved:n=!1,isNew:r=!1,resolvedElement:a}){let{portalRoot:s}=x(),[i,d]=te(null),[l,m]=te(!1),[c,u]=te(!1),[f,g]=te(!1),[M,E]=te(r),[y,w]=te(!1),[D,v]=te([]),b=St(null),h=St(0),C=St(null),L=ue(()=>{let R=a??document.querySelector(t);if(!R){d(null);return}d(Fn(R))},[t,a]);ke(()=>{L()},[L]),ke(()=>{function R(){cancelAnimationFrame(h.current),h.current=requestAnimationFrame(()=>{L()})}return window.addEventListener("scroll",R,!0),window.addEventListener("resize",R),()=>{window.removeEventListener("scroll",R,!0),window.removeEventListener("resize",R),cancelAnimationFrame(h.current)}},[L]),ke(()=>{if(!M)return;let R=setTimeout(()=>E(!1),k.DURATION);return()=>clearTimeout(R)},[M]);let X=ue(()=>{v(An(k.PARTICLE_COUNT)),w(!0);let R=setTimeout(()=>{w(!1),v([])},k.DURATION+100);return()=>clearTimeout(R)},[]),ne=ue(()=>{m(!0),C.current=setTimeout(()=>{u(!0)},Re.HOVER_DELAY)},[]),ae=ue(()=>{m(!1),C.current&&(clearTimeout(C.current),C.current=null),u(!1)},[]);ke(()=>()=>{C.current&&clearTimeout(C.current)},[]);let H=ue(R=>{R.stopPropagation(),u(!1),C.current&&(clearTimeout(C.current),C.current=null),g(G=>!G)},[]),pe=ue(()=>{g(!1)},[]);if(!s||!i||!i.visible)return null;let I=o.length,z;I===1?z=o[o.length-1].author.name.charAt(0).toUpperCase():z=I>_.MARKER_MAX_COUNT?"99+":`${I}`;let O;return n?O=l?Mn:Ro:O=l?Pn:Ct,Tn(De(Hn,{children:[De("button",{ref:b,type:"button",onClick:H,onMouseEnter:ne,onMouseLeave:ae,style:{...O,top:i.top,left:i.left},"aria-label":`${I} comment${I>1?"s":""}${n?" (resolved)":""}`,"data-fl-ignore":"",children:[z,oe("span",{style:n?_n:wo}),M?oe("span",{style:{position:"absolute",top:"50%",left:"50%",width:_.MARKER_HEIGHT,height:_.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?D.map((R,G)=>oe("span",{style:{position:"absolute",top:"50%",left:"50%",width:R.size,height:R.size,borderRadius:"50%",backgroundColor:R.color,pointerEvents:"none","--fl-end-dx":`${R.endX}px`,"--fl-end-dy":`${R.endY}px`,"--fl-dx":"0px","--fl-dy":"0px",animation:`fl-resolve-particle var(--fl-duration-resolve-burst) ease-out ${R.delay}ms forwards`}},G)):null,!f&&o.length>0&&De("span",{style:c?In:To,children:[De("span",{style:Ln,children:[oe("span",{style:kn,children:o[0].author.name}),oe("span",{style:Dn,children:$(o[0].created_at)})]}),oe("div",{style:Nn,children:On(o[0].content)})]})]}),f&&b.current?oe(bt,{comments:o,dotRect:b.current.getBoundingClientRect(),onClose:pe,onDidResolve:X}):null]}),s)});function xt(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=Qe(t);if(n.element)return{element:n.element,method:"fingerprint",score:n.score}}return{element:null,method:"detached"}}import{Fragment as Gn,jsx as _o}from"react/jsx-runtime";var zn=60;function Rt(){let{groupedByDomPath:e,isDomPathFullyResolved:t,isDomPathFullyArchived:o}=F(),{adapter:n,setDetachedDomPaths:r}=x(),a=Ao(null);a.current===null&&(a.current=new Set(e.map(l=>l.domPath)));let s=Ao(new Set),i=Mo(()=>e.filter(l=>!o(l.domPath)),[e,o]),d=Mo(()=>{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=xt(m.domPath,c);l.set(m.domPath,u)}return l},[i]);return Po(()=>{let l=new Set;for(let[m,c]of d)c.method==="detached"&&l.add(m);r(l)},[d,r]),Po(()=>{for(let l of i){let m=d.get(l.domPath);if(m&&m.method==="fingerprint"&&m.element&&m.score!==void 0&&m.score>=zn&&!s.current.has(l.domPath)){s.current.add(l.domPath);let c=ce(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:_o(Gn,{children:i.map(l=>{let m=d.get(l.domPath);return!m||m.method==="detached"?null:_o(Et,{domPath:l.domPath,comments:l.comments,isResolved:t(l.domPath),isNew:!a.current.has(l.domPath),resolvedElement:m.element},l.domPath)})})}import{jsx as Tt,jsxs as ea}from"react/jsx-runtime";function Wn(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 Kn={isCommentMode:!1,comments:[]},Ue=Bn(null),Xn="[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}",Vn="@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}}",Yn="@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 Zn(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 Io="Lay:";async function qn(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 jn(e,t,o,n){return e||(o?Ge({apiUrl:o,ai:n}):He())}function Jn(e){return(e??"https://uselay.com").replace(/\/$/,"")}function Qn({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]=$n(Wn,Kn),g=wt(jn(r,t,a,i)),[M,E]=re(null),[y,w]=re(new Set),[D,v]=re(null),b=wt(null),[h,C]=re(!1),L=Un(S=>{b.current=S,v(S),S?kt(t,S):Dt(t)},[t]),X=wt(Zn(g.current,()=>b.current)),[ne,ae]=re("review"),[H,pe]=re(!0),[I,z]=re(!1),O=d??ne,R=l??H;Ee(()=>{g.current.getConfig(t).then(S=>{ae(S.mode),pe(S.active),z(!0)},()=>{z(!0)})},[t]),Ee(()=>{if(O!=="support"){C(!0);return}if(!I)return;o?.id&&!n&&console.warn(`${Io} user.id provided without userHash in support mode. Comments will be anonymous. Pass userHash from createUserHash() for verified identity.`);let S=Lt(t);if(S){L(S),C(!0);return}let A=Jn(a);qn(A,t,o,n).then(B=>{L(B.token),C(!0)},B=>{console.warn(`${Io} Failed to create session:`,B),C(!0)})},[t,O,I,o,n,a,L]),Ee(()=>{let S=document.createElement("div");S.setAttribute(V.ROOT,""),S.setAttribute(V.IGNORE,""),document.body.appendChild(S);let A=document.createElement("style");return A.textContent=Yn+Xn+Vn,S.appendChild(A),E(S),()=>{document.body.removeChild(S)}},[]),Ee(()=>{if(!h)return;let S=window.location.pathname;X.current.getComments(t,S).then(A=>{f({type:"SET_COMMENTS",payload:A})},A=>{if(A instanceof Error&&A.message.includes("401")){L(null),C(!1);return}})},[t,h,L]),Ee(()=>{if(!h)return;let S;try{S=X.current.subscribe(t,A=>{switch(A.type){case"INSERT":f({type:"ADD_COMMENT",payload:A.comment});break;case"UPDATE":f({type:"UPDATE_COMMENT",payload:A.comment});break}})}catch{}return()=>S?.()},[t,h]);let G={projectId:t,user:o,userHash:n,apiUrl:a,version:s,ai:i,mode:d,active:l,starterChips:m,screenshots:c},p=M&&I&&h&&R,T={isCommentMode:u.isCommentMode,comments:u.comments,adapter:X.current,config:G,dispatch:f,portalRoot:M,mode:O,remoteConfigLoaded:I,detachedDomPaths:y,setDetachedDomPaths:w};return ea(Ue.Provider,{value:T,children:[e,p&&Tt(je,{}),p&&Tt(ct,{}),p&&Tt(Rt,{})]})}import{useState as oa}from"react";function Ne(e){return e.mode==="review"}function ta(e){return e.mode==="support"}import{jsx as N,jsxs as fe}from"react/jsx-runtime";var ra={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"},na={display:"flex",alignItems:"flex-start",gap:6,padding:"6px 8px",cursor:"pointer",userSelect:"none",color:"var(--fl-text-secondary)",lineHeight:1.4},aa={flexShrink:0,fontSize:10,lineHeight:"16.8px",color:"var(--fl-text-tertiary)"},sa={minWidth:0,wordBreak:"break-word"},ia={padding:"0 8px 8px",display:"flex",flexDirection:"column",gap:6},la={fontSize:11,fontWeight:600,color:"var(--fl-text-tertiary)",textTransform:"uppercase",letterSpacing:.5,marginBottom:2,fontFamily:"var(--fl-font-family)"},Oe={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)"},ca={...Oe,backgroundColor:"#D32F2F",color:"#FFFFFF"},ma={...Oe,backgroundColor:"#F9A825",color:"#1A1A18"},At={fontSize:12,lineHeight:1.5,color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)"},da={fontSize:12,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",fontStyle:"italic",animation:"fl-analyzing-pulse 1.5s ease-in-out infinite"},ua={display:"flex",gap:6,flexWrap:"wrap",marginBottom:4},fa="@keyframes fl-analyzing-pulse{0%,100%{opacity:0.4}50%{opacity:1}}";function pa(e){return e?Ne(e)?e.category:`${e.intent.replace("_"," ")} \xB7 ${e.urgency} urgency`:"Analyzing..."}function ha(e){return e==="high"?ca:e==="medium"?ma:Oe}function ya({elementMetadata:e,aiContext:t,aiEnabled:o=!0}){let[n,r]=oa(!1);if(!e||!o||t&&!("mode"in t))return null;let a=pa(t),s=!t;return fe("div",{style:ra,children:[s&&N("style",{children:fa}),fe("div",{style:na,onClick:()=>r(i=>!i),role:"button",tabIndex:0,onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),r(d=>!d))},children:[N("span",{style:aa,children:n?"\u25BE":"\u25B8"}),N("span",{style:sa,children:n?"AI Interpretation":a})]}),n&&N("div",{style:ia,children:s?fe("div",{children:[N("div",{style:la,children:"AI Interpretation"}),N("div",{style:da,children:"Analyzing..."})]}):t&&Ne(t)?N("div",{children:t.interpretation?N("div",{style:At,children:t.interpretation}):N("div",{style:At,children:t.category})}):t?fe("div",{children:[fe("div",{style:ua,children:[N("span",{style:Oe,children:t.intent.replace("_"," ")}),fe("span",{style:ha(t.urgency),children:[t.urgency," urgency"]})]}),N("div",{style:At,children:t.summary})]}):null})]})}export{ya as AIContextCard,Ke as ArchivedThreadsPanel,ut as CommentActions,it as CommentAnchor,Et as CommentDot,Rt as CommentDots,Me as CommentItem,ct as CommentLayer,bt as CommentThread,Ye as DetachedCommentsPanel,nt as ElementHighlighter,Qn as LayProvider,je as LayToggle,ht as ReplyInput,Ae as captureElementMetadata,jt as computeContrastRatio,Ge as createHostedAdapter,He as createMemoryAdapter,Qe as findByFingerprint,$ as formatRelativeTime,ce as generateDomPath,Je as generateFingerprint,Z as getGuestAuthor,Ne as isAIContextReview,ta as isAIContextSupport,me as isCommentable,Kt as isGeneratedClassName,Jt as parseUserAgent,ve as persistGuestName,W as resolveAuthor,qt as resolveEffectiveBackground,xt as resolveElement,at as saveGuestAuthor,Xt as scoreFingerprintMatch,Ve as summarizeDomPath,We as useCommentMode,F as useComments,rt as useElementSelector,x as useLayContext};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|