@uselay/sdk 0.1.0 → 1.0.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.d.mts CHANGED
@@ -115,6 +115,8 @@ interface LayAdapter {
115
115
 
116
116
  /** Project mode: review (team feedback) or support (end-user help) */
117
117
  type ProjectMode = 'review' | 'support';
118
+ /** SDK connection status after attempting to validate the projectId */
119
+ type ProjectStatus = 'loading' | 'valid' | 'not_found' | 'inactive';
118
120
  /** Starter chip for the Two-Speed Composer */
119
121
  interface StarterChip {
120
122
  /** Display label on the chip */
@@ -175,14 +177,19 @@ interface LayContextValue {
175
177
  dispatch: React.Dispatch<LayAction>;
176
178
  portalRoot: HTMLDivElement | null;
177
179
  mode: ProjectMode;
180
+ projectStatus: ProjectStatus;
178
181
  remoteConfigLoaded: boolean;
179
182
  detachedDomPaths: Set<string>;
180
183
  setDetachedDomPaths: React.Dispatch<React.SetStateAction<Set<string>>>;
184
+ /** Ref-stable callback for when the current user submits a comment. */
185
+ onCommentAddedRef: React.RefObject<((comment: Comment) => void) | undefined>;
181
186
  }
182
187
  interface LayProviderProps extends LayConfig {
183
188
  children: ReactNode;
189
+ /** Callback invoked when the current user successfully submits a comment. */
190
+ onCommentAdded?: (comment: Comment) => void;
184
191
  }
185
- declare function LayProvider({ children, projectId, user, userHash, adapter: customAdapter, apiUrl, version, ai, mode: modeProp, active: activeProp, starterChips, screenshots, }: LayProviderProps): react_jsx_runtime.JSX.Element;
192
+ declare function LayProvider({ children, projectId, user, userHash, adapter: customAdapter, apiUrl, version, ai, mode: modeProp, active: activeProp, starterChips, screenshots, onCommentAdded, }: LayProviderProps): react_jsx_runtime.JSX.Element;
186
193
 
187
194
  declare function LayToggle(): React.ReactPortal | null;
188
195
 
@@ -490,4 +497,4 @@ interface HostedAdapterOptions {
490
497
  }
491
498
  declare function createHostedAdapter(options?: string | HostedAdapterOptions): LayAdapter;
492
499
 
493
- export { type AIContext, AIContextCard, type AIContextReview, type AIContextSupport, type AdapterOptions, ArchivedThreadsPanel, type Author, type Comment, CommentActions, CommentAnchor, CommentDot, CommentDots, type CommentEvent, type CommentEventType, type CommentGroup, CommentItem, CommentLayer, type CommentStatus, CommentThread, type CommentUpdate, DetachedCommentsPanel, type ElementBounds, type ElementFingerprint, ElementHighlighter, type ElementMetadata, type LayAdapter, type LayConfig, type LayContextValue, LayProvider, LayToggle, type NewComment, type ProjectMode, type RemoteConfig, ReplyInput, type ResolveMethod, type ResolveResult, type StarterChip, type ThreadGroup, type ThreadItem, type Unsubscribe, 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 };
500
+ export { type AIContext, AIContextCard, type AIContextReview, type AIContextSupport, type AdapterOptions, ArchivedThreadsPanel, type Author, type Comment, CommentActions, CommentAnchor, CommentDot, CommentDots, type CommentEvent, type CommentEventType, type CommentGroup, CommentItem, CommentLayer, type CommentStatus, CommentThread, type CommentUpdate, DetachedCommentsPanel, type ElementBounds, type ElementFingerprint, ElementHighlighter, type ElementMetadata, type LayAdapter, type LayConfig, type LayContextValue, LayProvider, LayToggle, type NewComment, type ProjectMode, type ProjectStatus, type RemoteConfig, ReplyInput, type ResolveMethod, type ResolveResult, type StarterChip, type ThreadGroup, type ThreadItem, type Unsubscribe, 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 };
package/dist/index.d.ts CHANGED
@@ -115,6 +115,8 @@ interface LayAdapter {
115
115
 
116
116
  /** Project mode: review (team feedback) or support (end-user help) */
117
117
  type ProjectMode = 'review' | 'support';
118
+ /** SDK connection status after attempting to validate the projectId */
119
+ type ProjectStatus = 'loading' | 'valid' | 'not_found' | 'inactive';
118
120
  /** Starter chip for the Two-Speed Composer */
119
121
  interface StarterChip {
120
122
  /** Display label on the chip */
@@ -175,14 +177,19 @@ interface LayContextValue {
175
177
  dispatch: React.Dispatch<LayAction>;
176
178
  portalRoot: HTMLDivElement | null;
177
179
  mode: ProjectMode;
180
+ projectStatus: ProjectStatus;
178
181
  remoteConfigLoaded: boolean;
179
182
  detachedDomPaths: Set<string>;
180
183
  setDetachedDomPaths: React.Dispatch<React.SetStateAction<Set<string>>>;
184
+ /** Ref-stable callback for when the current user submits a comment. */
185
+ onCommentAddedRef: React.RefObject<((comment: Comment) => void) | undefined>;
181
186
  }
182
187
  interface LayProviderProps extends LayConfig {
183
188
  children: ReactNode;
189
+ /** Callback invoked when the current user successfully submits a comment. */
190
+ onCommentAdded?: (comment: Comment) => void;
184
191
  }
185
- declare function LayProvider({ children, projectId, user, userHash, adapter: customAdapter, apiUrl, version, ai, mode: modeProp, active: activeProp, starterChips, screenshots, }: LayProviderProps): react_jsx_runtime.JSX.Element;
192
+ declare function LayProvider({ children, projectId, user, userHash, adapter: customAdapter, apiUrl, version, ai, mode: modeProp, active: activeProp, starterChips, screenshots, onCommentAdded, }: LayProviderProps): react_jsx_runtime.JSX.Element;
186
193
 
187
194
  declare function LayToggle(): React.ReactPortal | null;
188
195
 
@@ -490,4 +497,4 @@ interface HostedAdapterOptions {
490
497
  }
491
498
  declare function createHostedAdapter(options?: string | HostedAdapterOptions): LayAdapter;
492
499
 
493
- export { type AIContext, AIContextCard, type AIContextReview, type AIContextSupport, type AdapterOptions, ArchivedThreadsPanel, type Author, type Comment, CommentActions, CommentAnchor, CommentDot, CommentDots, type CommentEvent, type CommentEventType, type CommentGroup, CommentItem, CommentLayer, type CommentStatus, CommentThread, type CommentUpdate, DetachedCommentsPanel, type ElementBounds, type ElementFingerprint, ElementHighlighter, type ElementMetadata, type LayAdapter, type LayConfig, type LayContextValue, LayProvider, LayToggle, type NewComment, type ProjectMode, type RemoteConfig, ReplyInput, type ResolveMethod, type ResolveResult, type StarterChip, type ThreadGroup, type ThreadItem, type Unsubscribe, 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 };
500
+ export { type AIContext, AIContextCard, type AIContextReview, type AIContextSupport, type AdapterOptions, ArchivedThreadsPanel, type Author, type Comment, CommentActions, CommentAnchor, CommentDot, CommentDots, type CommentEvent, type CommentEventType, type CommentGroup, CommentItem, CommentLayer, type CommentStatus, CommentThread, type CommentUpdate, DetachedCommentsPanel, type ElementBounds, type ElementFingerprint, ElementHighlighter, type ElementMetadata, type LayAdapter, type LayConfig, type LayContextValue, LayProvider, LayToggle, type NewComment, type ProjectMode, type ProjectStatus, type RemoteConfig, ReplyInput, type ResolveMethod, type ResolveResult, type StarterChip, type ThreadGroup, type ThreadItem, type Unsubscribe, 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 };
package/dist/index.js CHANGED
@@ -1,2 +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});
1
+ "use strict";var Ho=Object.create;var Ge=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var zo=Object.getOwnPropertyNames;var Go=Object.getPrototypeOf,Bo=Object.prototype.hasOwnProperty;var Wo=(e,t)=>{for(var o in t)Ge(e,o,{get:t[o],enumerable:!0})},It=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of zo(t))!Bo.call(e,r)&&r!==o&&Ge(e,r,{get:()=>t[r],enumerable:!(n=Fo(t,r))||n.enumerable});return e};var Lt=(e,t,o)=>(o=e!=null?Ho(Go(e)):{},It(t||!e||!e.__esModule?Ge(o,"default",{value:e,enumerable:!0}):o,e)),$o=e=>It(Ge({},"__esModule",{value:!0}),e);var Xn={};Wo(Xn,{AIContextCard:()=>Oo,ArchivedThreadsPanel:()=>Ke,CommentActions:()=>rt,CommentAnchor:()=>et,CommentDot:()=>st,CommentDots:()=>lt,CommentItem:()=>He,CommentLayer:()=>tt,CommentThread:()=>at,DetachedCommentsPanel:()=>Ve,ElementHighlighter:()=>Je,LayProvider:()=>ko,LayToggle:()=>Ye,ReplyInput:()=>nt,captureElementMetadata:()=>Oe,computeContrastRatio:()=>Rt,createHostedAdapter:()=>We,createMemoryAdapter:()=>Be,findByFingerprint:()=>Ze,formatRelativeTime:()=>ce,generateDomPath:()=>Ee,generateFingerprint:()=>je,getGuestAuthor:()=>ye,isAIContextReview:()=>ze,isAIContextSupport:()=>Do,isCommentable:()=>xe,isGeneratedClassName:()=>bt,parseUserAgent:()=>wt,persistGuestName:()=>Pe,resolveAuthor:()=>me,resolveEffectiveBackground:()=>xt,resolveElement:()=>it,saveGuestAuthor:()=>Qe,scoreFingerprintMatch:()=>St,summarizeDomPath:()=>Xe,useCommentMode:()=>Ue,useComments:()=>ae,useElementSelector:()=>qe,useLayContext:()=>E});module.exports=$o(Xn);var T=require("react");function Uo(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Be(){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(c=>c.project_id===n&&c.url_path===r);return a?.sessionToken&&(s=s.filter(c=>c.author.id===a.sessionToken)),s},async addComment(n){let r=new Date().toISOString(),a={...n,id:Uo(),created_at:r,updated_at:r};return e.push(a),o({type:"INSERT",comment:a}),a},async updateComment(n,r){let a=e.findIndex(c=>c.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 Ko="https://uselay.com",Xo="Lay:";function dt(e){console.warn(`${Xo} ${e}`)}var Le=class extends Error{constructor(t,o){super(t),this.name="ApiError",this.status=o}};function We(e){let t=typeof e=="string"?{apiUrl:e}:e??{},o=(t.apiUrl??Ko).replace(/\/$/,""),n=t.ai!==!1;function r(s){return s?{Authorization:`Bearer ${s}`}:{}}async function a(s,c,m){let i;try{i=await fetch(`${o}${s}`,{...c,headers:{"Content-Type":"application/json",...r(m),...c?.headers??{}}})}catch{throw dt("Unable to reach API. Comments won't persist."),new Error("Network error")}if(!i.ok){let l=(await i.json().catch(()=>({}))).error??`API error: ${i.status}`;throw i.status===403?dt("This domain is not authorized for this project."):i.status===404&&dt("Invalid project ID. Comments won't persist."),new Le(l,i.status)}return i.json()}return{async getConfig(s){let c=new URLSearchParams({projectId:s});return a(`/api/v1/config?${c.toString()}`)},async getComments(s,c,m){let i=new URLSearchParams({projectId:s,urlPath:c});return a(`/api/v1/comments?${i.toString()}`,void 0,m?.sessionToken)},async addComment(s,c){return a("/api/v1/comments",{method:"POST",body:JSON.stringify(s),...n?{}:{headers:{"X-FL-AI":"false"}}},c?.sessionToken)},async updateComment(s,c,m){return a(`/api/v1/comments/${s}`,{method:"PATCH",body:JSON.stringify(c)},m?.sessionToken)},async uploadScreenshot(s,c,m,i,d){let l=new FormData;l.append("file",m,`${c}.webp`),l.append("projectId",s),l.append("commentId",c),l.append("elementBounds",JSON.stringify(i));let u={};d?.sessionToken&&(u.Authorization=`Bearer ${d.sessionToken}`);let f;try{f=await fetch(`${o}/api/v1/screenshots`,{method:"POST",headers:u,body:l})}catch{return}f.ok},subscribe(s,c,m){let i=new URLSearchParams({projectId:s});m?.sessionToken&&i.set("token",m.sessionToken);let d=`${o}/api/v1/stream?${i.toString()}`,l=new EventSource(d);return l.onmessage=u=>{try{let f=JSON.parse(u.data);(f.type==="INSERT"||f.type==="UPDATE")&&c(f)}catch{}},l.onerror=()=>{},()=>{l.close()}}}}var L={BASE:1e5,HIGHLIGHT:100001,DOT:100002,POPOVER:100003,TOGGLE:100004};var q={PARTICLE_COUNT:5,PARTICLE_SIZE_MIN:3,PARTICLE_SIZE_MAX:4,DURATION:450,SPREAD_ANGLE:120,DISTANCE_MIN:14,DISTANCE_MAX:28},H={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},kt={TOGGLE_COMMENT_MODE:"c"},ne={ROOT:"data-fl-root",IGNORE:"data-fl-ignore"},mt={ANCESTOR_DEPTH:4,PROXIMITY_THRESHOLD:30},Dt={MAX_SEGMENTS:3,MAX_LENGTH:50},Ae={WIDTH:320,COLLAPSED_HEIGHT:40,GAP:8,EXPAND_DURATION:150},Nt=[{label:"Visual bug",value:"Visual bug"},{label:"Copy issue",value:"Copy issue"},{label:"Love this",value:"Love this"}],$e={HOVER_DELAY:300,MAX_CONTENT_LENGTH:60},ut={WIDTH:280,Z_INDEX:100005},Ot="https://uselay.com/dashboard";function Ht(){if(typeof window>"u")return!1;let e=window.location.hostname;return e==="localhost"||e==="127.0.0.1"}var Ft={id:null,name:"Anonymous",avatar:null};var ft="lay_session_";function zt(e){try{return localStorage.getItem(`${ft}${e}`)}catch{return null}}function Gt(e,t){try{localStorage.setItem(`${ft}${e}`,t)}catch{}}function Bt(e){try{localStorage.removeItem(`${ft}${e}`)}catch{}}var K=require("react"),Jt=require("react-dom");var ke=require("react");var Wt=require("react");function E(){let e=(0,Wt.useContext)(pt);if(!e)throw new Error("useLayContext must be used within a <LayProvider />. Wrap your app in <LayProvider> to use uselay.");return e}function Ue(){let{isCommentMode:e,projectStatus:t,dispatch:o}=E(),n=(0,ke.useCallback)(()=>{t!=="not_found"&&o({type:"TOGGLE_COMMENT_MODE"})},[o,t]),r=(0,ke.useCallback)(a=>{o({type:"SET_COMMENT_MODE",payload:a})},[o]);return(0,ke.useEffect)(()=>{function a(s){let c=s.target;c.tagName==="INPUT"||c.tagName==="TEXTAREA"||c.tagName==="SELECT"||c.isContentEditable||s.key.toLowerCase()===kt.TOGGLE_COMMENT_MODE&&!s.metaKey&&!s.ctrlKey&&!s.altKey&&(s.preventDefault(),n())}return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[n]),{isCommentMode:e,toggleCommentMode:n,setCommentMode:r}}var Ce=require("react");function ae(){let{comments:e,detachedDomPaths:t}=E(),o=(0,Ce.useMemo)(()=>{let d=new Map;for(let l of e){let u=d.get(l.dom_path);u?u.push(l):d.set(l.dom_path,[l])}return Array.from(d,([l,u])=>({domPath:l,comments:u}))},[e]),n=(0,Ce.useMemo)(()=>{let d=new Map;for(let l of e){let u=d.get(l.dom_path);u?u.push(l):d.set(l.dom_path,[l])}return Array.from(d,([l,u])=>{let f=[],v=new Map;for(let S of u)if(S.thread_id===null)f.push(S);else{let y=v.get(S.thread_id);y?y.push(S):v.set(S.thread_id,[S])}f.sort((S,y)=>new Date(S.created_at).getTime()-new Date(y.created_at).getTime());let A=f.map(S=>{let y=v.get(S.id)??[];return y.sort((N,B)=>new Date(N.created_at).getTime()-new Date(B.created_at).getTime()),{root:S,replies:y}});return{domPath:l,threads:A,allComments:u}})},[e]),r=(0,Ce.useMemo)(()=>e.filter(l=>l.thread_id===null&&l.status==="archived").map(l=>{let u=e.filter(f=>f.thread_id===l.id).sort((f,v)=>new Date(f.created_at).getTime()-new Date(v.created_at).getTime());return{root:l,replies:u}}),[e]),a=r.length,s=(0,Ce.useMemo)(()=>t.size===0?[]:e.filter(l=>l.thread_id===null&&t.has(l.dom_path)&&l.status!=="archived").map(l=>{let u=e.filter(f=>f.thread_id===l.id).sort((f,v)=>new Date(f.created_at).getTime()-new Date(v.created_at).getTime());return{root:l,replies:u}}),[e,t]),c=s.length,m=(0,Ce.useMemo)(()=>{let d=new Map;for(let l of e)l.thread_id!==null||d.get(l.dom_path)===!1||d.set(l.dom_path,l.status==="resolved"||l.status==="archived");return l=>d.get(l)??!1},[e]),i=(0,Ce.useMemo)(()=>{let d=new Map;for(let l of e)l.thread_id!==null||d.get(l.dom_path)===!1||d.set(l.dom_path,l.status==="archived");return l=>d.get(l)??!1},[e]);return{comments:e,groupedByDomPath:o,threadsByDomPath:n,archivedThreads:r,archivedCount:a,detachedThreads:s,detachedCount:c,isDomPathFullyResolved:m,isDomPathFullyArchived:i}}var le=require("react"),$t=require("react-dom");var J=require("react/jsx-runtime"),Vo={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:L.POPOVER},Yo={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},jo={overflowY:"auto",flexGrow:1,minHeight:0},Zo={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",borderBottom:"1px solid var(--fl-border)",fontFamily:"var(--fl-font-family)"},Jo={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"},Qo={display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:4},er={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Ut={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"},tr={...Ut,color:"var(--fl-accent)"};function or({thread:e,onRestore:t}){let[o,n]=(0,le.useState)(!1);return(0,J.jsxs)("div",{style:qo,children:[(0,J.jsxs)("div",{style:Jo,children:["\u201C",e.root.content,"\u201D"]}),(0,J.jsxs)("div",{style:Qo,children:[(0,J.jsx)("span",{style:er,children:e.root.author.name}),(0,J.jsx)("button",{type:"button",style:o?tr:Ut,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}=E(),{archivedThreads:a}=ae(),s=(0,le.useRef)(null),c=(0,le.useCallback)(m=>{let i={...m,status:"open",resolved_by:null,resolved_at:null,archived_at:null};r({type:"UPDATE_COMMENT",payload:i}),o.updateComment(m.id,{status:"open",resolved_by:null,resolved_at:null,archived_at:null}).catch(()=>{r({type:"UPDATE_COMMENT",payload:m})})},[o,r]);return(0,le.useEffect)(()=>{function m(i){i.key==="Escape"&&(i.preventDefault(),e())}return document.addEventListener("keydown",m,!0),()=>document.removeEventListener("keydown",m,!0)},[e]),(0,le.useEffect)(()=>{function m(d){let l=d.target;s.current?.contains(l)||l.closest("[data-fl-ignore]")||e()}let i=setTimeout(()=>{document.addEventListener("mousedown",m,!0)},50);return()=>{clearTimeout(i),document.removeEventListener("mousedown",m,!0)}},[e]),t?(0,$t.createPortal)((0,J.jsxs)("div",{ref:s,style:Vo,"data-fl-ignore":"",children:[(0,J.jsx)("div",{style:Yo,children:"Archived Threads"}),(0,J.jsx)("div",{style:jo,children:a.length===0?(0,J.jsx)("div",{style:Zo,children:"No archived threads on this page."}):a.map(m=>(0,J.jsx)(or,{thread:m,onRestore:c},m.root.id))})]}),t):null}var De=require("react"),Yt=require("react-dom");function ce(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),c=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(c===1)return"Yesterday";let m=t.toLocaleString("en-US",{month:"short"}),i=t.getDate();return t.getFullYear()===o.getFullYear()?`${m} ${i}`:`${m} ${i}, ${t.getFullYear()}`}var Kt={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 rr(e){let t=e.tagName.toLowerCase();if(e.id)return`#${e.id}`;let o=e.getAttribute("aria-label");if(o)return`"${ht(o,20)}"`;if(["button","a","h1","h2","h3","h4","h5","h6"].includes(t)){let r=e.textContent?.trim();if(r&&r.length<=25)return`"${ht(r,20)}" ${Kt[t]??t}`}let n=e.getAttribute("data-testid")??e.getAttribute("data-feedback-id");return n||(Kt[t]??t)}function Vt(e){let t=[],o=e;for(;o&&o!==document.body&&(t.unshift(rr(o)),!o.id);)o=o.parentElement;return e.closest("[id]")||t.unshift("page"),t.slice(-Dt.MAX_SEGMENTS)}function Xe(e){let t=e.split(/\s*>\s*/);if(t.length===0)return e;let o=Xt(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=Xt(s);break}let c=s.split(/[.:[\s]/)[0];if(["main","nav","header","footer","section","article","aside","form"].includes(c)){n=c;break}}let r=n?`${o} in ${n}`:o;return ht(r,30)}function Xt(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 ht(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}var U=require("react/jsx-runtime"),nr={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:L.POPOVER},ar={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},sr={padding:"6px 12px 8px",fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",lineHeight:1.4},ir={overflowY:"auto",flexGrow:1,minHeight:0},lr={padding:"20px 12px",textAlign:"center",fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},cr={padding:"10px 12px",borderBottomWidth:1,borderBottomStyle:"solid",borderBottomColor:"var(--fl-border)",fontFamily:"var(--fl-font-family)"},dr={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"},mr={display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:4},ur={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},fr={fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},pr={marginTop:4,fontSize:11,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",fontStyle:"italic"};function hr({thread:e}){let t=Xe(e.root.dom_path);return(0,U.jsxs)("div",{style:cr,children:[(0,U.jsxs)("div",{style:dr,children:["\u201C",e.root.content,"\u201D"]}),(0,U.jsxs)("div",{style:mr,children:[(0,U.jsx)("span",{style:ur,children:e.root.author.name}),(0,U.jsx)("span",{style:fr,children:ce(e.root.created_at)})]}),(0,U.jsxs)("div",{style:pr,children:["Was on: ",t]})]})}function Ve({onClose:e}){let{portalRoot:t}=E(),{detachedThreads:o}=ae(),n=(0,De.useRef)(null);return(0,De.useEffect)(()=>{function r(a){a.key==="Escape"&&(a.preventDefault(),e())}return document.addEventListener("keydown",r,!0),()=>document.removeEventListener("keydown",r,!0)},[e]),(0,De.useEffect)(()=>{function r(s){let c=s.target;n.current?.contains(c)||c.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,Yt.createPortal)((0,U.jsxs)("div",{ref:n,style:nr,"data-fl-ignore":"",children:[(0,U.jsx)("div",{style:ar,children:"Detached Comments"}),(0,U.jsx)("div",{style:sr,children:"These comments can't find their original element."}),(0,U.jsx)("div",{style:ir,children:o.length===0?(0,U.jsx)("div",{style:lr,children:"No detached comments on this page."}):o.map(r=>(0,U.jsx)(hr,{thread:r},r.root.id))})]}),t):null}var Ne=require("react");var F=require("react/jsx-runtime"),yr={heading:"Lay is installed.",body:"Create a free project to start collecting feedback on your site.",cta:"Get started"},gr={heading:"Project not found.",body:"Check your project ID, or create a new project from the dashboard.",cta:"Open dashboard"},vr={position:"fixed",inset:0,zIndex:L.TOGGLE-1},br={position:"fixed",right:60,top:"50%",transform:"translateY(-50%)",width:ut.WIDTH,zIndex:ut.Z_INDEX,backgroundColor:"var(--fl-surface-raised)",borderWidth:1,borderStyle:"solid",borderColor:"var(--fl-border)",borderRadius:"var(--fl-border-radius)",boxShadow:"var(--fl-shadow-popover)",padding:"20px 18px 16px",fontFamily:"var(--fl-font-family)",opacity:0,animation:"fl-welcome-fade-in var(--fl-duration-normal) ease-out forwards"},Sr={position:"absolute",top:10,right:10,width:20,height:20,display:"flex",alignItems:"center",justifyContent:"center",background:"none",border:"none",cursor:"pointer",color:"var(--fl-text-tertiary)",padding:0,borderRadius:4,transition:"color var(--fl-duration-fast) ease-out"},Cr={fontSize:"var(--fl-font-size-base)",fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-text-primary)",margin:"0 0 6px",lineHeight:"var(--fl-line-height)",paddingRight:16},Er={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-secondary)",lineHeight:1.5,margin:"0 0 16px"},xr={display:"inline-flex",alignItems:"center",gap:4,fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",fontFamily:"var(--fl-font-family)",color:"var(--fl-accent)",background:"none",border:"none",cursor:"pointer",padding:0,transition:"opacity var(--fl-duration-fast) ease-out",textDecoration:"none"},Rr="@keyframes fl-welcome-fade-in{0%{opacity:0;transform:translateY(-50%) translateX(6px)}100%{opacity:1;transform:translateY(-50%) translateX(0)}}";function jt({hasProjectId:e,onDismiss:t}){let o=(0,Ne.useRef)(null),n=e?gr:yr;return(0,Ne.useEffect)(()=>{function r(a){o.current&&!o.current.contains(a.target)&&t()}return document.addEventListener("pointerdown",r,!0),()=>document.removeEventListener("pointerdown",r,!0)},[t]),(0,Ne.useEffect)(()=>{function r(a){a.key==="Escape"&&t()}return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[t]),(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)("style",{dangerouslySetInnerHTML:{__html:Rr}}),(0,F.jsx)("div",{style:vr,[ne.IGNORE]:""}),(0,F.jsxs)("div",{ref:o,role:"dialog","aria-label":n.heading,style:br,[ne.IGNORE]:"",children:[(0,F.jsx)("button",{type:"button",style:Sr,onClick:t,"aria-label":"Dismiss",onMouseEnter:r=>{r.currentTarget.style.color="var(--fl-text-primary)"},onMouseLeave:r=>{r.currentTarget.style.color="var(--fl-text-tertiary)"},children:(0,F.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:(0,F.jsx)("path",{d:"M2 2l8 8M10 2l-8 8"})})}),(0,F.jsx)("p",{style:Cr,children:n.heading}),(0,F.jsx)("p",{style:Er,children:n.body}),(0,F.jsxs)("a",{href:Ot,target:"_blank",rel:"noopener noreferrer",style:xr,onMouseEnter:r=>{r.currentTarget.style.opacity="0.8"},onMouseLeave:r=>{r.currentTarget.style.opacity="1"},children:[n.cta,(0,F.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,F.jsx)("path",{d:"M5 12h14M12 5l7 7-7 7"})})]})]})]})}var D=require("react/jsx-runtime"),vt={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:L.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)"},wr={...vt,transform:"translateY(-50%) translateX(-4px)",borderColor:"var(--fl-border-strong)",color:"var(--fl-text-primary)",boxShadow:"var(--fl-shadow-lg)"},yt={...vt,backgroundColor:"var(--fl-accent)",borderColor:"var(--fl-accent)",color:"#FFFFFF",boxShadow:"var(--fl-shadow-lg)",animation:"none"},Zt={...yt,transform:"translateY(-50%) translateX(-4px)"},Qt={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"},Tr={...Qt,opacity:1},gt={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"},qt={...gt,color:"var(--fl-text-primary)",borderColor:"var(--fl-border-strong)"};function Ar({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 Ye(){let{isCommentMode:e,toggleCommentMode:t}=Ue(),{portalRoot:o,mode:n,projectStatus:r,config:a}=E(),{archivedCount:s,detachedCount:c}=ae(),m=r==="not_found",i=n!=="support"&&!m,[d,l]=(0,K.useState)(!1),[u,f]=(0,K.useState)(!1),[v,A]=(0,K.useState)(!1),[S,y]=(0,K.useState)(!1),[N,B]=(0,K.useState)(!1),[h,x]=(0,K.useState)(!1),_=(0,K.useCallback)(M=>{M.stopPropagation(),y(O=>!O),B(!1)},[]),b=(0,K.useCallback)(M=>{M.stopPropagation(),B(O=>!O),y(!1)},[]),W=(0,K.useCallback)(()=>{y(!1)},[]),$=(0,K.useCallback)(()=>{B(!1)},[]),j=(0,K.useCallback)(()=>{m?x(M=>!M):t()},[m,t]),ie=(0,K.useCallback)(()=>{x(!1)},[]);if(!o)return null;let ee;return m&&h||e?ee=d?Zt:yt:ee=d?wr:vt,(0,Jt.createPortal)((0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)("button",{type:"button",onClick:j,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),style:ee,"aria-label":m?"Set up Lay":e?"Exit comment mode":"Enter comment mode",[ne.IGNORE]:"",children:[(0,D.jsx)(Ar,{active:e||m&&h}),(0,D.jsx)("span",{style:d?Tr:Qt,children:m?"Set up Lay":"Comment mode (C)"}),i&&s>0&&(0,D.jsxs)("span",{role:"button",tabIndex:0,style:u?qt:gt,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),onClick:_,onKeyDown:M=>{(M.key==="Enter"||M.key===" ")&&(M.preventDefault(),_(M))},children:[s," archived"]}),i&&c>0&&(0,D.jsxs)("span",{role:"button",tabIndex:0,style:{...v?qt:gt,top:s>0?"calc(100% + 28px)":"100%"},onMouseEnter:()=>A(!0),onMouseLeave:()=>A(!1),onClick:b,onKeyDown:M=>{(M.key==="Enter"||M.key===" ")&&(M.preventDefault(),b(M))},children:[c," detached"]})]}),i&&S&&(0,D.jsx)(Ke,{onClose:W}),i&&N&&(0,D.jsx)(Ve,{onClose:$}),m&&h&&(0,D.jsx)(jt,{hasProjectId:!!a.projectId,onDismiss:ie})]}),o)}var he=require("react");function Ee(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=Pr(o);if(s.length>0){a+=`.${CSS.escape(s[0])}`;let i=o.parentElement;if(i)try{if(Array.from(i.children).filter(l=>l.matches(a)).length===1){t.unshift(a),o=o.parentElement;continue}}catch{}}if(!o)break;let c=o;a=c.tagName.toLowerCase();let m=c.parentElement;if(m){let i=Array.from(m.children);if(i.filter(l=>l.tagName===c.tagName).length>1){let l=i.indexOf(c)+1;a=`${c.tagName.toLowerCase()}:nth-child(${l})`}}t.unshift(a),o=o.parentElement}return t.join(" > ")}function Pr(e){return Array.from(e.classList).filter(o=>!bt(o))}function bt(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)||e.includes(":")||e.includes("[")||e.includes("]")||e.includes("."))}function xe(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 _r=["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 i of _r){let d=e.getAttribute(i);d!==null&&d!==""&&(n[i]=d)}let r=e.parentElement,a=0,s=1;if(r){let i=Array.from(r.children).filter(d=>d.tagName===e.tagName);s=i.length,a=i.indexOf(e)}let c=r?.tagName.toLowerCase()??"",m=r?.parentElement?.tagName.toLowerCase()??"";return{tag:t,textContent:o,attributes:n,siblingIndex:a,siblingCount:s,parentTag:c,grandparentTag:m}}function St(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 Ze(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=St(e,a);s>r&&(r=s,n=a)}return r>=t?{element:n,score:r}:{element:null,score:r}}var Mr=["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 eo(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 Et(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 oo(e){let t=window.getComputedStyle(e),o=t.getPropertyValue("background-color");if(o&&!Et(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`),c=t.getPropertyValue(`border-${a}-style`);if(s!=="0px"&&c!=="none")return!0}return!1}function xt(e){let t=e;for(;t&&t!==document.documentElement;){let o=window.getComputedStyle(t).backgroundColor;if(o&&!Et(o))return o;t=t.parentElement}if(document.documentElement){let o=window.getComputedStyle(document.documentElement).backgroundColor;if(o&&!Et(o))return o}return"rgb(255, 255, 255)"}function Ct(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function to(e){return .2126*Ct(e.r)+.7152*Ct(e.g)+.0722*Ct(e.b)}function Rt(e,t){let o=eo(e),n=eo(t);if(!o||!n)return{ratio:0,passesAA:!1};let r=to(o),a=to(n),s=Math.max(r,a),c=Math.min(r,a),m=Math.round((s+.05)/(c+.05)*100)/100;return{ratio:m,passesAA:m>=4.5}}function wt(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 Oe(e){let t=window.getComputedStyle(e),o={};for(let u of Mr)o[u]=t.getPropertyValue(u);let n=e.getAttribute("role"),r=e.getAttribute("aria-label"),a=o.color,s=xt(e);s!==o["background-color"]&&(o["effective-background-color"]=s);let{ratio:c,passesAA:m}=Rt(a,s),i={width:window.innerWidth,height:window.innerHeight},d=wt(navigator.userAgent),l;try{l=je(e)}catch{}return{computed_styles:o,accessibility:{role:n,aria_label:r,contrast_ratio:c,contrast_passes_aa:m},viewport:i,device:d,fingerprint:l}}function ro(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 Ir='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 Tt(e,t){let o=ro(t);if(o>=2||oo(t))return null;let n=null,r=o,a=t.parentElement,s=0;for(;a&&a!==document.body&&s<mt.ANCESTOR_DEPTH&&a.getAttribute("data-fl-magnet")!=="off";){let l=ro(a);l>r&&(n=a,r=l),a=a.parentElement,s++}if(n)return n;let c={x:e.clientX,y:e.clientY},m=t.parentElement;if(!m)return null;let i=m.querySelectorAll(Ir),d=null;for(let l of i){if(l===t||l.getAttribute("data-fl-magnet")==="off"||!xe(l))continue;let u=l.getBoundingClientRect(),f=Lr(c,u);f<=mt.PROXIMITY_THRESHOLD&&(!d||f<d.dist)&&(d={el:l,dist:f})}return d?.el??null}function Lr(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 qe(){let{isCommentMode:e}=E(),[t,o]=(0,he.useState)({hoveredElement:null,selectedElement:null}),n=(0,he.useRef)(t);n.current=t;let r=(0,he.useCallback)(()=>{o(a=>({...a,selectedElement:null}))},[]);return(0,he.useEffect)(()=>{if(!e){o({hoveredElement:null,selectedElement:null});return}function a(i){let d=i.target;if(!d||!xe(d)){o(u=>u.hoveredElement!==null?{...u,hoveredElement:null}:u);return}let l=Tt(i,d)??d;o(u=>u.hoveredElement!==l?{...u,hoveredElement:l}:u)}function s(i){let d=i.relatedTarget;(!d||d===document.documentElement)&&o(l=>l.hoveredElement!==null?{...l,hoveredElement:null}:l)}function c(i){let d=i.target;if(!d||!xe(d))return;i.preventDefault(),i.stopPropagation();let l=Tt(i,d)??d;o(u=>({...u,selectedElement:l,hoveredElement:null}))}document.body.addEventListener("mouseover",a,!0),document.body.addEventListener("mouseout",s,!0),document.body.addEventListener("click",c,!0);let m=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",c,!0),document.body.style.cursor=m}},[e]),{hoveredElement:t.hoveredElement,selectedElement:t.selectedElement,clearSelection:r}}var de=require("react"),no=require("react-dom");var ao=require("react/jsx-runtime"),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:L.HIGHLIGHT,boxSizing:"border-box"};function Je({hoveredElement:e,selectedElement:t}){let{isCommentMode:o,portalRoot:n}=E(),[r,a]=(0,de.useState)(null),s=(0,de.useRef)(0),c=(0,de.useCallback)(()=>{let m=t?null:e;if(!m){a(null);return}let i=m.getBoundingClientRect();a({top:i.top,left:i.left,width:i.width,height:i.height})},[e,t]);return(0,de.useEffect)(()=>{c()},[c]),(0,de.useEffect)(()=>{if(!o||!e&&!t)return;function m(){cancelAnimationFrame(s.current),s.current=requestAnimationFrame(()=>{c()})}return window.addEventListener("scroll",m,!0),window.addEventListener("resize",m),()=>{window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),cancelAnimationFrame(s.current)}},[o,e,t,c]),!o||!n||!r?null:(0,no.createPortal)((0,ao.jsx)("div",{style:{...kr,top:r.top,left:r.left,width:r.width,height:r.height},"data-fl-ignore":""}),n)}var se=require("react"),so=require("react-dom");var lo=require("react/jsx-runtime"),Dr={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:L.HIGHLIGHT,boxShadow:"0 1px 3px rgba(26,26,24,0.06)",transition:"all var(--fl-duration-instant) ease-out"};function io({hoveredElement:e,selectedElement:t}){let{isCommentMode:o,portalRoot:n}=E(),[r,a]=(0,se.useState)(null),[s,c]=(0,se.useState)(""),m=(0,se.useRef)(0),i=t?null:e,d=(0,se.useCallback)(()=>{if(!i){a(null);return}let l=i.getBoundingClientRect(),u=Vt(i);c(u.join(" \u203A "));let f=Math.max(4,l.top-28),v=Math.max(4,Math.min(l.left,window.innerWidth-328));a({top:f,left:v})},[i]);return(0,se.useEffect)(()=>{d()},[d]),(0,se.useEffect)(()=>{if(!o||!i)return;function l(){cancelAnimationFrame(m.current),m.current=requestAnimationFrame(()=>{d()})}return window.addEventListener("scroll",l,!0),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l,!0),window.removeEventListener("resize",l),cancelAnimationFrame(m.current)}},[o,i,d]),!o||!n||!r?null:(0,so.createPortal)((0,lo.jsx)("div",{style:{...Dr,top:r.top,left:r.left},"data-fl-ignore":"",children:s}),n)}var C=require("react"),po=require("react-dom");var co="fl-author";function ye(){try{let e=localStorage.getItem(co);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 Qe(e){try{let t=e.trim();if(!t)return;localStorage.setItem(co,JSON.stringify({name:t}))}catch{}}function me(e,t){if(e.user)return e.user;let o=t.trim();return o?{id:null,name:o,avatar:null}:{...Ft}}function Pe(e){let t=e.trim();t&&Qe(t)}var Nr=.65;async function mo(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:c=>!c.hasAttribute?.(ne.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",Nr)})}var Q=require("react/jsx-runtime"),ho={position:"fixed",zIndex:L.POPOVER,width:Ae.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 ${Ae.EXPAND_DURATION}ms ease-out`},Or={...ho,opacity:1,transform:"translateY(0)"},Hr={display:"flex",flexDirection:"column",gap:8,padding:12},Fr={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"},uo={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"},zr={display:"flex",alignItems:"center",justifyContent:"flex-end",gap:8},yo={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={...yo,opacity:.4,cursor:"default"},Br={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Wr={display:"flex",alignItems:"center",gap:6,padding:"6px 8px"},go={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},$r={...go,backgroundColor:"var(--fl-accent-subtle)",borderColor:"var(--fl-accent)",color:"var(--fl-accent)"},Ur={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},Re=8,fo=120;function Kr(e){let t=window.innerWidth,o=window.innerHeight,n=e.bottom+Re,r=e.left;return n+fo>o&&(n=e.top-fo-Re),r+Ae.WIDTH>t&&(r=t-Ae.WIDTH-Re),r<Re&&(r=Re),n<Re&&(n=Re),{top:n,left:r}}function et({selectedElement:e,onClearSelection:t}){let{portalRoot:o,adapter:n,config:r,dispatch:a,onCommentAddedRef:s}=E(),[c,m]=(0,C.useState)(""),[i,d]=(0,C.useState)(""),[l,u]=(0,C.useState)(null),[f,v]=(0,C.useState)(!1),[A,S]=(0,C.useState)(!1),[y,N]=(0,C.useState)(null),B=(0,C.useRef)(null),h=(0,C.useRef)(null),x=(0,C.useRef)(null),_=(0,C.useRef)(0),b=!!r.user,W=r.starterChips??Nt,$=(0,C.useCallback)(()=>{if(!e){u(null);return}let p=e.getBoundingClientRect();u(Kr(p))},[e]);(0,C.useEffect)(()=>{if(e){if(d(""),S(!1),N(null),$(),!b){let p=ye();m(p?.name??"")}requestAnimationFrame(()=>{v(!0)})}else v(!1),u(null)},[e,$,b]),(0,C.useEffect)(()=>{if(!e)return;function p(){cancelAnimationFrame(_.current),_.current=requestAnimationFrame(()=>{$()})}return window.addEventListener("scroll",p,!0),window.addEventListener("resize",p),()=>{window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),cancelAnimationFrame(_.current)}},[e,$]);let j=(0,C.useRef)(A);j.current=A,(0,C.useEffect)(()=>{if(!e)return;function p(P){P.key==="Escape"&&(P.preventDefault(),P.stopPropagation(),j.current?(S(!1),d("")):t())}return document.addEventListener("keydown",p,!0),()=>document.removeEventListener("keydown",p,!0)},[e,t]),(0,C.useEffect)(()=>{if(!e||A)return;function p(P){P.key.length===1&&!P.ctrlKey&&!P.metaKey&&(P.preventDefault(),S(!0),d(P.key),setTimeout(()=>{h.current?.focus(),h.current&&(h.current.selectionStart=h.current.value.length)},10))}return document.addEventListener("keydown",p,!0),()=>document.removeEventListener("keydown",p,!0)},[e,A]),(0,C.useEffect)(()=>{if(!e)return;function p(Z){let re=Z.target;x.current?.contains(re)||re.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[ie,ee]=(0,C.useState)(!1),M=r.screenshots!==!1,O=(0,C.useCallback)((p,P)=>{M&&mo(p).then(Z=>{Z&&n.uploadScreenshot(r.projectId,P,Z.blob,Z.bounds).catch(()=>{})})},[M,n,r.projectId]),Se=(0,C.useCallback)(async p=>{if(!e)return;let P=e,Z=Ee(P),re=window.location.pathname,Te=ye(),Ie=me(r,Te?.name??""),g=null;try{g=Oe(P)}catch{}let z={project_id:r.projectId,thread_id:null,author:Ie,content:p.value??p.label,status:"open",dom_path:Z,url_path:re,element_metadata:g,resolved_by:null,resolved_at:null,archived_at:null,ai_context:null,screenshot_url:null,element_bounds:null},pe;try{pe=await n.addComment(z),O(P,pe.id),a({type:"SET_COMMENT_MODE",payload:!1}),t()}catch{d(p.value??p.label),S(!0),setTimeout(()=>h.current?.focus(),10)}if(pe)try{s.current?.(pe)}catch{}},[e,r,n,t,O,a,s]),V=(0,C.useCallback)(async()=>{if(!i.trim()||!e)return;let p=e,P=Ee(p),Z=window.location.pathname,re=me(r,c);b||Pe(c);let Te=null;try{Te=Oe(p)}catch{console.warn("Lay: Could not capture element metadata.")}let Ie={project_id:r.projectId,thread_id:null,author:re,content:i.trim(),status:"open",dom_path:P,url_path:Z,element_metadata:Te,resolved_by:null,resolved_at:null,archived_at:null,ai_context:null,screenshot_url:null,element_bounds:null},g;try{g=await n.addComment(Ie),d(""),O(p,g.id),a({type:"SET_COMMENT_MODE",payload:!1}),t()}catch{ee(!0),setTimeout(()=>ee(!1),1200)}if(g)try{s.current?.(g)}catch{}},[i,c,e,r,n,t,b,O,a,s]),R=(0,C.useCallback)(()=>{S(!0),setTimeout(()=>h.current?.focus(),10)},[]),fe=(0,C.useCallback)(p=>{p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),V())},[V]),Me=(0,C.useCallback)(p=>{p.key==="Enter"&&(p.preventDefault(),h.current?.focus())},[]);if((0,C.useEffect)(()=>{A&&e&&!i&&setTimeout(()=>{if(!b&&!ye()?.name){B.current?.focus();return}h.current?.focus()},10)},[A,e,b,i]),!o||!e||!l)return null;let oe=i.trim();return(0,po.createPortal)((0,Q.jsx)("div",{ref:x,style:{...f?Or:ho,top:l.top,left:l.left,maxHeight:A?400:Ae.COLLAPSED_HEIGHT},"data-fl-ignore":"",children:A?(0,Q.jsxs)("div",{style:Hr,children:[b?null:(0,Q.jsx)("input",{ref:B,type:"text",value:c,onChange:p=>m(p.target.value),onKeyDown:Me,placeholder:"Your name (optional)",style:Fr}),(0,Q.jsx)("textarea",{ref:h,value:i,onChange:p=>d(p.target.value),onKeyDown:fe,placeholder:"Leave feedback...",style:ie?{...uo,borderColor:"#D32F2F"}:uo,rows:3}),(0,Q.jsxs)("div",{style:zr,children:[(0,Q.jsx)("span",{style:Br,children:"Esc \u21A9 collapse"}),(0,Q.jsx)("button",{type:"button",onClick:V,disabled:!oe,style:oe?yo:Gr,children:"Submit"})]})]}):(0,Q.jsxs)("div",{style:Wr,children:[W.map((p,P)=>(0,Q.jsx)("button",{type:"button",onClick:()=>Se(p),onMouseEnter:()=>N(P),onMouseLeave:()=>N(null),style:y===P?$r:go,children:p.label},p.label)),(0,Q.jsx)("span",{style:Ur,onClick:R,role:"button",tabIndex:0,children:"Type..."})]})}),o)}var ge=require("react/jsx-runtime");function tt(){let{hoveredElement:e,selectedElement:t,clearSelection:o}=qe();return(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(Je,{hoveredElement:e,selectedElement:t}),(0,ge.jsx)(io,{hoveredElement:e,selectedElement:t}),(0,ge.jsx)(et,{selectedElement:t,onClearSelection:o})]})}var ue=require("react");var w=require("react"),Po=require("react-dom");var I=Lt(require("react")),wo=require("react-dom");var te=require("react/jsx-runtime"),vo={padding:"10px 0",fontFamily:"var(--fl-font-family)"},Xr={...vo,marginLeft:16,paddingLeft:12,borderLeft:"2px solid var(--fl-border)"},Vr={display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:4},Yr={display:"flex",alignItems:"center",gap:6,minWidth:0},jr={fontSize:"var(--fl-font-size-sm)",fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-text-secondary)",fontFamily:"var(--fl-font-family)"},Zr={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},qr={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"},Jr={display:"flex",alignItems:"center",gap:4,marginTop:6,fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"},Qr={color:"var(--fl-accent)",fontSize:12};function He({comment:e,isReply:t=!1,actions:o}){return(0,te.jsxs)("div",{style:t?Xr:vo,children:[(0,te.jsxs)("div",{style:Vr,children:[(0,te.jsxs)("div",{style:Yr,children:[(0,te.jsx)("span",{style:jr,children:e.author.name}),(0,te.jsx)("span",{style:Zr,children:ce(e.created_at)})]}),o]}),(0,te.jsx)("div",{style:qr,children:e.content}),e.status==="resolved"&&e.resolved_by&&!t&&(0,te.jsxs)("div",{style:Jr,children:[(0,te.jsx)("span",{style:Qr,children:"\u2713"}),(0,te.jsxs)("span",{children:["Resolved by ",e.resolved_by.name,e.resolved_at?` \xB7 ${ce(e.resolved_at)}`:""]})]})]})}var ot=require("react"),we=require("react/jsx-runtime"),bo={display:"flex",alignItems:"center",gap:4},At={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"},So={...At,color:"var(--fl-accent)",backgroundColor:"var(--fl-accent-subtle)"},Co={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"},en={...Co,color:"var(--fl-text-secondary)"};function rt({comment:e,onResolve:t,onReopen:o,onArchive:n}){let[r,a]=(0,ot.useState)(!1),[s,c]=(0,ot.useState)(!1),[m,i]=(0,ot.useState)(!1);return e.status==="open"?(0,we.jsx)("div",{style:bo,children:(0,we.jsx)("button",{type:"button",title:"Resolve",style:r?So:At,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),onClick:d=>{d.stopPropagation(),t(e)},children:"\u2713"})}):e.status==="resolved"?(0,we.jsxs)("div",{style:bo,children:[(0,we.jsx)("button",{type:"button",title:"Reopen",style:s?So:At,onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),onClick:d=>{d.stopPropagation(),o(e)},children:"\u21A9"}),(0,we.jsx)("button",{type:"button",title:"Archive",style:m?en:Co,onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),onClick:d=>{d.stopPropagation(),n(e)},children:"Archive"})]}):null}var Y=require("react");var ve=require("react/jsx-runtime"),tn={display:"flex",flexDirection:"column",gap:6,padding:12},on={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"},Eo={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"},rn={display:"flex",alignItems:"center",justifyContent:"flex-end",gap:8},xo={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"},nn={...xo,opacity:.4,cursor:"default"},an={fontSize:"var(--fl-font-size-sm)",color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)"};function nt({rootComment:e,onReplySubmitted:t}){let{adapter:o,config:n}=E(),[r,a]=(0,Y.useState)(""),[s,c]=(0,Y.useState)(""),[m,i]=(0,Y.useState)(!1),d=(0,Y.useRef)(null),l=(0,Y.useRef)(null),u=!!n.user;(0,Y.useEffect)(()=>{if(!u){let y=ye();a(y?.name??"")}},[u]);let f=(0,Y.useCallback)(async()=>{if(!s.trim())return;let y=me(n,r);u||Pe(r);let N={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(N),c(""),t?.(),setTimeout(()=>{l.current?.focus()},10)}catch{i(!0),setTimeout(()=>i(!1),1200)}},[s,r,n,o,e,u,t]),v=(0,Y.useCallback)(y=>{y.key==="Enter"&&!y.shiftKey&&(y.preventDefault(),f())},[f]),A=(0,Y.useCallback)(y=>{y.key==="Enter"&&(y.preventDefault(),l.current?.focus())},[]),S=s.trim();return(0,ve.jsxs)("div",{style:tn,children:[u?null:(0,ve.jsx)("input",{ref:d,type:"text",value:r,onChange:y=>a(y.target.value),onKeyDown:A,placeholder:"Your name (optional)",style:on}),(0,ve.jsx)("textarea",{ref:l,value:s,onChange:y=>c(y.target.value),onKeyDown:v,placeholder:"Reply...",style:m?{...Eo,borderColor:"#D32F2F"}:Eo,rows:2}),(0,ve.jsxs)("div",{style:rn,children:[(0,ve.jsx)("span",{style:an,children:"Esc"}),(0,ve.jsx)("button",{type:"button",onClick:f,disabled:!S,style:S?xo:nn,children:"Reply"})]})]})}var X=require("react/jsx-runtime"),To={position:"fixed",zIndex:L.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"},sn={...To,opacity:1,transform:"translateY(0)"},ln={overflowY:"auto",padding:12,flexGrow:1,minHeight:0},Ao={height:1,backgroundColor:"var(--fl-border)",margin:"0",border:"none",flexShrink:0},cn={...Ao,backgroundColor:"var(--fl-border-strong)"},be=8,Pt=320,Ro=200;function dn(e){let t=window.innerWidth,o=window.innerHeight,n=e.bottom+be,r=e.right-Pt;return n+Ro>o&&(n=e.top-Ro-be),r<be&&(r=be),r+Pt>t-be&&(r=t-Pt-be),n<be&&(n=be),{top:n,left:r}}function mn(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 at({comments:e,dotRect:t,onClose:o,onDidResolve:n}){let{portalRoot:r,adapter:a,config:s,dispatch:c}=E(),m=(0,I.useRef)(null),i=(0,I.useRef)(null),[d,l]=I.default.useState(!1),u=dn(t),f=(0,I.useMemo)(()=>mn(e),[e]),v=f.length>0?f[0].root:null,A=(0,I.useCallback)(h=>{let x=me(s,""),_=new Date().toISOString(),b={...h,status:"resolved",resolved_by:x,resolved_at:_};c({type:"UPDATE_COMMENT",payload:b}),n?.(),o(),a.updateComment(h.id,{status:"resolved",resolved_by:x,resolved_at:_}).catch(()=>{c({type:"UPDATE_COMMENT",payload:h})})},[a,s,c,n,o]),S=(0,I.useCallback)(h=>{let x={...h,status:"open",resolved_by:null,resolved_at:null};c({type:"UPDATE_COMMENT",payload:x}),a.updateComment(h.id,{status:"open",resolved_by:null,resolved_at:null}).catch(()=>{c({type:"UPDATE_COMMENT",payload:h})})},[a,c]),y=(0,I.useCallback)(h=>{let x=new Date().toISOString(),_={...h,status:"archived",archived_at:x};c({type:"UPDATE_COMMENT",payload:_}),a.updateComment(h.id,{status:"archived",archived_at:x}).catch(()=>{c({type:"UPDATE_COMMENT",payload:h})})},[a,c]);(0,I.useEffect)(()=>{requestAnimationFrame(()=>{l(!0)})},[]),(0,I.useEffect)(()=>{d&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[d]);let N=(0,I.useRef)(e.length);(0,I.useEffect)(()=>{e.length>N.current&&i.current&&(i.current.scrollTop=i.current.scrollHeight),N.current=e.length},[e.length]);let B=(0,I.useCallback)(()=>{},[]);return(0,I.useEffect)(()=>{function h(x){x.key==="Escape"&&(x.preventDefault(),o())}return document.addEventListener("keydown",h,!0),()=>document.removeEventListener("keydown",h,!0)},[o]),(0,I.useEffect)(()=>{function h(_){let b=_.target;m.current?.contains(b)||b.closest("[data-fl-ignore]")||o()}let x=setTimeout(()=>{document.addEventListener("mousedown",h,!0)},50);return()=>{clearTimeout(x),document.removeEventListener("mousedown",h,!0)}},[o]),r?(0,wo.createPortal)((0,X.jsxs)("div",{ref:m,style:{...d?sn:To,top:u.top,left:u.left},"data-fl-ignore":"",children:[(0,X.jsx)("div",{ref:i,style:ln,children:f.map((h,x)=>(0,X.jsxs)(I.default.Fragment,{children:[x>0?(0,X.jsx)("hr",{style:Ao}):null,(0,X.jsx)(He,{comment:h.root,actions:(0,X.jsx)(rt,{comment:h.root,onResolve:A,onReopen:S,onArchive:y})}),h.replies.map(_=>(0,X.jsx)(He,{comment:_,isReply:!0},_.id))]},h.root.id))}),v?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)("hr",{style:cn}),(0,X.jsx)(nt,{rootComment:v,onReplySubmitted:B})]}):null]}),r):null}var G=require("react/jsx-runtime");function un(e){let t=[],n=q.SPREAD_ANGLE/2;for(let r=0;r<e;r++){let s=90-n+q.SPREAD_ANGLE/(e-1)*r+(Math.random()-.5)*15,c=q.DISTANCE_MIN+Math.random()*(q.DISTANCE_MAX-q.DISTANCE_MIN),m=s*Math.PI/180,i=Math.cos(m)*c,d=-Math.sin(m)*c,l=q.PARTICLE_SIZE_MIN+Math.random()*(q.PARTICLE_SIZE_MAX-q.PARTICLE_SIZE_MIN),u=["var(--fl-accent)","var(--fl-accent-hover)","#F4A261"],f=u[r%u.length];t.push({endX:i,endY:d,size:l,color:f,delay:r*20})}return t}var _t={position:"fixed",minWidth:H.MARKER_MIN_WIDTH,height:H.MARKER_HEIGHT,padding:"0 5px",borderRadius:4,border:"none",backgroundColor:"var(--fl-accent)",color:"#FFFFFF",fontSize:H.MARKER_FONT_SIZE,fontFamily:"var(--fl-font-family)",fontWeight:600,lineHeight:`${H.MARKER_HEIGHT}px`,textAlign:"center",cursor:"pointer",zIndex:L.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"},fn={..._t,transform:"scale(1.15)"},_o={..._t,backgroundColor:"var(--fl-resolved)"},pn={..._o,transform:"scale(1.15)"},Mo={position:"absolute",bottom:-H.MARKER_POINTER,left:"50%",transform:"translateX(-50%)",width:0,height:0,borderLeft:`${H.MARKER_POINTER}px solid transparent`,borderRight:`${H.MARKER_POINTER}px solid transparent`,borderTopWidth:H.MARKER_POINTER,borderTopStyle:"solid",borderTopColor:"var(--fl-accent)",pointerEvents:"none"},hn={...Mo,borderTopColor:"var(--fl-resolved)"},Io={position:"absolute",top:`calc(100% + ${H.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:L.POPOVER,boxShadow:"var(--fl-shadow)",maxWidth:260,opacity:0,transition:"opacity var(--fl-duration-fast) ease-out"},yn={...Io,opacity:1},gn={display:"flex",gap:6,alignItems:"baseline"},vn={fontWeight:"var(--fl-font-weight-medium)",color:"var(--fl-surface)"},bn={color:"rgba(255, 255, 255, 0.55)"},Sn={color:"rgba(255, 255, 255, 0.8)",whiteSpace:"normal",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:1,WebkitBoxOrient:"vertical"};function Cn(e){return e.length<=$e.MAX_CONTENT_LENGTH?e:e.slice(0,$e.MAX_CONTENT_LENGTH).trimEnd()+"\u2026"}function En(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-H.MARKER_HEIGHT-H.MARKER_POINTER,a=t.right-H.MARKER_MIN_WIDTH/2;return{top:r,left:a,visible:!0}}var st=(0,w.memo)(function({domPath:t,comments:o,isResolved:n=!1,isNew:r=!1,resolvedElement:a}){let{portalRoot:s}=E(),[c,m]=(0,w.useState)(null),[i,d]=(0,w.useState)(!1),[l,u]=(0,w.useState)(!1),[f,v]=(0,w.useState)(!1),[A,S]=(0,w.useState)(r),[y,N]=(0,w.useState)(!1),[B,h]=(0,w.useState)([]),x=(0,w.useRef)(null),_=(0,w.useRef)(0),b=(0,w.useRef)(null),W=(0,w.useCallback)(()=>{let R=a??document.querySelector(t);if(!R){m(null);return}m(En(R))},[t,a]);(0,w.useEffect)(()=>{W()},[W]),(0,w.useEffect)(()=>{function R(){cancelAnimationFrame(_.current),_.current=requestAnimationFrame(()=>{W()})}return window.addEventListener("scroll",R,!0),window.addEventListener("resize",R),()=>{window.removeEventListener("scroll",R,!0),window.removeEventListener("resize",R),cancelAnimationFrame(_.current)}},[W]),(0,w.useEffect)(()=>{if(!A)return;let R=setTimeout(()=>S(!1),q.DURATION);return()=>clearTimeout(R)},[A]);let $=(0,w.useCallback)(()=>{h(un(q.PARTICLE_COUNT)),N(!0);let R=setTimeout(()=>{N(!1),h([])},q.DURATION+100);return()=>clearTimeout(R)},[]),j=(0,w.useCallback)(()=>{d(!0),b.current=setTimeout(()=>{u(!0)},$e.HOVER_DELAY)},[]),ie=(0,w.useCallback)(()=>{d(!1),b.current&&(clearTimeout(b.current),b.current=null),u(!1)},[]);(0,w.useEffect)(()=>()=>{b.current&&clearTimeout(b.current)},[]);let ee=(0,w.useCallback)(R=>{R.stopPropagation(),u(!1),b.current&&(clearTimeout(b.current),b.current=null),v(fe=>!fe)},[]),M=(0,w.useCallback)(()=>{v(!1)},[]);if(!s||!c||!c.visible)return null;let O=o.length,Se;O===1?Se=o[o.length-1].author.name.charAt(0).toUpperCase():Se=O>H.MARKER_MAX_COUNT?"99+":`${O}`;let V;return n?V=i?pn:_o:V=i?fn:_t,(0,Po.createPortal)((0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)("button",{ref:x,type:"button",onClick:ee,onMouseEnter:j,onMouseLeave:ie,style:{...V,top:c.top,left:c.left},"aria-label":`${O} comment${O>1?"s":""}${n?" (resolved)":""}`,"data-fl-ignore":"",children:[Se,(0,G.jsx)("span",{style:n?hn:Mo}),A?(0,G.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",width:H.MARKER_HEIGHT,height:H.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?B.map((R,fe)=>(0,G.jsx)("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`}},fe)):null,!f&&o.length>0&&(0,G.jsxs)("span",{style:l?yn:Io,children:[(0,G.jsxs)("span",{style:gn,children:[(0,G.jsx)("span",{style:vn,children:o[0].author.name}),(0,G.jsx)("span",{style:bn,children:ce(o[0].created_at)})]}),(0,G.jsx)("div",{style:Sn,children:Cn(o[0].content)})]})]}),f&&x.current?(0,G.jsx)(at,{comments:o,dotRect:x.current.getBoundingClientRect(),onClose:M,onDidResolve:$}):null]}),s)});function it(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=Ze(t);if(n.element)return{element:n.element,method:"fingerprint",score:n.score}}return{element:null,method:"detached"}}var Fe=require("react/jsx-runtime"),xn=60;function lt(){let{groupedByDomPath:e,isDomPathFullyResolved:t,isDomPathFullyArchived:o}=ae(),{adapter:n,setDetachedDomPaths:r}=E(),a=(0,ue.useRef)(null);a.current===null&&(a.current=new Set(e.map(i=>i.domPath)));let s=(0,ue.useRef)(new Set),c=(0,ue.useMemo)(()=>e.filter(i=>!o(i.domPath)),[e,o]),m=(0,ue.useMemo)(()=>{let i=new Map;for(let d of c){let l=null;for(let f of d.comments){let v=f.element_metadata?.fingerprint;if(v){l=v;break}}let u=it(d.domPath,l);i.set(d.domPath,u)}return i},[c]);return(0,ue.useEffect)(()=>{let i=new Set;for(let[d,l]of m)l.method==="detached"&&i.add(d);r(i)},[m,r]),(0,ue.useEffect)(()=>{for(let i of c){let d=m.get(i.domPath);if(d&&d.method==="fingerprint"&&d.element&&d.score!==void 0&&d.score>=xn&&!s.current.has(i.domPath)){s.current.add(i.domPath);let l=Ee(d.element);for(let u of i.comments)u.thread_id===null&&n.updateComment(u.id,{dom_path:l}).catch(()=>{})}}},[c,m,n]),c.length===0?null:(0,Fe.jsx)(Fe.Fragment,{children:c.map(i=>{let d=m.get(i.domPath);return!d||d.method==="detached"?null:(0,Fe.jsx)(st,{domPath:i.domPath,comments:i.comments,isResolved:t(i.domPath),isNew:!a.current.has(i.domPath),resolvedElement:d.element},i.domPath)})})}var _e=require("react/jsx-runtime");function Rn(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 wn={isCommentMode:!1,comments:[]},pt=(0,T.createContext)(null),Tn="[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}",An="@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}}",Pn="@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 _n(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 Lo="Lay:";async function Mn(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 In(e,t,o,n){return e||(o?We({apiUrl:o,ai:n}):Be())}function Ln(e){return(e??"https://uselay.com").replace(/\/$/,"")}function ko({children:e,projectId:t,user:o,userHash:n,adapter:r,apiUrl:a,version:s,ai:c,mode:m,active:i,starterChips:d,screenshots:l,onCommentAdded:u}){let[f,v]=(0,T.useReducer)(Rn,wn),A=(0,T.useRef)(u);A.current=u;let S=(0,T.useRef)(In(r,t,a,c)),[y,N]=(0,T.useState)(null),[B,h]=(0,T.useState)(new Set),[x,_]=(0,T.useState)(null),b=(0,T.useRef)(null),[W,$]=(0,T.useState)(!1),j=(0,T.useCallback)(g=>{b.current=g,_(g),g?Gt(t,g):Bt(t)},[t]),ie=(0,T.useRef)(_n(S.current,()=>b.current)),[ee,M]=(0,T.useState)("review"),[O,Se]=(0,T.useState)(!0),[V,R]=(0,T.useState)(!1),[fe,Me]=(0,T.useState)("loading"),oe=m??ee,p=i??O;(0,T.useEffect)(()=>{S.current.getConfig(t).then(g=>{M(g.mode),Se(g.active),Me(g.active?"valid":"inactive"),R(!0)},g=>{g instanceof Le&&g.status===404?Me("not_found"):Me("valid"),R(!0)})},[t]),(0,T.useEffect)(()=>{if(oe!=="support"){$(!0);return}if(!V)return;o?.id&&!n&&console.warn(`${Lo} user.id provided without userHash in support mode. Comments will be anonymous. Pass userHash from createUserHash() for verified identity.`);let g=zt(t);if(g){j(g),$(!0);return}let z=Ln(a);Mn(z,t,o,n).then(pe=>{j(pe.token),$(!0)},pe=>{console.warn(`${Lo} Failed to create session:`,pe),$(!0)})},[t,oe,V,o,n,a,j]),(0,T.useEffect)(()=>{let g=document.createElement("div");g.setAttribute(ne.ROOT,""),g.setAttribute(ne.IGNORE,""),document.body.appendChild(g);let z=document.createElement("style");return z.textContent=Pn+Tn+An,g.appendChild(z),N(g),()=>{document.body.removeChild(g)}},[]),(0,T.useEffect)(()=>{if(!W||oe==="support"&&!b.current)return;let g=window.location.pathname;ie.current.getComments(t,g).then(z=>{v({type:"SET_COMMENTS",payload:z})},z=>{if(z instanceof Error&&z.message.includes("401")){j(null),$(!1);return}})},[t,W,x,oe,j]),(0,T.useEffect)(()=>{if(!W||oe==="support"&&!b.current)return;let g;try{g=ie.current.subscribe(t,z=>{switch(z.type){case"INSERT":v({type:"ADD_COMMENT",payload:z.comment});break;case"UPDATE":v({type:"UPDATE_COMMENT",payload:z.comment});break}})}catch{}return()=>g?.()},[t,W,x,oe]);let P={projectId:t,user:o,userHash:n,apiUrl:a,version:s,ai:c,mode:m,active:i,starterChips:d,screenshots:l},Z=fe==="not_found",re=y&&V&&W&&p&&!Z,Te=y&&V&&Z&&Ht(),Ie={isCommentMode:f.isCommentMode,comments:f.comments,adapter:ie.current,config:P,dispatch:v,portalRoot:y,mode:oe,projectStatus:fe,remoteConfigLoaded:V,detachedDomPaths:B,setDetachedDomPaths:h,onCommentAddedRef:A};return(0,_e.jsxs)(pt.Provider,{value:Ie,children:[e,(re||Te)&&(0,_e.jsx)(Ye,{}),re&&(0,_e.jsx)(tt,{}),re&&(0,_e.jsx)(lt,{})]})}var No=require("react");function ze(e){return e.mode==="review"}function Do(e){return e.mode==="support"}var k=require("react/jsx-runtime"),kn={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"},Dn={display:"flex",alignItems:"flex-start",gap:6,padding:"6px 8px",cursor:"pointer",userSelect:"none",color:"var(--fl-text-secondary)",lineHeight:1.4},Nn={flexShrink:0,fontSize:10,lineHeight:"16.8px",color:"var(--fl-text-tertiary)"},On={minWidth:0,wordBreak:"break-word"},Hn={padding:"0 8px 8px",display:"flex",flexDirection:"column",gap:6},Fn={fontSize:11,fontWeight:600,color:"var(--fl-text-tertiary)",textTransform:"uppercase",letterSpacing:.5,marginBottom:2,fontFamily:"var(--fl-font-family)"},ct={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)"},zn={...ct,backgroundColor:"#D32F2F",color:"#FFFFFF"},Gn={...ct,backgroundColor:"#F9A825",color:"#1A1A18"},Mt={fontSize:12,lineHeight:1.5,color:"var(--fl-text-primary)",fontFamily:"var(--fl-font-family)"},Bn={fontSize:12,color:"var(--fl-text-tertiary)",fontFamily:"var(--fl-font-family)",fontStyle:"italic",animation:"fl-analyzing-pulse 1.5s ease-in-out infinite"},Wn={display:"flex",gap:6,flexWrap:"wrap",marginBottom:4},$n="@keyframes fl-analyzing-pulse{0%,100%{opacity:0.4}50%{opacity:1}}";function Un(e){return e?ze(e)?e.category:`${e.intent.replace("_"," ")} \xB7 ${e.urgency} urgency`:"Analyzing..."}function Kn(e){return e==="high"?zn:e==="medium"?Gn:ct}function Oo({elementMetadata:e,aiContext:t,aiEnabled:o=!0}){let[n,r]=(0,No.useState)(!1);if(!e||!o||t&&!("mode"in t))return null;let a=Un(t),s=!t;return(0,k.jsxs)("div",{style:kn,children:[s&&(0,k.jsx)("style",{children:$n}),(0,k.jsxs)("div",{style:Dn,onClick:()=>r(c=>!c),role:"button",tabIndex:0,onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),r(m=>!m))},children:[(0,k.jsx)("span",{style:Nn,children:n?"\u25BE":"\u25B8"}),(0,k.jsx)("span",{style:On,children:n?"AI Interpretation":a})]}),n&&(0,k.jsx)("div",{style:Hn,children:s?(0,k.jsxs)("div",{children:[(0,k.jsx)("div",{style:Fn,children:"AI Interpretation"}),(0,k.jsx)("div",{style:Bn,children:"Analyzing..."})]}):t&&ze(t)?(0,k.jsx)("div",{children:t.interpretation?(0,k.jsx)("div",{style:Mt,children:t.interpretation}):(0,k.jsx)("div",{style:Mt,children:t.category})}):t?(0,k.jsxs)("div",{children:[(0,k.jsxs)("div",{style:Wn,children:[(0,k.jsx)("span",{style:ct,children:t.intent.replace("_"," ")}),(0,k.jsxs)("span",{style:Kn(t.urgency),children:[t.urgency," urgency"]})]}),(0,k.jsx)("div",{style:Mt,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
2
  //# sourceMappingURL=index.js.map