@snagset/server 0.1.19 → 0.1.21

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.
Files changed (77) hide show
  1. package/dist/app.js +3 -0
  2. package/dist/app.js.map +1 -1
  3. package/dist/db/migrations/0011_guest_status.sql +24 -0
  4. package/dist/instance/region.js +78 -0
  5. package/dist/instance/region.js.map +1 -0
  6. package/dist/projectCache.js +1 -1
  7. package/dist/projectCache.js.map +1 -1
  8. package/dist/routes/owner.js +7 -2
  9. package/dist/routes/owner.js.map +1 -1
  10. package/dist/routes/sessions.js +22 -5
  11. package/dist/routes/sessions.js.map +1 -1
  12. package/dist/routes/sites.js +24 -3
  13. package/dist/routes/sites.js.map +1 -1
  14. package/dist/routes/threads.js +39 -14
  15. package/dist/routes/threads.js.map +1 -1
  16. package/package.json +1 -1
  17. package/static/dashboard/assets/{CompositeItem-wqcRki5s.js → CompositeItem-9k6gamy_.js} +1 -1
  18. package/static/dashboard/assets/{ConfirmDialog-BqK5eJxB.js → ConfirmDialog-CJ4rxhiM.js} +1 -1
  19. package/static/dashboard/assets/{CopyButton-Cc4nF6JB.js → CopyButton-DQaUk_fX.js} +1 -1
  20. package/static/dashboard/assets/{FieldItemContext-DVLVe_H8.js → FieldItemContext-DwjMGEtR.js} +1 -1
  21. package/static/dashboard/assets/{InstallTag-DCRj1B-Z.js → InstallTag-Bv5eJ-pY.js} +1 -1
  22. package/static/dashboard/assets/{SaveState-B5TIvzLh.js → SaveState-BAmXwwnU.js} +1 -1
  23. package/static/dashboard/assets/{_app-DdvP8iZf.js → _app-BhtEIIYY.js} +1 -1
  24. package/static/dashboard/assets/{_app-BOhhOcC-.js → _app-dUX6QHB2.js} +2 -2
  25. package/static/dashboard/assets/{activity-CaCW3Nql.js → activity-C0C-uw85.js} +1 -1
  26. package/static/dashboard/assets/{arrow-left-B5Z7SkRz.js → arrow-left-5yNow0eG.js} +1 -1
  27. package/static/dashboard/assets/{avatar-CFgdRtiV.js → avatar-BTlpQ4so.js} +1 -1
  28. package/static/dashboard/assets/{badge-BIVx2feC.js → badge-D1jeec03.js} +1 -1
  29. package/static/dashboard/assets/{card-HwCaU_bv.js → card-BVWe16yF.js} +1 -1
  30. package/static/dashboard/assets/{check-CMqBU0e3.js → check-9egtmHPl.js} +1 -1
  31. package/static/dashboard/assets/{chevron-right-CY_sUg3i.js → chevron-right-Bmstp0HK.js} +1 -1
  32. package/static/dashboard/assets/{copy-Cn6p0txj.js → copy-GnUBMqNX.js} +1 -1
  33. package/static/dashboard/assets/{dialog-_GPHTnXl.js → dialog-BGVcKKLs.js} +1 -1
  34. package/static/dashboard/assets/{dropdown-menu-BEcLmKR6.js → dropdown-menu-DwN7ik3X.js} +1 -1
  35. package/static/dashboard/assets/{image-off-CyXpcTZd.js → image-off-BV5DPLn4.js} +1 -1
  36. package/static/dashboard/assets/{index-BZAfm4kX.js → index-DFxWyhmm.js} +15 -15
  37. package/static/dashboard/assets/{invite-iirWwB3z.js → invite-D7bpUPrA.js} +1 -1
  38. package/static/dashboard/assets/{label-C9GdL6JP.js → label-CxnO6qKO.js} +1 -1
  39. package/static/dashboard/assets/{layout-grid-3hfjyzci.js → layout-grid-xfets3-n.js} +1 -1
  40. package/static/dashboard/assets/me-C8ixZq4k.js +1 -0
  41. package/static/dashboard/assets/{parts-BOtvDu_v.js → parts-fnhfMAxC.js} +1 -1
  42. package/static/dashboard/assets/{plus-CTKInfcq.js → plus-BxZTgJzO.js} +1 -1
  43. package/static/dashboard/assets/s._site-B5wWH_CZ.js +1 -0
  44. package/static/dashboard/assets/{s._site.comments-DZBq2FkM.js → s._site.comments-_0tYLKCp.js} +1 -1
  45. package/static/dashboard/assets/{s._site.reviewers-YfizOkhz.js → s._site.reviewers-bbW3QZhQ.js} +1 -1
  46. package/static/dashboard/assets/s._site.settings-oWHkv4r8.js +1 -0
  47. package/static/dashboard/assets/{setup-4E2PxysX.js → setup-CLmg80L_.js} +1 -1
  48. package/static/dashboard/assets/{sign-in-Nda93fWo.js → sign-in-C2kQL0Ys.js} +1 -1
  49. package/static/dashboard/assets/{sign-up-kWIqmM8W.js → sign-up-DhbXaP75.js} +1 -1
  50. package/static/dashboard/assets/{sites-DbhDznKA.js → sites-CD7tpHGZ.js} +1 -1
  51. package/static/dashboard/assets/studio-C8vSzSiD.js +1 -0
  52. package/static/dashboard/assets/{studio-ml7KCROJ.js → studio-DWr-gNJq.js} +1 -1
  53. package/static/dashboard/assets/{studio.index-CZXgB0jx.js → studio.index-BANtPBsV.js} +1 -1
  54. package/static/dashboard/assets/{studio.integrations-OprNYBrJ.js → studio.integrations-DA6TbGub.js} +1 -1
  55. package/static/dashboard/assets/{studio.members-DT93LEwF.js → studio.members-CTj98khj.js} +1 -1
  56. package/static/dashboard/assets/{sun--lA9pLT9.js → sun-Dd-jHZ7E.js} +1 -1
  57. package/static/dashboard/assets/{switch-BCNx3nDC.js → switch-MVges_VF.js} +1 -1
  58. package/static/dashboard/assets/{table-B1e35-OI.js → table-DY_ZkUQS.js} +1 -1
  59. package/static/dashboard/assets/{useAriaLabelledBy-BLgC8mE_.js → useAriaLabelledBy-D-E1Md1d.js} +1 -1
  60. package/static/dashboard/assets/{useBaseQuery-CZkDX1tZ.js → useBaseQuery-CmgDPl0Z.js} +1 -1
  61. package/static/dashboard/assets/useQuery-DKkrpniW.js +1 -0
  62. package/static/dashboard/assets/useRender-P0lZXDvs.js +1 -0
  63. package/static/dashboard/assets/{useValueChanged-CCRl5Bf5.js → useValueChanged-CFJAwkwT.js} +1 -1
  64. package/static/dashboard/assets/{users-DCeMsa2g.js → users-DbYHCs3H.js} +1 -1
  65. package/static/dashboard/assets/{welcome-Il9zYmvM.js → welcome-BRH6NIwS.js} +1 -1
  66. package/static/dashboard/assets/{widget-signin-BLNsOS5K.js → widget-signin-DO_gjUUQ.js} +1 -1
  67. package/static/dashboard/assets/{you-B2lWBXCD.js → you-rr6TKyGj.js} +1 -1
  68. package/static/dashboard/assets/{zod-DG4VLz0r.js → zod-Di32GmP2.js} +1 -1
  69. package/static/dashboard/index.html +1 -1
  70. package/static/widget/snag.dock.js +5 -5
  71. package/static/widget/snag.runtime.js +2 -2
  72. package/static/dashboard/assets/me-Bgw9jS9F.js +0 -1
  73. package/static/dashboard/assets/s._site-Bi7roN7x.js +0 -1
  74. package/static/dashboard/assets/s._site.settings-Dbua1pYa.js +0 -1
  75. package/static/dashboard/assets/studio-MNEmZ3n7.js +0 -1
  76. package/static/dashboard/assets/useQuery-C0BVsxqZ.js +0 -1
  77. package/static/dashboard/assets/useRender-P5Wj_Sbt.js +0 -1
@@ -1,2 +1,2 @@
1
- const ve="Snagset",Co="snagset",gn="snagset.v1",To="Snagset",zt="Snag",Ro="Snags",_o={config:"SnagsetConfig"},Io={root:"data-snag-root"},Ot=e=>Io[e],Po={anchor:"data-snag-anchor",ignore:"data-snag-ignore",mask:"data-snag-mask",nomask:"data-snag-nomask",src:"data-snag-src",component:"data-snag-component"},Mo=e=>Po[e],M={font:"--snag-font",accent:"--snag-accent",onAccent:"--snag-onAccent",bg:"--snag-bg",fg:"--snag-fg",muted:"--snag-muted",border:"--snag-border",radius:"--snag-radius",shadow:"--snag-shadow",z:"--snag-z",motion:"--snag-motion",surface:"--snag-surface",sunken:"--snag-sunken",hover:"--snag-hover",focus:"--snag-focus",disabled:"--snag-disabled",statusOpen:"--snag-status-open",statusProgress:"--snag-status-progress",statusReview:"--snag-status-review",statusResolved:"--snag-status-resolved",anchorOrphan:"--snag-anchor-orphan",tbH:"--snag-tb-h",dockW:"--snag-dock-w",kb:"--snag-kb",thumbX:"--snag-thumb-x",thumbW:"--snag-thumb-w"},zo=e=>`var(${M[e]})`,Oo=e=>"snag_"+e,wt={query:["snag_t","snag_off","snag_debug","snag_theme"],fragment:["snag_k"]},Do="snag:disclosure:v1",Dt="snag:identity",yn="data-snag-theme",ce={session:e=>`snag:session:${e}`,silent:e=>`snag:silent:${e}`,identity:Dt,threads:(e,t)=>`snag:threads:${e}:${t}`,seen:(e,t)=>`snag:seen:${e}:${t}`,counts:e=>`snag:counts:${e}`,draft:(e,t)=>`snag:draft:${e}:${t}`,outbox:e=>`snag:outbox:${e}`,mode:"snag:mode",handoff:"snag:handoff",seenCoach:"snag:seen-coach",disclosure:Do},Pe={panels:"snag.panels.js",crumbs:"snag.crumbs.js",capture:"snag.capture.js",screenshot:"snag.screenshot.js",anchorExt:"snag.anchor-ext.js",anchorFuzzy:"snag.anchor-fuzzy.js",dock:"snag.dock.js",text:"snag.text.js"},xt={thread:"thr_",comment:"cmt_",attachment:"att_"},Lt={attachmentKind:"x-snagset-attachment-kind",attachmentWidth:"x-snagset-attachment-width",attachmentHeight:"x-snagset-attachment-height"},Lo={route:"snagset:route"},bn={original:"snagset.original",wrapped:"snagset.wrapped"},vn="position:absolute!important;top:0!important;left:0!important;width:0!important;height:0!important;margin:0!important;padding:0!important;border:0!important;pointer-events:none!important;z-index:2147483647;isolation:isolate;color-scheme:light dark;";function wn(e){const t=e.ownerDocument.defaultView?.getComputedStyle(e);return t?t.transform!=="none"&&t.transform!==""||t.filter!=="none"&&t.filter!==""||t.perspective!=="none"&&t.perspective!==""||/transform|filter|perspective|contain/.test(t.willChange)||/paint|layout|strict|content/.test(t.contain)||t.containerType!==void 0&&t.containerType!=="normal"&&t.containerType!=="":!1}function Nt(e){const t=e.documentElement,n=e.body;return t&&wn(t)?{parent:n??t,trapped:!0}:n&&wn(n)?{parent:t??n,trapped:!1}:{parent:n??t,trapped:!1}}function xn(e=document){const t=Ot("root"),n=e.querySelector(`[${t}]`);if(n?.shadowRoot)return n.shadowRoot;const o=e.createElement("div");return o.setAttribute(t,""),o.style.cssText=vn,Nt(e).parent.appendChild(o),o.attachShadow({mode:"open"})}function No(e,t,n=5){const o=e.ownerDocument??document,r=e.host,l=Nt(o).parent;if(typeof MutationObserver!="function"||!l)return()=>{};let u=0;const a=new MutationObserver(()=>{if(!r.isConnected){if(u++,u>n){a.disconnect(),t(u);return}Nt(o).parent.appendChild(r)}});return a.observe(l,{childList:!0}),()=>a.disconnect()}const Sn=[["pointerdown",!0],["mousedown",!0],["touchstart",!0],["pointerup",!0],["mouseup",!0],["touchend",!0],["click",!0],["dblclick",!0],["focusin",!0],["focusout",!0]];function Ho(e){const t=e.host,n=o=>o.stopPropagation();for(const[o,r]of Sn)t.addEventListener(o,n,{passive:r});return()=>{for(const[o]of Sn)t.removeEventListener(o,n)}}function Wo(e,t,n=20){const o=e.host;if(typeof MutationObserver!="function")return()=>{};let r=0;const l=()=>{let a=!1;return o.getAttribute("aria-hidden")==="true"&&(o.removeAttribute("aria-hidden"),a=!0),o.hasAttribute("inert")&&(o.removeAttribute("inert"),a=!0),a},u=new MutationObserver(()=>{l()&&++r>n&&(u.disconnect(),t(r))});return l(),u.observe(o,{attributes:!0,attributeFilter:["aria-hidden","inert"]}),()=>u.disconnect()}const Uo={product:ve,set:To,item:zt,items:Ro};function An(e){return(t,n)=>(e[t]??"").replace(/\{(\w+)\}/g,(o,r)=>{const l=n?.[r]??Uo[r];return l===void 0?o:String(l)})}const jo=e=>new Intl.NumberFormat().format(e),kn={"where.anchored":"{label}","where.approximate":"position approximate \u2014 the page changed","where.orphaned":"moved \u2014 the element is gone","status.open":"Active","status.progress":"In progress","status.review":"In review","status.resolved":"Resolved","author.unknown":"Someone","label.image":"an image","label.link":"a link","label.button":"a button","label.tag":"the {tag}"},$n=An(kn),En={open:{colour:"#4f6ef7"},progress:{colour:"#f59e0b"},review:{colour:"#8b5cf6"},resolved:{colour:"#10b981"}},Cn=e=>e==="open"||e==="review"?"#fff":"#16161a",Tn=e=>e in En?$n(`status.${e}`):e,Fo=e=>$n(`where.${e.anchorState}`,{label:e.anchor.label});class Ht extends Error{code;constructor(t,n){super(n??t),this.name="AdapterError",this.code=t}}function Rn(e){return{id:e.id,key:e.key,route:e.route,...e.scope?{scope:e.scope}:{},...e.attachments?.length?{attachments:e.attachments}:{},anchor:e.anchor,anchorState:e.anchorState,context:e.context,status:"open",comments:e.comment?[{id:e.comment.id,snagId:e.id,body:e.comment.body,author:e.comment.author,createdAt:e.createdAt}]:[],createdBy:e.createdBy,createdAt:e.createdAt,updatedAt:e.createdAt}}const A=Object.fromEntries(Object.keys(M).map(e=>[e,zo(e)])),Bo=Object.entries(En).map(([e,t])=>` ${M[`status${e[0].toUpperCase()}${e.slice(1)}`]}:${t.colour};`).join(`
2
- `),Zo=` :host{all:initial}[hidden]{display:none!important}:host{display:block;font:400 14px/1.45 ${A.font};color:${A.fg};${M.font}:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;${M.accent}:#2a51b8;${M.bg}:#fefdfc;${M.fg}:#181716;${M.muted}:#666564;${M.border}:#e4e3e0;${M.radius}:8px;${M.shadow}:0 6px 24px -4px rgb(0 0 0 / .18);${M.z}:2147483647;${M.motion}:160ms;${M.surface}:color-mix(in srgb,${A.fg} 6%,${A.bg});${M.sunken}:color-mix(in srgb,${A.fg} 3%,${A.bg});${M.hover}:color-mix(in srgb,${A.fg} 8%,${A.bg});${M.onAccent}:#fff;${M.focus}:color-mix(in srgb,${A.accent} 62%,${A.fg});${M.disabled}:color-mix(in srgb,${A.muted} 52%,${A.bg});${Bo} ${M.anchorOrphan}:#DC2626;}:host([${yn}="dark"]){${M.accent}:#8aafff;${M.onAccent}:#1d1c1a;${M.bg}:#1d1c1a;${M.fg}:#f0eeec;${M.muted}:#9a9997;${M.border}:#2d2c2b;${M.shadow}:0 6px 24px -4px rgb(0 0 0 / .6);}@media (prefers-reduced-motion:reduce){:host{${M.motion}:0ms}}@media (forced-colors:active){:host{${M.bg}:Canvas;${M.fg}:CanvasText;${M.muted}:CanvasText;${M.border}:CanvasText;${M.accent}:Highlight;${M.onAccent}:HighlightText;${M.surface}:Canvas;${M.sunken}:Canvas;${M.hover}:Canvas;${M.focus}:Highlight;${M.disabled}:GrayText;${M.shadow}:none;${M.anchorOrphan}:CanvasText;}.snag-pin{border-color:CanvasText!important;color:CanvasText!important;forced-color-adjust:none}}`,Ke={shield:1,pins:3,dock:5,notice:6,toolbar:7},_n=new WeakMap;function rt(e,t,n){let o=_n.get(e);if(o||_n.set(e,o=new Set),o.has(t))return;o.add(t);try{const u=new CSSStyleSheet;u.replaceSync(n),e.adoptedStyleSheets=[...e.adoptedStyleSheets,u];return}catch{}const l=(e.ownerDocument??document).createElement("style");l.setAttribute(`data-snag-${t}`,""),l.textContent=n,e.appendChild(l)}function Vo(e){return e==="light"||e==="dark"?e:"auto"}function Yo(e,t){const n=yn;if(t!=="auto")return e.setAttribute(n,t),()=>e.removeAttribute(n);const o=e.ownerDocument?.defaultView?.matchMedia?.("(prefers-color-scheme: dark)");if(!o)return e.setAttribute(n,"light"),()=>e.removeAttribute(n);const r=()=>e.setAttribute(n,o.matches?"dark":"light");return r(),o.addEventListener("change",r),()=>{o.removeEventListener("change",r),e.removeAttribute(n)}}function Wt(e){return e.getBoundingClientRect()}function St(e){if(e.closest('[inert],[aria-hidden="true"]'))return!1;const t=e.checkVisibility;if(typeof t=="function")return t.call(e,{contentVisibilityAuto:!0,opacityProperty:!1,visibilityProperty:!0});const n=Wt(e);if(!(n.width>0||n.height>0||e.getClientRects().length>0))return!1;const r=e.ownerDocument?.defaultView;return r?r.getComputedStyle(e).visibility!=="hidden":!0}const Xo="button,a[href],[role=button],[role=link],[role=tab],[role=menuitem],label,input,select,textarea,summary",Ko=3,In=8,Jo=new Set(["img","picture","canvas","video","audio","iframe","embed","object","svg","math","input","select","textarea","button","progress","meter"]);function qo(e,t){return Jo.has(e.tagName.toLowerCase())?!1:t.getComputedStyle(e).display==="inline"}function Pn(e){const t=e.ownerDocument?.defaultView;if(!t)return e;let n=e;for(let r=e;r;r=r.parentElement){const l=Wt(r);if(l.width>=In&&l.height>=In&&!qo(r,t)){n=r;break}n=r}let o=0;for(let r=n;r&&o<=Ko;r=r.parentElement){if(r.matches(Xo))return r;o++}return n}const Qo=10,Ut=[["click",!1],["auxclick",!1],["dblclick",!1],["pointerdown",!1],["pointerup",!1],["mousedown",!1],["mouseup",!1],["contextmenu",!1],["dragstart",!1],["wheel",!1],["touchstart",!0],["touchmove",!0],["touchend",!0],["selectstart",!0],["keydown",!1],["keyup",!1]];function Go(e,t,n){let o=e;for(;o&&o!==o.ownerDocument.documentElement&&o!==o.ownerDocument.body;){const r=getComputedStyle(o),l=(r.overflowY==="auto"||r.overflowY==="scroll")&&o.scrollHeight>o.clientHeight&&(t>0&&o.scrollTop+o.clientHeight<o.scrollHeight-1||t<0&&o.scrollTop>0),u=(r.overflowX==="auto"||r.overflowX==="scroll")&&o.scrollWidth>o.clientWidth&&(n>0&&o.scrollLeft+o.clientWidth<o.scrollWidth-1||n<0&&o.scrollLeft>0);if(l||u)return o;o=o.parentElement}return null}function Mn(e,t){const n=t==="y"?e.deltaY:e.deltaX;return e.deltaMode===1?n*16:e.deltaMode===2?n*(t==="y"?innerHeight:innerWidth):n}const er=["position:fixed","inset:0",`z-index:${Ke.shield}`,"touch-action:pan-x pan-y pinch-zoom","background:transparent"].join(";");function tr(e,t={}){const n=t.doc??e.ownerDocument??document,o=n.defaultView??window;let r=t.coarsePointer??o.matchMedia?.("(pointer: coarse)").matches??!1;const l=c=>{const T=c.pointerType,b=T==="touch"?!0:T==="mouse"||T==="pen"?!1:r;b!==r&&(r=b,d())},u=n.createElement("div");u.className="snag-shield",u.style.cssText=er;let a="browse";const d=()=>{u.style.pointerEvents=r?"none":"auto",u.style.cursor="crosshair"};d();const m=c=>{const T=c;return!T||typeof T.closest!="function"?!1:e.contains(T)?!0:!!T.closest(`[${Ot("root")}]`)};function w(c,T,b){let I=b,L=0;for(;I.shadowRoot&&L++<Qo;){const W=C(I.shadowRoot,c,T);if(!W||W===I)break;I=W}return I}function C(c,T,b){const I=c.elementsFromPoint;if(typeof I=="function"){for(const W of I.call(c,T,b))if(W.getRootNode()===c)return W;return null}const L=c.elementFromPoint(T,b);return L&&L.getRootNode()===c?L:null}function p(c,T){const b=[];for(const I of n.elementsFromPoint(c,T)){if(m(I))continue;if(I===n.documentElement||I===n.body){b.push(I);continue}const L=w(c,T,I);b.push(m(L)?I:L)}return b}let P=null;const F=(c,T)=>{const[b]=p(c,T);b&&t.onPick?.(Pn(b),{x:c,y:T})};let k=!1;const z=()=>{const c=n.getSelection?.();if(!c||c.isCollapsed||c.rangeCount===0||!c.toString().trim())return!1;const T=c.anchorNode;if(!T||e.contains(T))return!1;const b=T.nodeType===1?T:T.parentElement;return!m(b)},re=c=>{const T=c.composedPath()[0];if(T&&m(T)){k=!1;return}if(c.type==="selectstart"){t.onSelectStart?.();return}const b=c.type;if(b.endsWith("down")||b.endsWith("start")){k=!1;return}if(b.endsWith("up")||b.endsWith("end")){k=z();return}if(b==="click"||b==="auxclick"){if(!k)return;k=!1,c.preventDefault(),c.stopImmediatePropagation()}},q=c=>{if(c.type==="pointerdown"&&l(c),a==="comments"){re(c);return}if(a!=="add")return;if(c.type==="keydown"||c.type==="keyup"){g(c);return}const T=c.composedPath()[0];if(T&&T!==u&&m(T))return;const b=Ut.find(([I])=>I===c.type)?.[1]??!1;if(c.stopImmediatePropagation(),!b){if(r&&c.type==="pointerdown"){const I=c;P={x:I.clientX,y:I.clientY,t:performance.now()},D(I.clientX,I.clientY)}if(r&&c.type==="pointerup"&&P){const I=c,L=P;P=null,Math.hypot(I.clientX-L.x,I.clientY-L.y)<=8&&performance.now()-L.t<=700&&F(I.clientX,I.clientY);return}if(c.type==="click"||c.type==="auxclick"||c.type==="dblclick"){c.preventDefault();const I=c;F(I.clientX,I.clientY);return}if(c.type==="wheel"){const I=c,L=Mn(I,"y"),W=Mn(I,"x"),[X]=p(I.clientX,I.clientY),se=Go(X??null,L,W);se&&(se.scrollTop+=L,se.scrollLeft+=W,c.preventDefault());return}if(c.type==="dragstart"||c.type==="contextmenu"){c.preventDefault();return}(c.type==="pointerdown"||c.type==="mousedown")&&!r&&c.preventDefault()}},G=new Set(["Tab","ArrowUp","ArrowDown","ArrowLeft","ArrowRight"," ","Spacebar","PageUp","PageDown","Home","End"]),J=/^[a-z0-9/?]$/;function h(c){for(const T of c.composedPath()){const b=T;if(!(!b||b.nodeType!==1||typeof b.matches!="function")&&b.matches('input:not([type=button]):not([type=submit]):not([type=checkbox]):not([type=radio]),textarea,select,[contenteditable=""],[contenteditable=true],[role=textbox],[role=searchbox],[role=combobox]'))return!0}return!1}function g(c){G.has(c.key)||c.metaKey||c.ctrlKey||c.altKey||/^F\d{1,2}$/.test(c.key)||c.key!=="Escape"&&c.key.length===1&&J.test(c.key.toLowerCase())&&!h(c)&&(c.preventDefault(),c.stopImmediatePropagation())}for(const[c,T]of Ut)o.addEventListener(c,q,{capture:!0,passive:T});let _=0,O=null;function Z(){if(_=0,a!=="add"||!O)return;const[c]=p(O.x,O.y);t.onHover?.(c?Pn(c):null)}function D(c,T){a==="add"&&(O={x:c,y:T},!_&&(_=o.requestAnimationFrame(Z)))}return u.addEventListener("pointermove",c=>D(c.clientX,c.clientY)),u.addEventListener("pointerleave",()=>{O=null,t.onHover?.(null)}),{shield:u,getMode:()=>a,setMode(c){a=c,k=!1,d(),c==="add"?e.appendChild(u):u.remove(),c!=="add"&&(O=null,t.onHover?.(null))},hitTest:p,destroy(){_&&o.cancelAnimationFrame(_);for(const[c]of Ut)o.removeEventListener(c,q,{capture:!0});u.remove()}}}const nr=/[\u200B-\u200D\u2060\uFEFF]/gu,or=/[\s\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+/gu,rr=[[/[\u2018\u2019\u201A\u201B]/gu,"'"],[/[\u201C\u201D\u201E\u201F]/gu,'"'],[/[\u2010-\u2015\u2212]/gu,"-"],[/\u2026/gu,"..."],[/\u2044/gu,"/"]];function sr(e){let t=e.normalize("NFC").replace(nr,"");for(const[n,o]of rr)t=t.replace(n,o);return t.replace(or," ").trim()}const ar={testid:1,domid:1,css:.9,aria:.75,"text-exact":.8,"text-fuzzy":.78,"path-rect":.35,none:0,manual:1},zn={anchored:.75,approximate:.35};function ir(e,t){const n=ar[e];return t===1?n:n/(1+Math.log2(t))}function On(e){return e>=zn.anchored?"anchored":e>=zn.approximate?"approximate":"orphaned"}const cr=[Mo("anchor"),"data-testid","data-test-id","data-test","data-cy","data-qa","data-pw","data-automation-id"],Dn=e=>typeof CSS<"u"&&CSS.escape?CSS.escape(e):e.replace(/["\\]/g,"\\$&"),lr=[{strategy:"testid",applicable:e=>!!e.testid,find:(e,t)=>jt(t,cr.map(n=>`[${n}="${Dn(e.testid)}"]`).join(","))},{strategy:"domid",applicable:e=>!!e.domid,find:(e,t)=>jt(t,`#${Dn(e.domid)}`)},{strategy:"css",applicable:e=>!!e.css,find:(e,t)=>{try{return jt(t,e.css)}catch{return[]}}}];function jt(e,t){return[...e.querySelectorAll(t)].filter(dr)}function dr(e){return!e.closest(`[${Ot("root")}]`)}function ur(e,t){const n=t.text?.exact;if(!n)return!0;const o=sr(e.textContent??"");return o?o===n||o.includes(n)||n.includes(o):!0}function Ln(e,t,n,o){St(e)||o.push("hidden"),t.hostPath?.length&&o.push("shadow-boundary");const r=!ur(e,t);r&&o.push("text-drift");let l=o.includes("hidden")?Math.min(n,.7):n;return r&&(l=Math.min(l,.5)),l}const fr={element:null,strategy:"none",score:0,state:"orphaned",reasons:["not-found"],candidates:0};function Ft(e,t=document,n={}){const o=[];for(const r of lr){if(!r.applicable(e))continue;const l=r.find(e,t);if(l.length===0)continue;const u=ir(r.strategy,l.length),a=l[0];l.length>1&&o.push("ambiguous");const d=Ln(a,e,u,o),m={element:a,strategy:r.strategy,score:d,state:On(d),reasons:o.length?o:["exact"],candidates:l.length};if(m.reasons.includes("text-drift")&&n.extended){const w=n.extended(e,t,{...n.viewportWidth===void 0?{}:{viewportWidth:n.viewportWidth},...n.passCaches?{caches:n.passCaches}:{}});if(w&&w.score>m.score)return w}return m}return n.extended?.(e,t,{...n.viewportWidth===void 0?{}:{viewportWidth:n.viewportWidth},...n.passCaches?{caches:n.passCaches}:{}})??fr}const hr={"toolbar.aria":"{product} review toolbar","toolbar.group":"What you see","toolbar.browse":"Browse","toolbar.comments":"Comment","toolbar.comments.unresolved":"Comment, {n} unresolved","toolbar.add":"Add a comment","toolbar.add.draft":"Add a comment \u2014 one is unfinished","toolbar.panel":"All comments","pin.aria":"Comment {key} on {target}. {status}, {replies} replies. Press Enter.","pin.aria.one":"Comment {key} on {target}. {status}, 1 reply. Press Enter.","pin.aria.none":"Comment {key} on {target}. {status}. Press Enter.","pin.aria.moved":"Comment {key} on {target}. {status}. {where}. Press Enter.","pin.target":"{role} \u201C{name}\u201D","cluster.aria":"{n} comments here: {list}","nav.announce":"Comment {n} on {label}, {i} of {total}","action.retry":"Retry","action.dismiss":"Dismiss","action.export":"Export","action.exportclear":"Export & clear","error.quota":"Storage is full \u2014 this {item} is on screen but not saved. Export to keep them.","error.nostorage":"Comments won't be saved in this browser. Export before you leave to keep them.","error.linkrevoked":"This review link was turned off. Ask whoever sent it for a new one.","error.sessionended":"This review session has ended. Open your review link again to carry on.","error.sendfailed":"That {item} couldn't be sent, so it wasn't kept. Check your connection and try again.","error.origin":"{product} is not enabled for {origin}. Add that address to the site's allowed origins.","error.panels":"{product} loaded, but its comment UI didn't. You can still see the comments on the page.","error.panels.add":"Adding comments is unavailable until the comment UI loads.","error.capture":"{product} can't take new comments \u2014 the part that records the page didn't load. Everything already here still works.","paused.dialog":"Review paused \u2014 a dialog is open on this page. Close it to carry on commenting. Commenting inside a native dialog isn't supported yet.","paused.close":"Close","announce.created":"Comment {key} added.","permalink.unknown":"That comment isn't on this page any more"},pr={...kn,...hr},V=An(pr);function mr(e,t){const n=new Array(e.length),o=[],r=new Map,l=[];let u=0;for(let a=0;a<e.length;a++){u++;const d=e[a],m=Math.floor(d.x/t),w=Math.floor(d.y/t);let C=-1;e:for(let p=-1;p<=1;p++)for(let P=-1;P<=1;P++)for(const F of r.get(`${m+p},${w+P}`)??[]){const k=l[F],z=d.x-k.x,re=d.y-k.y;if(z*z+re*re<=t*t){C=F;break e}}if(C===-1){C=o.length,o.push([]),l.push(d);const p=`${m},${w}`,P=r.get(p);P?P.push(C):r.set(p,[C])}n[a]=C,o[C].push(a)}return{group:n,members:o,visits:u}}const gr=`position:absolute;top:0;left:0;width:0;height:0;pointer-events:none;z-index:${Ke.pins}`,yr=' .snag-pp{animation:snag-pp .5s ease-out 2}@keyframes snag-pp{50%{transform:scale(1.45)}}@media (prefers-reduced-motion: reduce){.snag-pp{animation:none}}.snag-pin{width:28px;height:28px;margin:-14px 0 0 -14px}.snag-pin::after{content:"";position:absolute;inset:-8px}@media (pointer:coarse){.snag-pin{width:34px;height:34px;margin:-17px 0 0 -17px}}',br=`position:fixed;inset:0;width:0;height:0;pointer-events:none;z-index:${Ke.pins}`,st=["position:absolute",`color:${A.onAccent}`,`font:600 12px/1 ${A.font}`,"display:flex","align-items:center","justify-content:center","box-shadow:0 1px 4px rgb(0 0 0 / .35)","pointer-events:auto","cursor:pointer","box-sizing:border-box"].join(";"),At="border-radius:50% 50% 50% 2px",Nn=e=>A[`status${e[0].toUpperCase()}${e.slice(1)}`]??A.muted;function Hn(e,t){const n=Cn(t.status),o=`background:${Nn(t.status)};color:${n}`,r="0 1px 4px rgb(0 0 0 / .35)";return e==="anchored"?`${st};${At};${o};border:2px solid ${n};box-shadow:${r}`:e==="approximate"?`${st};${At};${o};border:2px dashed ${n};box-shadow:${r}`:`${st};${At};${o};border:2px solid ${n};box-shadow:inset 0 0 0 2px ${n},${r}`}function vr(e,t){const n=[];let o="static",r=!1;for(let l=e;l&&l!==e.ownerDocument.documentElement;l=l.parentElement){const u=t.getComputedStyle(l),a=l!==e.ownerDocument.body&&/auto|scroll|hidden|overlay/.test(u.overflowY+u.overflowX);a&&!r&&n.push(l),u.position==="fixed"?(o="dynamic",r=!0):u.transform!=="none"||u.filter!=="none"||u.perspective!=="none"?(o="dynamic",r=!1):(u.position==="sticky"||u.willChange.includes("transform")||u.contain.includes("layout")||a&&(l.scrollHeight>l.clientHeight||l.scrollWidth>l.clientWidth))&&(o="dynamic")}return{tier:o,clips:n}}function wr(e,t,n,o){const r=e.ownerDocument??document,l=r.defaultView??window;rt(e,"pins",yr);const u=r.createElement("div");u.className="snag-pins",u.style.cssText=gr,e.appendChild(u);const a=r.createElement("div");a.className="snag-pins-dyn",a.style.cssText=br,e.appendChild(a);let d=[],m=[];const w=new Map;let C=new Map,p=null;const P=new Map;let F=new Map;const k=l.matchMedia?.("(pointer: coarse)").matches??!1,z=k?32:24,re=k?34:28;let q=[],G=null,J=null,h={x:0,y:0};function g(){const S=r.defaultView,$=u.getBoundingClientRect();h={x:$.left+(S?.scrollX??0),y:$.top+(S?.scrollY??0)}}let _=[];const O=new Map,Z=1e4,D=5,c=new Map,T=new Set(["testid","domid"]);function b(S){const $=c.get(S.id),y=$?.ref.deref();if(!y||!y.isConnected)return null;if(T.has($.strategy))return y;if(S.anchor.css)try{if(!y.matches(S.anchor.css))return null}catch{return null}return y}function I(S,$){const y=[],U=Ln($,S.anchor,1,y);return{element:$,strategy:c.get(S.id).strategy,score:U,state:On(U),reasons:y.length?y:["exact"],candidates:1}}function L(S,$="authoritative"){w.clear(),_=[];const y=Date.now(),U=n?.newPass?.();return S.map(v=>{const N=b(v),E=n?.get();let x=N?I(v,N):Ft(v.anchor,r,{viewportWidth:r.defaultView?.innerWidth??0,...E?{extended:E}:{},...U?{passCaches:U}:{}});if(N&&x.reasons.includes("text-drift")){const j=Ft(v.anchor,r,{viewportWidth:r.defaultView?.innerWidth??0,...E?{extended:E}:{},...U?{passCaches:U}:{}});j.score>x.score&&(x=j)}if(n&&(!x.element||x.reasons.includes("text-drift"))&&n.want(v.anchor),!x.element&&n){const j=n.fuzzyHit?.(v.id);j?x=j:n.wantFuzzy?.(v.id,v.anchor)}const ae=x.element&&v.anchor.text?.exact&&(x.reasons.includes("text-drift")||x.strategy==="path-rect"&&x.score<.5);if(n&&ae){const j=n.fuzzyHit?.(v.id);j&&j.score>x.score?x=j:j||n.wantFuzzy?.(v.id,v.anchor)}x.element?c.set(v.id,{ref:new WeakRef(x.element),strategy:x.strategy}):c.delete(v.id),x.element&&w.set(v.id,x.element);let Q=!1;if(x.state==="orphaned"){const j=O.get(v.id)??{firstSeenAt:y,tries:0,best:x};j.tries++,x.score>=j.best.score&&(j.best=x),O.set(v.id,j);const ee=n?.unavailable?.()??!1,te=ee?2:D,de=y-j.firstSeenAt<Z;$==="optimistic"||de&&($==="navigating"||j.tries<te)?Q=!0:(x=j.best,ee&&!x.reasons.includes("budget-exceeded")&&(x={...x,reasons:[...x.reasons,"budget-exceeded"]}),O.delete(v.id))}else O.delete(v.id);Q||_.push({id:v.id,state:x.state,strategy:x.strategy,confidence:x.score});const H=x.element?Wt(x.element):void 0;if(H&&(H.width>0||H.height>0)){const j=r.defaultView;v.anchor.rect={x:H.left+(j?.scrollX??0),y:H.top+(j?.scrollY??0),w:H.width,h:H.height}}return{...v,anchorState:Q?v.anchorState:x.state,anchorPending:Q,anchorReasons:x.reasons}})}function W(){const S=r.documentElement;return{w:S.scrollWidth,h:S.scrollHeight}}function X(S,$,y){return{x:Math.min(Math.max(S,14),Math.max(y.w,28)-14),y:Math.min(Math.max($,14),Math.max(y.h,28)-14)}}function se(S,$){g(),u.textContent="",a.textContent="",d=[],m=[],C=new Map,F=new Map,P.clear(),q=[],J=null,S.forEach((y,U)=>{const v=y.anchor.rect;if(!v)return;const N=y.anchor.offset??{fx:.5,fy:.5},E=r.createElement("div");E.className="snag-pin",E.setAttribute("data-state",y.anchorPending?"pending":y.anchorState),E.setAttribute("data-key",y.key),E.style.cssText=y.anchorPending?`${Hn("approximate",y)};opacity:.55`:Hn(y.anchorState,y);const x=w.get(y.id),{tier:ae,clips:Q}=x?vr(x,l):{tier:"static",clips:[]};if(ae==="dynamic"&&x){const ne=x.getBoundingClientRect(),ye=Be();E.style.left=`${ne.left-ye.left+ne.width*N.fx}px`,E.style.top=`${ne.top-ye.top+ne.height*N.fy}px`,P.set(E,{x:ne.left+ne.width*N.fx+l.scrollX-h.x,y:ne.top+ne.height*N.fy+l.scrollY-h.y});const Le={node:E,el:x,fx:N.fx,fy:N.fy,clips:Q};d.push(Le),E.hidden=!St(x),E.hidden||Ze(Le,ne,new Map(Q.map(ut=>[ut,ut.getBoundingClientRect()])))}else{const ne=X(v.x+v.w*N.fx-h.x,v.y+v.h*N.fy-h.y,W());E.style.left=`${ne.x}px`,E.style.top=`${ne.y}px`,P.set(E,ne),x&&(m.push({node:E,el:x,fx:N.fx,fy:N.fy,clips:[]}),E.hidden=!St(x))}E.textContent=String(U+1);const H=Fo(y),j=y.anchor.role?V("pin.target",{role:y.anchor.role,name:y.anchor.accessibleName??y.anchor.label}):y.anchor.label,ee=y.comments.length-1,te=y.anchorState==="approximate"?`~ ${y.key}`:y.key;E.setAttribute("role","button"),E.setAttribute("tabindex","0");const de=y.anchorState==="anchored"?V(ee===0?"pin.aria.none":ee===1?"pin.aria.one":"pin.aria",{key:te,target:j,status:Tn(y.status),replies:ee}):V("pin.aria.moved",{key:te,target:j,status:Tn(y.status),where:H});E.title=de,E.setAttribute("aria-label",de),t&&Se(E,()=>t(y)),$?.has(y.id)&&(E.hidden=!0,E.setAttribute("data-fo","")),C.set(y.id,E),F.set(E,{snag:y,ordinal:U+1}),(ae==="dynamic"?a:u).appendChild(E)}),qe(),p&&Ve(p),De(),le="",he(r.visibilityState==="visible"&&C.size>0)}const Be=()=>a.getBoundingClientRect();let xe=!1;function Ze(S,$,y){for(const U of S.clips){const v=y.get(U);if(v&&($.right<=v.left||$.left>=v.right||$.bottom<=v.top||$.top>=v.bottom)){S.node.hidden=!0;return}}S.node.hidden=!1}function Ct(S){const $=new Map;for(const y of S)for(const U of y.clips)$.has(U)||$.set(U,U.getBoundingClientRect());return $}const Re=["open","progress","review","resolved"];function Se(S,$){S.addEventListener("click",$),S.addEventListener("keydown",y=>{y.key!=="Enter"&&y.key!==" "||(y.preventDefault(),$())})}function Oe(S,$,y,U,v){const N=Re.find(x=>S.some(ae=>ae.snag.status===x))??"open",E=r.createElement("div");E.className="snag-pin snag-cluster",E.style.cssText=`${st};border-radius:50%;background:${Nn(N)};color:${Cn(N)};border:2px solid ${A.onAccent}`,E.style.left=`${$}px`,E.style.top=`${y}px`,E.textContent=String(S.length),E.setAttribute("data-count",String(S.length)),E.setAttribute("data-state",N),E.setAttribute("role","button"),E.setAttribute("tabindex","0"),v&&E.setAttribute("aria-expanded","true"),E.setAttribute("aria-label",V("cluster.aria",{n:S.length,list:S.map(x=>x.ordinal).join(", ")})),Se(E,()=>{if(v)G=null;else if(S.length<=6)G=U;else{o?.(S.map(x=>x.snag.id));return}qe()}),u.appendChild(E),q.push(E)}function fe(S,$,y,U){Oe(S,$,y,U,!0),S.forEach((v,N)=>{const E=$,x=y+(N+1)*(re+12),ae=v.x-E,Q=v.y-x,H=Math.hypot(ae,Q);if(H>4){const ee=r.createElement("div");ee.className="snag-leader",ee.setAttribute("aria-hidden","true"),ee.style.cssText=`position:absolute;left:${E}px;top:${x}px;width:${H}px;height:0;border-top:1px solid ${A.onAccent};transform-origin:0 0;transform:rotate(${Math.atan2(Q,ae)}rad)`,u.appendChild(ee),q.push(ee)}const j=v.dot.cloneNode(!0);j.style.visibility="",j.style.left=`${E}px`,j.style.top=`${x}px`,Se(j,()=>t?.(v.snag)),u.appendChild(j),q.push(j)})}function qe(){for(const v of q)v.remove();q=[];const S=[];for(const[v,N]of F){if(v.hidden){v.style.visibility="";continue}const E=P.get(v);E&&S.push({dot:v,snag:N.snag,ordinal:N.ordinal,x:E.x,y:E.y})}const{members:$,visits:y}=mr(S,z);u.setAttribute("data-cv",String(y)),u.setAttribute("data-cp",String(S.length));let U=!1;for(const v of $){if(v.length<2){S[v[0]].dot.style.visibility="";continue}const N=v.map(Q=>S[Q]),E=N.map(Q=>Q.snag.id).sort().join("|");for(const Q of N)Q.dot.style.visibility="hidden";const x=N.reduce((Q,H)=>Q+H.x,0)/N.length,ae=N.reduce((Q,H)=>Q+H.y,0)/N.length;G===E&&N.length<=6?(U=!0,fe(N,x,ae,E)):Oe(N,x,ae,E,!1)}G&&!U&&(G=null)}function Qe(S){J?.remove(),J=null;const $=S.anchor.rect;if(!$)return;const y=S.anchor.offset??{fx:.5,fy:.5},U=r.createElement("div");U.className="snag-pin snag-ghost",U.style.cssText=`${st};${At};background:transparent;border:2px dashed ${A.anchorOrphan};color:${A.anchorOrphan};box-shadow:none;pointer-events:none`;const v=X($.x+$.w*y.fx-h.x,$.y+$.h*y.fy-h.y,W());U.style.left=`${v.x}px`,U.style.top=`${v.y}px`,U.setAttribute("aria-hidden","true"),u.appendChild(U),J=U}function De(S=!1){const $=S?[...d,...m]:d;xe||$.length===0||(xe=!0,l.requestAnimationFrame(()=>{xe=!1;const y=performance.now(),U=l.scrollX,v=l.scrollY,N=Be(),E=$.map(H=>H.el.isConnected?H.el.getBoundingClientRect():null),x=$.map(H=>H.el.isConnected&&St(H.el)),ae=Ct($),Q=W();$.forEach((H,j)=>{const ee=E[j];if(!ee)return;if(H.node.hasAttribute("data-fo")){H.node.hidden=!0;return}if(!x[j]){H.node.hidden=!0;return}H.node.hidden=!1;const te=ee.left+ee.width*H.fx,de=ee.top+ee.height*H.fy;if(H.node.parentElement===a)H.node.style.left=`${te-N.left}px`,H.node.style.top=`${de-N.top}px`,Ze(H,ee,ae),P.set(H.node,{x:te+U-h.x,y:de+v-h.y});else{const ne=X(te+U-h.x,de+v-h.y,Q);H.node.style.left=`${ne.x}px`,H.node.style.top=`${ne.y}px`,P.set(H.node,ne)}}),qe(),u.setAttribute("data-ms",(performance.now()-y).toFixed(2))}))}const Ae=()=>De();r.addEventListener("scroll",Ae,{capture:!0,passive:!0});const lt=typeof l.ResizeObserver=="function"?new l.ResizeObserver(()=>De(!0)):null;lt?.observe(r.documentElement);let ke=null,le="";function Tt(){let S="";for(const $ of[...m,...d]){if(!$.el.isConnected)continue;const y=$.el.getBoundingClientRect();S+=`${Math.round(y.left)},${Math.round(y.top)},${Math.round(y.width)};`}!S||S===le||(le=S,De(!0))}function he(S){if(ke&&clearTimeout(ke),ke=null,!S)return;const $=()=>{Tt(),ke=setTimeout($,500)};ke=setTimeout($,500)}const dt=()=>he(r.visibilityState==="visible"&&C.size>0);r.addEventListener("visibilitychange",dt);function ie(S){const $=C.get(S);$&&($.classList.remove("snag-pp"),l.requestAnimationFrame(()=>$.classList.add("snag-pp")),l.setTimeout(()=>$.classList.remove("snag-pp"),1400))}function Ve(S){const $=p?C.get(p):void 0;$&&($.style.transform="",$.style.zIndex=""),p=S;const y=S?C.get(S):void 0;y&&(y.style.transform="scale(1.4)",y.style.zIndex="1")}return{el:u,render:se,showGhost:Qe,pulse:ie,reanchor:L,settled:()=>_,hasPending:()=>O.size>0,highlight:Ve,destroy(){r.removeEventListener("scroll",Ae,{capture:!0}),r.removeEventListener("visibilitychange",dt),lt?.disconnect(),he(!1),u.remove(),a.remove()}}}const xr=` .snag-notice{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(24px + var(${M.tbH},56px));z-index:${Ke.notice};max-width:min(420px,calc(100vw - 24px));background:${A.bg};color:${A.fg};border:1px solid ${A.border};border-inline-start:3px solid ${A.anchorOrphan};border-radius:${A.radius};box-shadow:${A.shadow};padding:12px 14px;pointer-events:auto;font:400 13px/1.45 ${A.font};display:flex;flex-direction:column;gap:10px}@media (pointer:coarse){.snag-notice{bottom:calc(12px + var(${M.tbH},64px))}}.snag-notice p{margin:0}.snag-notice-actions{display:flex;gap:6px;justify-content:flex-end}.snag-notice button{appearance:none;font:inherit;cursor:pointer;border-radius:calc(${A.radius} - 2px);padding:6px 12px;min-height:30px;border:0;transition:background ${A.motion}}.snag-notice-retry{background:${A.accent};color:${A.onAccent};font-weight:600}.snag-notice-dismiss{background:transparent;color:${A.muted}}.snag-notice-dismiss:hover{background:${A.hover};color:inherit}.snag-notice button:focus-visible{outline:2px solid ${A.focus};outline-offset:2px}`;function Sr(e,t){const n=e.ownerDocument??document,o=n.defaultView??window;rt(e,"notice",xr);const r=n.createElement("div");r.className="snag-notice",r.setAttribute("role","alert"),r.hidden=!0;const l=n.createElement("p"),u=n.createElement("div");u.className="snag-notice-actions";const a=n.createElement("button");a.type="button",a.className="snag-notice-dismiss",a.textContent=V("action.dismiss"),a.addEventListener("click",()=>C());const d=n.createElement("button");d.type="button",d.className="snag-notice-retry",u.append(a,d),r.append(l,u);let m;d.addEventListener("click",()=>{C(),m?.run()});let w=0;function C(){w&&o.cancelAnimationFrame(w),w=0,r.hidden=!0,r.remove()}return{show(p,P,F){m=P,d.hidden=!P,P&&(d.textContent=V(P.label)),r.hidden=!1,l.textContent="",(t??e).appendChild(r);const k=V(p,F);w&&o.cancelAnimationFrame(w),w=o.requestAnimationFrame(()=>{w=0,l.textContent=k})},hide:C,visible:()=>r.isConnected&&!r.hidden,destroy(){r.remove()}}}const Ar=` .snag-paused{border:0;padding:0;background:transparent;pointer-events:auto;max-width:min(420px,calc(100vw - 32px))}.snag-paused::backdrop{background:rgb(0 0 0 / .28)}.snag-paused-box{background:${A.bg};color:${A.fg};border:1px solid ${A.border};border-inline-start:3px solid ${A.accent};border-radius:${A.radius};box-shadow:${A.shadow};padding:14px 16px;font:400 13px/1.45 ${A.font};display:flex;flex-direction:column;gap:12px}.snag-paused p{margin:0}.snag-paused-actions{display:flex;justify-content:flex-end}.snag-paused button{appearance:none;font:inherit;cursor:pointer;border:0;font-weight:600;border-radius:calc(${A.radius} - 2px);padding:6px 14px;min-height:30px;background:${A.accent};color:${A.onAccent}}.snag-paused button:focus-visible{outline:2px solid ${A.focus};outline-offset:2px}`;function kr(e,t){const n=e.ownerDocument??document;rt(e,"paused",Ar);const o=n.createElement("dialog");o.className="snag-paused",o.setAttribute("aria-label",V("paused.dialog"));const r=n.createElement("div");r.className="snag-paused-box",r.setAttribute("role","status");const l=n.createElement("p");l.textContent=V("paused.dialog");const u=n.createElement("div");u.className="snag-paused-actions";const a=n.createElement("button");a.type="button",a.textContent=V("paused.close"),a.addEventListener("click",()=>w()),u.append(a),r.append(l,u),o.append(r);let d=!1;function m(){if(!d){(t??e).appendChild(o);try{o.showModal(),d=!0}catch{o.setAttribute("open",""),d=!0}}}function w(){if(d){d=!1;try{o.close()}catch{o.removeAttribute("open")}o.remove()}}return o.addEventListener("close",()=>{d=!1,o.remove()}),{show:m,hide:w,destroy(){w(),o.remove()}}}const $r=Symbol.for(bn.original),Wn=Symbol.for(bn.wrapped),at=()=>{};function Er(e,t,n){let o;try{o=e[t]}catch{return at}if(typeof o!="function"||o[Wn])return at;const r=o,l=n(r);let u=!1;const a=function(...d){return u?r.apply(this,d):l.apply(this,d)};try{const d=a;d[Wn]=!0,d[$r]=r,Object.defineProperty(a,"name",{value:r.name,configurable:!0}),Object.defineProperty(a,"length",{value:r.length,configurable:!0})}catch{}try{e[t]=a}catch{return at}return e[t]!==a?at:()=>{let d;try{d=e[t]}catch{d=void 0}if(d===a)try{e[t]=r;return}catch{}u=!0}}function Cr(e,t){const n=[];let o=0;const r=()=>{o||(o=e.requestAnimationFrame(()=>{o=0,t.onResize()}))};e.addEventListener("resize",r),n.push(()=>{o&&e.cancelAnimationFrame(o),e.removeEventListener("resize",r)}),e.visualViewport?.addEventListener("resize",r),n.push(()=>e.visualViewport?.removeEventListener("resize",r));const l=()=>void e.setTimeout(t.onResize,250);e.addEventListener("orientationchange",l),n.push(()=>e.removeEventListener("orientationchange",l));let u=e.location.pathname;const a=()=>{const z=e.location.pathname;z!==u&&(u=z,t.onRoute())},d=e.navigation;if(d){const z=()=>void e.setTimeout(a,0);d.addEventListener("navigatesuccess",z),n.push(()=>d.removeEventListener("navigatesuccess",z))}else for(const z of["pushState","replaceState"])n.push(Er(e.history,z,re=>function(...q){const G=re.apply(this,q);return e.setTimeout(a,0),G}));const m=e.document;let w=!0;try{m.documentElement.matches(":modal")}catch{w=!1}const C=()=>{const z=m.querySelectorAll("dialog[open]");if(!w)return z.length>0;for(const re of z)if(re.matches(":modal"))return!0;return!1};let p=!1;const P=()=>{const z=C();z!==p&&(p=z,t.onModal(z))};m.addEventListener("toggle",P,!0),n.push(()=>m.removeEventListener("toggle",P,!0));const F=new MutationObserver(P);F.observe(m.documentElement,{subtree:!0,attributes:!0,attributeFilter:["open"]}),n.push(()=>F.disconnect());const k=()=>void e.setTimeout(a,0);return e.addEventListener("popstate",k),n.push(()=>e.removeEventListener("popstate",k)),{destroy(){for(const z of n)z();n.length=0}}}function Tr(e,t){try{e.sessionStorage.setItem(ce.handoff,JSON.stringify({openThreadId:t}))}catch{}}function Rr(e){try{const t=e.sessionStorage.getItem(ce.handoff);if(t===null)return null;e.sessionStorage.removeItem(ce.handoff);const n=JSON.parse(t);return typeof n.openThreadId=="string"?n.openThreadId:null}catch{return null}}function _r(){return{statuses:[],read:"all",pageOnly:!1,newOnly:!1,sort:"page"}}const Ir=["open","progress","review","resolved"];function Pr(e,t,n){if(t.statuses.length>0&&Ir.includes(e.status)&&!t.statuses.includes(e.status)||t.by&&e.createdBy.id!==t.by||t.page&&e.route!==t.page)return!1;if(t.read!=="all"&&n){const o=Mr(e,n);if(t.read==="unread"&&!o||t.read==="read"&&o)return!1}return!0}function Mr(e,t){const n=t.get(e.id)??0;return Date.parse(e.updatedAt)>n}function zr(e,t,n){const o=e.visualViewport;let r=0;const l=()=>{if(r=0,!o)return;const a=o.offsetLeft,d=o.offsetTop;t.style.translate=a||d?`${a}px ${d}px`:"",t.style.width=`${o.width}px`,t.style.height=`${o.height}px`,n?.(o.scale)},u=()=>{r||(r=e.requestAnimationFrame(l))};return o?.addEventListener("resize",u,{passive:!0}),o?.addEventListener("scroll",u,{passive:!0}),u(),()=>{r&&e.cancelAnimationFrame(r),o?.removeEventListener("resize",u),o?.removeEventListener("scroll",u)}}const Or=/^eyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/,Dr=/^[a-f0-9]{32,}$/i,Lr=/^(?=[A-Za-z0-9_-]{24,}$)(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9_-]+$/,Nr="[redacted]";function Un(e){return e.includes("/")?e.split("/").map(t=>Or.test(t)||Dr.test(t)||Lr.test(t)?Nr:t).join("/"):e}const Hr=/\/index\.(html?|php)$/i;function Wr(e){if(!e.startsWith("/"))return e;let t=e.replace(Hr,"/");return t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t.toLowerCase()}function Ur(e){try{const t=e.querySelector(`meta[name="${Lo.route}"]`)?.getAttribute("content")?.trim();return!t||t.length>512||!t.startsWith("/")?null:t}catch{return null}}function jr(e,t){const n=t??Ur(e);return Wr(n??Un(e.location.pathname))}const Fr=[/^utm_/,/^(gclid|gbraid|wbraid|fbclid|msclkid|ttclid|twclid|igshid|yclid|li_fat_id)$/,/^(mc_cid|mc_eid|_hsenc|_hsmi|vero_id|oly_enc_id|oly_anon_id)$/,/^_vercel_/,/^__vercel_/,/^_rsc$/],Br=[...wt.query,...wt.fragment];function Zr(e,t=[]){return Br.includes(e)||t.includes(e)?!0:Fr.some(n=>n.test(e))}function Vr(e,t={}){const n=t.significantQueryParams??[];if(n!=="*"&&n.length===0)return;let o;try{o=new URLSearchParams(e)}catch{return}const r={};for(const[l,u]of o)Zr(l,t.ignoredQueryParams??[])||n!=="*"&&!n.includes(l)||(r[l]=u);return Object.keys(r).length>0?r:void 0}function Yr(e,t,n={}){const o=n.significantQueryParams??[];if(o==="*"){const r=e??{},l=t??{},u=new Set([...Object.keys(r),...Object.keys(l)]);for(const a of u)if(r[a]!==l[a])return!1;return!0}for(const r of o)if((e?.[r]??void 0)!==(t?.[r]??void 0))return!1;return!0}const Xr=120,Kr=1e3,Jr=200,qr=1e4;function Qr(e,t,n){const o=t.MutationObserver;if(typeof o!="function")return{destroy:()=>{}};let r=!1,l=null,u=!1,a=!1,d=0,m=C(),w=0;function C(){return t.performance?.now?.()??0}const p=new o(()=>{r=!0,d++,F()});function P(){const z=C();return z-m>=1e3&&(d>Jr&&(w=z+qr),d=0,m=z),z<w?Kr:Xr}function F(){l||(l=setTimeout(k,P()))}function k(){if(l=null,!!r){if(u){a=!0;return}r=!1,u=!0;try{n()}finally{u=!1,a&&(a=!1,r=!0,F())}}}return p.observe(e.documentElement,{childList:!0,subtree:!0}),{destroy(){p.disconnect(),l&&clearTimeout(l),l=null}}}const Gr="0.0.0",es={capture:Pe.capture,"anchor-ext":Pe.anchorExt,"anchor-fuzzy":Pe.anchorFuzzy,crumbs:Pe.crumbs,screenshot:Pe.screenshot,dock:Pe.dock,text:Pe.text},jn=new Map,Bt=new Map,Fn=new Map;function ts(e,t,n){const o=new URL(t,n.location.href).href,r=new URL(es[e],o);r.searchParams.set("cv",Gr);const l=Fn.get(e)??0;return l>0&&r.searchParams.set("r",String(l)),Fn.set(e,l+1),r.href}async function Me(e,t,n=document){const o=jn.get(e);if(o)return{ok:!0,mod:o};const r=Bt.get(e);if(r)return r;const l=(async()=>{for(let u=0;u<2;u++)try{const a=await import(ts(e,t,n));return jn.set(e,a),{ok:!0,mod:a}}catch{}return{ok:!1,reason:"unavailable"}})();Bt.set(e,l);try{return await l}finally{Bt.delete(e)}}const ns="composer",Zt=e=>ce.draft(e,ns),os=ce.draft("\0","").split("\0")[0];function rs(e){try{return e.body.trim()?(localStorage.setItem(Zt(e.route),JSON.stringify(e)),!0):(Bn(e.route),!0)}catch{return!1}}function ss(e){try{const t=localStorage.getItem(Zt(e));if(!t)return null;const n=JSON.parse(t);return!n||typeof n.body!="string"||!n.anchor||n.route!==e?null:n}catch{return null}}function Bn(e){try{localStorage.removeItem(Zt(e))}catch{}}function Vt(){try{for(let e=0;e<localStorage.length;e++){const t=localStorage.key(e);if(t&&t.startsWith(os))return!0}return!1}catch{return!1}}const as="http://www.w3.org/2000/svg";function ze(e,t,n,o=[]){const r=e.createElementNS(as,t);for(const l in n)r.setAttribute(l,n[l]);for(const l of o)r.appendChild(l);return r}const Yt=(e,t="16",n="16",o="0 0 16 16")=>({width:t,height:n,viewBox:o,fill:"none","aria-hidden":"true"}),is=e=>ze(e,"svg",Yt(),[ze(e,"path",{d:"M8 3v10M3 8h10",stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round"})]),cs=e=>ze(e,"svg",Yt(),[ze(e,"rect",{x:"2.25",y:"3.25",width:"11.5",height:"9.5",rx:"1.75",stroke:"currentColor","stroke-width":"1.5"}),ze(e,"path",{d:"M9.5 3.5v9",stroke:"currentColor","stroke-width":"1.5"})]),ls=e=>ze(e,"svg",{...Yt(e,"10","16","0 0 10 16"),fill:"currentColor"},[ze(e,"g",{fill:"currentColor"},[4,8,12].flatMap(t=>[3,7].map(n=>ze(e,"circle",{cx:String(n),cy:String(t),r:"1"}))))]),ds=` .snag-tb{position:fixed;z-index:${Ke.toolbar};display:flex;align-items:center;gap:2px;padding:4px;border-radius:calc(${A.radius} + 4px);background:${A.bg};color:${A.fg};box-shadow:${A.shadow};font:500 13px/1 ${A.font};pointer-events:auto;user-select:none;border:1px solid ${A.border}}.snag-tb{transition:inset-inline-end ${A.motion}}.snag-tb--fine{inset-inline-end:calc(20px + env(safe-area-inset-right) + var(${M.dockW},0px));inset-block-end:calc(20px + env(safe-area-inset-bottom));transition:inset-inline-end ${A.motion}}.snag-tb--coarse{inset-inline:0;inset-block-end:0;border-radius:14px 14px 0 0;padding:6px 10px calc(6px + env(safe-area-inset-bottom));justify-content:center;gap:4px;flex-direction:column}.snag-grabber{width:36px;height:4px;border-radius:2px;background:${A.muted};margin:2px auto 6px}.snag-row{display:flex;align-items:center;gap:2px}.snag-grip{display:flex;align-items:center;padding:0 4px;color:${A.muted};cursor:grab;touch-action:none}.snag-grip:active{cursor:grabbing}.snag-seg{display:flex;background:${A.surface};border-radius:${A.radius};padding:2px;position:relative}.snag-seg::before{content:"";position:absolute;inset-block:2px;inset-inline-start:var(${M.thumbX},0);width:var(${M.thumbW},0);background:${A.accent};border-radius:calc(${A.radius} - 2px);pointer-events:none;transition:inset-inline-start ${A.motion},width ${A.motion}}.snag-seg>.snag-b[aria-pressed="true"]{background:transparent;color:${A.onAccent}}.snag-seg>.snag-b{z-index:1}.snag-b{appearance:none;border:0;background:transparent;color:inherit;font:inherit;padding:6px 11px;border-radius:calc(${A.radius} - 2px);cursor:pointer;display:flex;align-items:center;gap:6px;position:relative;min-height:32px;transition:background ${A.motion}}.snag-b:hover:not(:disabled){background:color-mix(in srgb,currentColor 12%,transparent)}.snag-b:disabled{opacity:.4;cursor:not-allowed}.snag-b[aria-pressed="true"]{background:${A.accent};color:${A.onAccent}}.snag-b:focus-visible{outline:2px solid ${A.focus};outline-offset:2px}.snag-icon{padding:6px 9px}@media (pointer:coarse){.snag-b{min-height:44px;min-width:44px;padding:6px 14px}.snag-icon{padding:6px 14px}}.snag-puck .snag-row>:not([aria-expanded]){display:none}.snag-puck{padding:4px;border-radius:50%}.snag-puck [aria-expanded]{min-width:44px;min-height:44px;border-radius:50%}`;function us(e,t){const n=e.ownerDocument??document,o=t.coarsePointer??n.defaultView?.matchMedia?.("(pointer: coarse)").matches??!1;rt(e,"toolbar",ds);const r=n.createElement("div");r.className=`snag-tb ${o?"snag-tb--coarse":"snag-tb--fine"}`,r.setAttribute("role","toolbar"),r.setAttribute("aria-label",V("toolbar.aria"));const l=n.createElement("div");l.className="snag-grabber",l.setAttribute("aria-hidden","true");const u=n.createElement("div");u.className="snag-row";const a=n.createElement("span");a.className="snag-grip",a.setAttribute("aria-hidden","true"),a.appendChild(ls(n));const d=n.createElement("div");d.className="snag-seg",d.setAttribute("role","group"),d.setAttribute("aria-label",V("toolbar.group"));const m=(c,T,b)=>{const I=n.createElement("button");return I.type="button",I.className=`snag-b ${c}`,I.setAttribute("aria-label",T),typeof b=="string"?I.textContent=b:I.appendChild(b),I},w=m("",V("toolbar.browse"),V("toolbar.browse")),C=m("",V("toolbar.comments"),V("toolbar.comments")),p=m("snag-icon",V("toolbar.add"),is(n)),P=m("snag-icon",V("toolbar.panel"),cs(n));P.setAttribute("aria-expanded","false"),d.append(w,C),o||u.appendChild(a),u.append(d,p,P),o&&r.appendChild(l),r.appendChild(u),(t.parent??e).appendChild(r);const F=()=>{e.host.style.setProperty(M.tbH,`${r.offsetHeight}px`)};F();let k=null;function z(c,T){const b=n.defaultView,I=r.offsetWidth,L=r.offsetHeight,W=Zn(c,8,Math.max(8,b.innerWidth-I-8)),X=Zn(T,8,Math.max(8,b.innerHeight-L-8));k={left:W,top:X},r.style.left=`${W}px`,r.style.top=`${X}px`,r.style.right="auto",r.style.bottom="auto"}const re=()=>{F(),k&&z(k.left,k.top)},q=n.defaultView;if(q?.addEventListener("resize",re),w.addEventListener("click",()=>t.onState("browse")),C.addEventListener("click",()=>t.onState("comments")),p.addEventListener("click",()=>t.onState(G==="add"?"comments":"add")),P.addEventListener("click",()=>t.onPanel()),!o){let c=null;a.addEventListener("pointerdown",b=>{c={x:b.clientX,y:b.clientY,r:r.getBoundingClientRect()},a.setPointerCapture(b.pointerId),b.preventDefault()}),a.addEventListener("pointermove",b=>{c&&z(c.r.left+(b.clientX-c.x),c.r.top+(b.clientY-c.y))});const T=b=>{c=null,a.hasPointerCapture(b.pointerId)&&a.releasePointerCapture(b.pointerId)};a.addEventListener("pointerup",T),a.addEventListener("pointercancel",T)}let G="browse";function J(c){G=c,w.setAttribute("aria-pressed",String(c==="browse")),C.setAttribute("aria-pressed",String(c!=="browse")),p.setAttribute("aria-pressed",String(c==="add")),h()}function h(){const c=d.querySelector('.snag-b[aria-pressed="true"]'),T=d.getBoundingClientRect(),b=c?.getBoundingClientRect();if(!c||!b?.width){d.style.setProperty(M.thumbW,"0px");return}const I=n.defaultView?.getComputedStyle(d),L=I?.direction==="rtl",W=parseFloat((L?I?.paddingRight:I?.paddingLeft)??"0")||0,X=(L?T.right-b.right:b.left-T.left)-W;d.style.setProperty(M.thumbW,`${Math.round(b.width)}px`),d.style.setProperty(M.thumbX,`${Math.max(0,Math.round(X))}px`)}function g(c){p.disabled=c,c?p.title=V("error.panels.add"):p.removeAttribute("title")}function _(c){p.setAttribute("aria-label",V(c?"toolbar.add.draft":"toolbar.add"))}function O(c){C.setAttribute("aria-label",c!==null&&c>0?V("toolbar.comments.unresolved",{n:jo(c)}):V("toolbar.comments"))}J("browse"),O(0);function Z(c){r.classList.toggle("snag-puck",c),c||h()}function D(c){r.hidden=c,c||h(),F()}return{el:r,setState:J,setCount:O,setDegraded:g,setDraft:_,setPuck:Z,setConcealed:D,destroy(){q?.removeEventListener("resize",re),e.host.style.removeProperty(M.tbH),r.remove()}}}const Zn=(e,t,n)=>e<t?t:e>n?n:e,Vn=24;function fs(e,t){const n=e.innerHeight,o=t.querySelector(".snag-dk");if(!o)return{top:0,bottom:n};const r=o.getBoundingClientRect();return r.height>=n-1?{top:0,bottom:n}:{top:0,bottom:Math.max(0,r.top)}}function hs(e,t,n){const o=n.anchor.rect;if(!o)return;const r=n.anchor.offset??{fy:.5},l=o.y+o.h*r.fy,u=fs(e,t),a=l-e.scrollY;if(a>=u.top+Vn&&a<=u.bottom-Vn)return;const d=e.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;e.scrollTo({top:Math.max(0,l-(u.top+u.bottom)/2),behavior:d?"auto":"smooth"})}function Xt(){const e=new Uint8Array(16);crypto.getRandomValues(e);const t=Date.now();e[0]=Math.floor(t/2**40)&255,e[1]=Math.floor(t/2**32)&255,e[2]=Math.floor(t/2**24)&255,e[3]=Math.floor(t/2**16)&255,e[4]=Math.floor(t/2**8)&255,e[5]=t&255,e[6]=e[6]&15|112,e[8]=e[8]&63|128;const n=Array.from(e,o=>o.toString(16).padStart(2,"0")).join("");return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}const ps=()=>xt.thread+Xt(),Yn=()=>xt.comment+Xt(),ms=()=>xt.attachment+Xt(),gs={attachments:"direct",realtime:"none",anchorReports:!1,identity:["guest"],export:["json","md"],serverSideSearch:!1,privateThreads:!1,assignees:!1};function ys(){const e=ce.threads("probe","probe");try{return localStorage.setItem(e,"1"),localStorage.removeItem(e),!0}catch(t){return Xn(t)}}function bs(e,t,n){const o=ce.threads(e,t);function r(){let a=null;try{a=localStorage.getItem(o)}catch{return[]}if(!a)return[];try{const d=JSON.parse(a);return Array.isArray(d)?d.filter(ws):[]}catch{return[]}}function l(a){try{localStorage.setItem(o,JSON.stringify(a))}catch(d){if(!Xn(d))return;throw new Ht("local_quota_exceeded")}}const u=a=>({...a,updatedAt:new Date().toISOString()});return{kind:"local",capabilities:gs,async init(a){return{uid:a.uid,env:a.env,features:{screenshots:!0,uploads:!1}}},async listThreads(a={}){let d=r();return a.route!==void 0&&(d=d.filter(m=>m.route===a.route)),a.status?.length&&(d=d.filter(m=>a.status.includes(m.status))),{data:d,serverTime:new Date().toISOString()}},async getThread(a){return r().find(d=>d.id===a)??null},async createThread(a){const d=Rn(a);return l([...r(),d]),d},async patchThread(a,d){const m=r(),w=m.findIndex(F=>F.id===a);if(w<0)return null;const{assignee:C,...p}=d,P=u({...m[w],...vs(p)});return m[w]=P,l(m),P},async deleteThread(a){const d=r(),m=d.find(C=>C.id===a),w=d.filter(C=>C.id!==a);w.length!==d.length&&l(w);for(const C of m?.attachments??[])n?.del(C.id).catch(()=>{})},async uploadAttachment(a,d){if(!n)throw new Ht("attachments_unsupported");const m=ms();return await n.put(m,{blob:a,uid:e,env:t,kind:d.kind,...d.width!==void 0?{width:d.width}:{},...d.height!==void 0?{height:d.height}:{},createdAt:Date.now()}),{id:m,kind:d.kind,url:"",...d.width!==void 0?{width:d.width}:{},...d.height!==void 0?{height:d.height}:{},bytes:a.size,contentType:a.type}},async createComment(a,d){const m=r(),w=m.findIndex(p=>p.id===a);if(w<0)return null;const C={id:d.id,snagId:a,body:d.body,author:d.author,createdAt:new Date().toISOString()};return m[w]=u({...m[w],comments:[...m[w].comments,C]}),l(m),C},async patchComment(a,d){const m=r();for(let w=0;w<m.length;w++){const C=m[w].comments.find(P=>P.id===a);if(!C)continue;const p={...C,body:d};return m[w]=u({...m[w],comments:m[w].comments.map(P=>P.id===a?p:P)}),l(m),p}return null},async deleteComment(a){const d=r(),m=d.findIndex(w=>w.comments.some(C=>C.id===a));m<0||(d[m]=u({...d[m],comments:d[m].comments.filter(w=>w.id!==a)}),l(d))}}}function vs(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Xn(e){return e instanceof Error?e.name==="QuotaExceededError"||e.name==="NS_ERROR_DOM_QUOTA_REACHED"||e.code===22||e.code===1014:!1}function ws(e){if(typeof e!="object"||e===null)return!1;const t=e;return typeof t.id=="string"&&typeof t.key=="string"&&typeof t.route=="string"&&typeof t.anchor=="object"&&t.anchor!==null&&typeof t.anchor.label=="string"&&Array.isArray(t.comments)}function xs(e,t,n=()=>Date.now()){const o=ce.seen(e,t);let r=null;function l(){if(r)return r;try{const a=localStorage.getItem(o),d=a?JSON.parse(a):{};return r=typeof d=="object"&&d!==null&&!Array.isArray(d)?d:{}}catch{return r={}}}function u(a){r=a;try{localStorage.setItem(o,JSON.stringify(a))}catch{}}return{map:()=>new Map(Object.entries(l())),mark(a){u({...l(),[a]:n()})},markAll(a){const d=n(),m={...l()};for(const w of a)m[w.id]=d;u(m)}}}function it(){let e=null;try{e=localStorage.getItem(Dt)}catch{return{}}if(!e)return{};if(e[0]!=="{")return{name:e};try{const t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function Kn(e){try{localStorage.setItem(Dt,JSON.stringify(e))}catch{}}function Kt(){const e=it();return{name:typeof e.name=="string"?e.name:"",...e.email?{email:e.email}:{}}}function Jn(e){return it().projects?.[e]?.holderId}function Ss(e){const t=it().projects?.[e]?.holderSecret;return t&&/^[\w-]{43}$/.test(t)?t:void 0}function As(e,t,n){const o=it();Kn({...o,projects:{...o.projects,[e]:{holderId:t,holderSecret:n}}})}function ks(e,t){const n=it(),o=n.projects?.[e];o&&Kn({...n,projects:{...n.projects,[e]:{...o,holderId:t}}})}const je=e=>ce.session(e);function qn(e){if(!e)return null;const t=JSON.parse(e);return typeof t?.token=="string"&&typeof t?.refreshableUntil=="number"?t:null}function Je(e){try{const t=qn(sessionStorage.getItem(je(e)));if(t)return t;const n=qn(localStorage.getItem(je(e)));return n?.member?n:null}catch{return null}}function Jt(e,t){try{t.member?(localStorage.setItem(je(e),JSON.stringify(t)),sessionStorage.removeItem(je(e))):sessionStorage.setItem(je(e),JSON.stringify(t))}catch{}}function ct(e){try{sessionStorage.removeItem(je(e)),localStorage.removeItem(je(e))}catch{}}const $s=(e,t=Date.now())=>t>e.expiresAt-3e4,qt=(e,t=Date.now())=>t>=e.refreshableUntil;class Fe extends Error{code;status;constructor(t,n,o){super(o),this.name="HttpAdapterError",this.status=t,this.code=n}}function Es(e){const{offset:t,testId:n,domId:o,page:r,schemaVersion:l,...u}=e;return{...u,...n?{testid:n}:{},...o?{domid:o}:{},...t?{offset:{fx:t.x,fy:t.y}}:{}}}function Cs(e,t){const n=e.url??"",o=/^https?:/i.test(n)?n:n?`${t}${n.startsWith("/")?"":"/"}${n}`:`${t}/api/v1/attachments/${encodeURIComponent(e.id)}/blob`;return{...e,url:o}}function kt(e,t,n){return{id:e.id,route:e.anchor?.page?.route??"",key:e.key,status:e.status,anchor:Es(e.anchor),anchorState:e.anchorState,context:e.context,comments:e.comments??[],createdBy:e.createdBy,assignee:e.assignee??null,createdAt:e.createdAt,updatedAt:e.updatedAt,...e.resolvedAt?{resolvedAt:e.resolvedAt}:{},...e.attachments?.length?{attachments:e.attachments.map(o=>Cs(o,n))}:{},...t?{scope:{environment:t}}:{}}}function Ts(e,t){const{offset:n,testid:o,domid:r,...l}=e;return{...l,schemaVersion:gn,...o?{testId:o}:{},...r?{domId:r}:{},offset:n?{x:n.fx,y:n.fy}:{x:.5,y:.5},page:{route:t,pathname:location.pathname,origin:location.origin}}}function Rs(e,t){const n=o=>/^[\d.]+$|:/.test(o)?o:o.split(".").slice(-2).join(".");return n(e)===n(t)}const Qn=10*6e4;function _s(e,t,n,o={}){const r=e.replace(/\/+$/,""),l=`${r}/api/v1/projects/${encodeURIComponent(t)}`;let u=o.reviewToken,a=Je(t),d=[];const m=ce.silent(t);let w=0,C=Promise.resolve(!1);function p(){if(u||Date.now()-w<Qn)return C;try{if(!Rs(location.hostname,new URL(r).hostname)||localStorage.getItem(m)||Date.now()-Number(sessionStorage.getItem(m))<Qn)return C}catch{}return w=Date.now(),C=(async()=>{try{const h=await fetch(`${l}/sessions/member/silent`,{method:"POST",credentials:"include",...n?{body:JSON.stringify({environment:n})}:{}});if(h.status===201)return F(await h.json()),w=0,!0}catch{}try{sessionStorage.setItem(m,String(Date.now()))}catch{}return!1})()}let P=null;function F(h){a={token:h.sessionToken,expiresAt:Date.parse(h.expiresAt),refreshableUntil:Date.parse(h.refreshableUntil),reviewerId:h.reviewer.id,permissions:h.permissions,member:h.reviewer.name,...h.moderator?{moderator:!0}:{}},Jt(t,a),o.onSessionStarted?.()}const k=()=>a;async function z(h=!1){const g=a&&!qt(a)?a.token:null,_=!!g&&!u&&!h,O=_?void 0:u?{kind:"link",token:u,name:Kt().name||void 0}:{kind:"guest",name:Kt().name||"Anonymous",holderId:Jn(t),holderSecret:Ss(t)};let Z;try{Z=await fetch(`${l}/sessions`,{method:"POST",credentials:"omit",headers:{"content-type":"application/json",...g?{Authorization:`Bearer ${g}`}:{}},body:JSON.stringify({...n?{environment:n}:{},...O?{identity:O}:{},client:{widget:Co,schema:gn}})})}catch(T){throw new Fe(0,"network_error",T.message)}finally{u=void 0}if(!Z.ok){const b=(await Z.json().catch(()=>null))?.error?.code??"unauthorized",I=_&&!!a?.member;if(ct(t),a=null,I&&Z.status===401&&await p())return k();throw b==="session_revoked"||b==="token_revoked"?o.onSessionEnded?.("revoked"):Z.status===401&&o.onSessionEnded?.("expired"),new Fe(Z.status,b,"This review session is not valid.")}const D=await Z.json();D.holderSecret&&D.reviewer?As(t,D.reviewer.id,D.holderSecret):D.reviewer&&ks(t,D.reviewer.id);const c=D.round?.number??(_||h?a?.round:void 0);return a={token:D.sessionToken,expiresAt:Date.parse(D.expiresAt),refreshableUntil:Date.parse(D.refreshableUntil),reviewerId:D.reviewer?.id??a?.reviewerId??"",permissions:D.permissions??a?.permissions??[],...c!==void 0?{round:c}:{},..._&&a?.member?{member:a.member}:{},..._&&a?.member&&a.moderator?{moderator:!0}:{}},Jt(t,a),O&&(q=O.name??null),o.onSessionStarted?.(),a}async function re(){if(a){if(qt(a)){ct(t),a=null,await p()||o.onSessionEnded?.("expired");return}await z().catch(()=>{})}}let q=null;async function G(){if(await(P??=a?.member?Promise.resolve():p()),a&&qt(a)&&(ct(t),a=null,q=null,!await p()))return o.onSessionEnded?.("expired"),null;const h=Kt().name||null,g=a!==null&&!a.member&&h!==null&&h!==q;if(!a||$s(a)||u||g)try{await z(g)}catch(_){if(!(_ instanceof Fe)||_.status===0)throw _;return null}return a?.token??null}async function J(h,g,_=!1){const O=await G();let Z;try{Z=await fetch(l+h,{...g,headers:{"content-type":"application/json",...O?{Authorization:`Bearer ${O}`}:{},...g?.headers??{}},credentials:"omit"})}catch(D){throw new Fe(0,"network_error",D.message)}if(!Z.ok){const D=await Z.json().catch(()=>null),c=D?.error?.code??"http_error";if(Z.status===401&&!_&&c!=="session_revoked"){const T=!!a?.member;return ct(t),a=null,T&&await p(),J(h,g,!0)}throw new Fe(Z.status,c,D?.error?.message??`The server answered ${Z.status}.`)}return await Z.json()}return{kind:"http",capabilities:{attachments:"none",realtime:"none",anchorReports:!0,identity:["guest"],export:[],serverSideSearch:!1,privateThreads:!1,assignees:!0},async init(h){const g=await J("/config");return this.capabilities.attachments=g.features.screenshots?"direct":"none",d=g.rounds??[],{uid:h.uid,env:h.env,features:g.features,...g.rounds?{rounds:g.rounds}:{},...g.writable===void 0?{}:{writable:g.writable},...g.reason===void 0?{}:{reason:g.reason}}},async reportAnchors(h){if(h.length!==0)for(let g=0;g<h.length;g+=50)try{await J("/anchor-reports",{method:"POST",body:JSON.stringify({reports:h.slice(g,g+50)})})}catch{return}},revalidate:re,member:()=>a?.member??null,adoptSession(h){try{localStorage.removeItem(m)}catch{}F(h)},signOut(){ct(t),a=null,q=null;try{localStorage.setItem(m,"out")}catch{}},getRound(){return a?.round??Je(t)?.round??null},setRound(h){a&&(a={...a,round:h});const g=Je(t);g&&Jt(t,{...g,round:h})},async fetchForeignImage(h){try{const g=await G(),_=await fetch(`${l}/image?src=${encodeURIComponent(h)}`,{credentials:"omit",...g?{headers:{Authorization:`Bearer ${g}`}}:{}});if(!_.ok)return null;const O=await _.blob();return O.type.startsWith("image/")?O:null}catch{return null}},async uploadAttachment(h,g){const _=await G(),O=await fetch(`${l}/attachments`,{method:"POST",credentials:"omit",headers:{"content-type":h.type||"image/webp",[Lt.attachmentKind]:g.kind,...g.width?{[Lt.attachmentWidth]:String(g.width)}:{},...g.height?{[Lt.attachmentHeight]:String(g.height)}:{},..._?{Authorization:`Bearer ${_}`}:{}},body:h});if(!O.ok){const D=await O.json().catch(()=>null);throw new Fe(O.status,D?.error?.code??"upload_failed",D?.error?.message??"Upload failed.")}const Z=await O.json();return{id:Z.id,kind:g.kind,contentType:Z.contentType,byteSize:Z.byteSize,...g.width?{width:g.width}:{},...g.height?{height:g.height}:{},url:`${r}/api/v1/attachments/${Z.id}/blob`}},async listThreads(h){await G();const g=new URLSearchParams;n&&g.set("env",n),h?.route&&g.set("route",h.route),a?.round&&g.set("round",String(a.round));const _=await J(`/threads?${g}`);return{data:_.data.map(O=>kt(O,n,r)),..._.nextCursor?{nextCursor:_.nextCursor}:{},deleted:[],serverTime:_.serverTime}},async getThread(h){return(await this.listThreads()).data.find(_=>_.id===h)??null},async getThreadByKey(h){const g=new URLSearchParams({key:h});n&&g.set("env",n);const O=(await J(`/threads?${g}`)).data[0];return O?kt(O,n,r):null},async createThread(h){const g=a?.round,_=d.some(D=>D.number===g&&!D.closed)?g:void 0,O=D=>J("/threads",{method:"POST",body:JSON.stringify({id:h.id,anchor:Ts(h.anchor,h.route),anchorState:h.anchorState,context:h.context,...n||D?{scope:{...n?{environment:n}:{},...D?{round:D}:{}}}:{},createdBy:{name:h.createdBy.name},...h.comment?{comment:{id:h.comment.id,body:h.comment.body}}:{},...h.attachments?.length?{attachments:h.attachments.map(c=>c.id)}:{}})}),Z=await O(_).catch(D=>{if(_&&D instanceof Fe&&D.code.startsWith("round_"))return O();throw D});return kt(Z,n,r)},async patchThread(h,g){const _="assignee"in g;if(!g.status&&!_)return null;const O=await J(`/threads/${encodeURIComponent(h)}`,{method:"PATCH",body:JSON.stringify({...g.status?{status:g.status}:{},..._?{assignee:g.assignee??null}:{}})});return kt(O,n,r)},async listAssignees(h){return(await J(`/assignees${h?`?q=${encodeURIComponent(h)}`:""}`)).data??[]},async deleteThread(h){await J(`/threads/${encodeURIComponent(h)}`,{method:"DELETE"})},isMine(h){return h.id?h.id===(a??Je(t))?.reviewerId||h.id===Jn(t):!1},canModerate(){const h=a??Je(t);return!!h?.member&&!!h.moderator},can(h){return(a??Je(t))?.permissions.includes(h)??!1},async createComment(h,g){const _=await J(`/threads/${encodeURIComponent(h)}/comments`,{method:"POST",body:JSON.stringify({id:g.id,body:g.body})});return{id:_.id,snagId:h,body:_.body,author:_.author,createdAt:_.createdAt}},async patchComment(h,g){return await J(`/comments/${encodeURIComponent(h)}`,{method:"PATCH",body:JSON.stringify({body:g})}),null},async deleteComment(h){await J(`/comments/${encodeURIComponent(h)}`,{method:"DELETE"})}}}async function Is(e,t){if(e.url&&/^https?:/i.test(e.url))try{const n=await fetch(e.url,{credentials:"omit"});if(!n.ok)return null;const o=await n.blob();return o.type&&!o.type.startsWith("image/")?null:o}catch{return null}return t(e.id)}const Ps=64,Ms=4096,zs=e=>ce.counts(e),Os=e=>e.filter(t=>t.status!=="resolved").length;function Ds(e,t,n){const o=new Map;for(const a of t){const d=o.get(a.route)??{n:0,seen:""};a.status!=="resolved"&&d.n++,a.updatedAt>d.seen&&(d.seen=a.updatedAt),o.set(a.route,d)}o.has(n)||o.set(n,{n:0,seen:new Date().toISOString()});const l=[...o.entries()].sort((a,d)=>d[1].seen.localeCompare(a[1].seen)).slice(0,Ps);l.some(([a])=>a===n)||(l[l.length-1]=[n,o.get(n)]);let u={v:1,p:Os(t),r:Object.fromEntries(l.map(([a,d])=>[a,d.n])),t:new Date().toISOString()};JSON.stringify(u).length>Ms&&(u={...u,r:{}});try{localStorage.setItem(zs(e),JSON.stringify(u))}catch{return null}return u}function Ls(e,t){return e?.r[t]??0}const Ns="pass(?:word|wd)?|pwd|secret|token|api[_-]?key|apikey|auth(?:orization)?|credential|session|sid|cookie|jwt|bearer|otp|mfa|totp|cvv|cvc|ssn|nino|iban|card(?:[_-]?number)?|account[_-]?number|private[_-]?key|signature|client[_-]?secret|refresh[_-]?token|access[_-]?token",Hs=new RegExp(`(["'\`]?)(?<![A-Za-z0-9])(?:${Ns})[\\w-]*\\b\\1?\\s*[:=]\\s*(?:(["'\`])((?:\\\\.|(?!\\2)[^\\\\])*)\\2|([^\\s,;&}\\])]{3,}))`,"gi"),Ws=/^(?:Bearer|Basic|Digest|Negotiate|Token)$/i,Us=(e,t,n,o,r,l,u)=>{if(!n&&Ws.test(r)&&u.slice(l+e.length).startsWith(" [redacted]")||(n?o:r).startsWith("[redacted"))return e;const a=n?`${n}${o}${n}`:r;return e.slice(0,e.length-a.length)+(n?`${n}[redacted]${n}`:"[redacted]")},Gn=/data:[a-z0-9.+-]*\/?[a-z0-9.+-]*;base64,[A-Za-z0-9+/=]{16,}/gi,eo=/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{0,}/g,to=/\b(sk-[A-Za-z0-9]+-[A-Za-z0-9_-]{20,}|sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9]{20,}|(sk|pk|rk)_(live|test)_[A-Za-z0-9]{16,}|gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|glpat-[A-Za-z0-9_-]{16,}|xox[baprs]-[A-Za-z0-9-]{10,}|xapp-[A-Za-z0-9-]{10,}|AKIA[0-9A-Z]{16}|ASIA[0-9A-Z]{16}|AIza[0-9A-Za-z_-]{35}|ya29\.[A-Za-z0-9_-]{20,}|SG\.[A-Za-z0-9_-]{20,}|npm_[A-Za-z0-9]{30,}|dop_v1_[a-f0-9]{40,}|shpat_[a-f0-9]{30,}|sbp_[a-f0-9]{30,}|hf_[A-Za-z0-9]{30,}|nvapi-[A-Za-z0-9_-]{20,})\b/g,js=/\b(Bearer|Basic|Digest|Negotiate|Token)\s+[A-Za-z0-9._~+/=-]{8,}/gi,no=/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z]{2,24})+\b/g,Qt=/\b(?:\d[ -]?){12,18}\d\b/g,oo=/\b(?=[A-Za-z0-9+/]*[a-z])(?=[A-Za-z0-9+/]*[A-Z])(?=[A-Za-z0-9+/]*\d)[A-Za-z0-9+/]{40,}={0,2}\b/g,ro=/\b[0-9a-f]{32,}\b/gi,so=/\b(?=[A-Za-z0-9_-]*[a-z])(?=[A-Za-z0-9_-]*[A-Z])(?=[A-Za-z0-9_-]*\d)[A-Za-z0-9_-]{40,}\b/g,ao=/\b[a-z][a-z0-9]{1,15}(?:_[a-z0-9]{1,15}){0,2}_(?=[A-Za-z0-9_-]*[A-Z])(?=[A-Za-z0-9_-]*\d)[A-Za-z0-9_-]{24,}\b/g,io=/\b[a-z][a-z0-9+.-]*:\/\/[^\s/:@]+:[^\s/@]+@/gi,Fs=/^(?=[A-Za-z0-9_~.+/=-]*[a-z])(?=[A-Za-z0-9_~.+/=-]*[A-Z])(?=[A-Za-z0-9_~.+/=-]*\d)[A-Za-z0-9_~.+/=-]{24,}$/;function Te(e,t){e.lastIndex=0;const n=e.test(t);return e.lastIndex=0,n}function co(e){const t=e.replace(/[ -]/g,"");if(t.length<13||t.length>19)return!1;let n=0,o=!1;for(let r=t.length-1;r>=0;r--){let l=t.charCodeAt(r)-48;o&&(l*=2,l>9&&(l-=9)),n+=l,o=!o}return n%10===0}function Bs(e){Qt.lastIndex=0;for(const t of e.matchAll(Qt))if(co(t[0]))return!0;return!1}function $t(e){let t=e;return t=t.replace(Gn,"data:[redacted]"),t=t.replace(js,"$1 [redacted]"),t=t.replace(Hs,Us),t=t.replace(eo,"[redacted:jwt]"),t=t.replace(to,"[redacted:key]"),t=t.replace(ao,"[redacted:key]"),t=t.replace(io,"[redacted:url-cred]@"),t=t.replace(no,"[redacted:email]"),t=t.replace(Qt,n=>co(n)?"[redacted:card]":n),t=t.replace(so,n=>`[redacted:b64:${n.length}]`),t=t.replace(oo,n=>`[redacted:b64:${n.length}]`),t=t.replace(ro,n=>`[redacted:hex:${n.length}]`),t}const Zs=wt.query,Vs=wt.fragment;function Ys(e,t=[]){let n;try{const o=globalThis.location?.href;n=new URL(e,o)}catch{return $t(e)}n.username="",n.password="";for(const o of[...n.searchParams.keys()]){if(Vs.includes(o)){n.searchParams.set(o,"[redacted]");continue}if(Zs.includes(o))continue;if(!t.includes(o)){n.searchParams.set(o,"[redacted]");continue}const r=n.searchParams.get(o)??"";$t(r)!==r&&n.searchParams.set(o,"[redacted]")}return n.hash&&n.hash.length>1&&(n.hash=t.includes("#")?n.hash:"#[redacted]"),$t(n.toString().replace(/%5Bredacted%5D/gi,"[redacted]"))}function Xs(e){return e.length>120?!0:Te(no,e)||Te(eo,e)||Te(to,e)||Te(ro,e)||Te(oo,e)||Te(Gn,e)||Te(so,e)||Te(ao,e)||Te(io,e)||Fs.test(e)||Bs(e)}const Et={id:"rev_local",name:V("author.unknown"),kind:"guest"},Ks="0.0.0";function lo(e,t){if(e)return{...Et,name:e,...t?{email:t}:{}};try{const n=localStorage.getItem(ce.identity);if(n)return{...Et,name:n[0]==="{"?JSON.parse(n).name??Et.name:n}}catch{}return Et}function Js(e){return`SN-${e.reduce((n,o)=>{const r=Number(o.key.split("-")[1]??0);return Number.isFinite(r)&&r>n?r:n},0)+1}`}let Gt=null;const we=e=>jr(e,Gt);function qs(e,t){const n=xn(),o=n.ownerDocument??document,r=o.defaultView??window,l=t?.config?.site??"local",u=t?.emit??(()=>{}),a=t?.assetBase??"./",d=t?.config?.env??"default";rt(n,"tokens",Zo);const m=Yo(n.host,Vo(t?.config?.theme)),w={},C=t?.config?.storage==="local"?void 0:t?.config?.host,p=C&&l!=="local"?_s(C,l,t?.config?.env,{reviewToken:t?.reviewToken,onSessionEnded:s=>{ie.show(s==="revoked"?"error.linkrevoked":"error.sessionended")},onSessionStarted:()=>ie.hide()}):bs(l,d,{put:(s,i)=>w.put(s,i),del:s=>w.del(s)}),P=xs(l,d);let F=null;p.init({uid:l,env:d}).then(s=>{F=s.rounds??null,X?.update(x()),s.writable===!1&&s.reason==="origin_not_allowed"&&ie.show("error.origin",void 0,{origin:location.origin})}).catch(()=>{});let k=[],z=[];const re=ys();let q=null,G=null,J=!1,h=!1,g=!1,_=null,O=!1;const Z={get:()=>q,unavailable:()=>h||g,newPass:()=>G?.createPassCaches(),fuzzyHit:s=>_?.hit(s)??null,wantFuzzy:(s,i)=>{if(_){_.enqueue(s,i,()=>oe());return}O||!G||!i.text?.exact||i.text.exact.length<8||(O=!0,Me("anchor-fuzzy",a,o).then(f=>{if(!f.ok||!G){g=!0,oe();return}_=f.mod.createFuzzyEngine(o,G.fuzzyDeps),Ee()}))},want:s=>{J||!(s.role&&s.accessibleName)&&!s.text?.exact&&!s.path?.length||(J=!0,Me("anchor-ext",a,o).then(i=>{if(!i.ok){h=!0,oe();return}G=i.mod,q=i.mod.resolveExtended,Ee()}))}};let D=null,c=_r();const T=()=>c.statuses.length>0||!!c.by||!!c.page||c.read!=="all",b=wr(n,s=>{if(L==="add"){if(W?.hasText()){W.pulse();return}W?.close(),W=null,pe("comments")}v(s.id)},Z,s=>{D=s,X?X.update(x()):v()});let L=(()=>{try{return sessionStorage.getItem(ce.mode)==="comments"?"comments":"browse"}catch{return"browse"}})(),W=null,X=null,se=null,Be=!1,xe=null,Ze=!1,Ct=null,Re=null,Se=null,Oe=!1;function fe(){return Se?Promise.resolve(Se):Oe?Promise.resolve(null):Me("capture",a,o).then(i=>i.ok?(w.put=i.mod.putBlob,w.del=i.mod.deleteBlob,Se=i.mod):(qe(new Error("chunk unavailable")),null))}function qe(s){Oe||(Oe=!0,L==="add"&&pe("comments"),te.setDegraded(!0),ie.show("error.capture",{label:"action.retry",run:()=>{Oe=!1,te.setDegraded(!1),fe()}}),console.warn(`[${ve}] the capture chunk failed to load`,s))}let Qe=0;function De(){const s=new URL(a,o.location.href).href,i=new URL(Pe.panels,s);return i.searchParams.set("cv",Ks),Qe>0&&i.searchParams.set("r",String(Qe)),Qe++,import(i.href)}async function Ae(){if(Ze)return null;if(xe)return xe.catch(()=>null);xe=De().catch(async()=>(await new Promise(s=>setTimeout(s,1e3)),De()));try{return Ct=await xe}catch(s){return xe=null,lt(s),null}}function lt(s){Ze=!0,L==="add"&&pe("comments"),te.setDegraded(!0),ie.show("error.panels",{label:"action.retry",run:()=>{Ze=!1,te.setDegraded(!1),v(se)}}),console.warn(`[${ve}] the panels chunk failed to load`,s)}const ke=o.defaultView?.matchMedia?.("(pointer: coarse)").matches??!1;let le=null;async function Tt(){if(le)return;const s=await fe();!s||le||(le=s.createAddChrome(n,ke,{pick:(i,f)=>void $(i,f),announce:et}),le.setActive(L==="add"))}const he=o.createElement("div");he.style.cssText=`position:fixed;left:0;top:0;pointer-events:none;z-index:${Ke.dock}`,n.appendChild(he);const dt=zr(r,he,s=>te.setPuck(s>1.2)),ie=Sr(n,he),Ve=kr(n,he),S=tr(n,{onPick:(s,i)=>void $(s,i),onHover:s=>s?le?.show(s):le?.clear(),onSelectStart:()=>{ke||rn()}});async function $(s,i){if(W?.hasText()){W.pulse();return}W?.close();const[f,R]=await Promise.all([Ae(),fe()]);if(!f||!R)return;const B=R.captureContext({page:R.derivePageRef(o.location,mt()),...yt()});mn(s);const K=R.deriveAnchorLabel(s);y(f,s,i,B,K,R)}function y(s,i,f,R,B,K,Y,We){let be=i;gt=!1;const me=we(o);Pt=!1;const bt=()=>{W=null,Bn(me),te.setDraft(Vt()),pe("comments")},ot=()=>{nt?.abort(),He=nt=null,bt()},ge=F?.find(ue=>ue.number===p.getRound?.())?.closed?F.find(ue=>!ue.closed):void 0,Ue={at:f,label:B,...Y?{initialBody:Y.body,initialName:Y.author,...Y.email?{initialEmail:Y.email}:{}}:{},onDraft:(ue,Ie,vt)=>{const Eo=rs({route:me,body:ue,author:Ie,...vt?{email:vt}:{},label:B,anchor:We??K.createElementAnchor(i,{point:f,viewportWidth:r.innerWidth,label:B,...K.describeElement(i)}),at:{x:f.x+r.scrollX,y:f.y+r.scrollY},savedAt:new Date().toISOString()});te.setDraft(Vt()),!Eo&&!Pt&&(Pt=!0,ln())},onSend:(ue,Ie,vt)=>{bt(),ge&&p.setRound(ge.number),dn(be,f,R,ue,Ie,vt,We).then(()=>ge&&Ee())},onRetarget:ue=>{const Ie=ue==="up"?K.widen(be):K.narrow(be);Ie&&(be=Ie,le?.show(Ie),W?.setLabel(K.deriveAnchorLabel(Ie)))},...de&&tt!==!1?{onShotOptIn:ue=>gt=ue}:{},onCancel:ot,crumbsOn:pn!==!1,shotsOn:tt!==!1,...C&&l!=="local"?{serverHost:new URL(C).host}:{},...C&&p.adoptSession?{studio:{host:C,uid:l,env:t?.config?.env,member:p.member(),adopt:ue=>p.adoptSession(ue),signOut:()=>p.signOut()}}:{},...We?.text?.exact?{quote:We.text.exact}:{},...ge?{roundNote:ge.name}:{}};W=s.openComposer(n,Ue,he),ne()}async function U(){const s=we(o),i=ss(s);if(te.setDraft(Vt()),!i||W)return;const[f,R]=await Promise.all([Ae(),fe()]);if(!f||!R)return;const B=Ft(i.anchor,o,{viewportWidth:r.innerWidth,...q?{extended:q}:{}});if(!B.element)return;const K=B.element.getBoundingClientRect();if(K.width===0&&K.height===0)return;const Y={x:i.at.x-r.scrollX,y:i.at.y-r.scrollY};pe("add"),y(f,B.element,Y,R.captureContext({page:R.derivePageRef(o.location,mt()),...yt()}),i.label,R,{body:i.body,author:i.author,...i.email?{email:i.email}:{}})}async function v(s=null){if(s&&s!==se&&u("thread:open",{threadId:s}),s&&P.mark(s),se=s,Be=!0,L==="browse"&&pe("comments"),X){X.update(x());return}if(!await Ae())return;const f=await Me("dock",a,o);if(!f.ok){ie.show("error.panels",{label:"action.retry",run:()=>void v(se)});return}!Be||X||(Re=f.mod,X=f.mod.openDock(n,x(),he),ne())}function N(){P.markAll(k),c.newOnly&&(c={...c,newOnly:!1}),Be=!1,X?.close(),X=null,se=null,b.highlight(null),ne(),T()&&oe()}function E(s){const i=s?k.find(f=>f.id===s):void 0;if(i&&i.route!==we(o)){Tr(r,i.id),r.location.assign(i.route);return}s&&P.mark(s),se=s,b.highlight(null),T()?oe():X?.update(x()),i&&Re?.scrollToSnag(r,n,i)}function x(){return{snags:k,route:we(o),openId:se,seenAt:P.map(),onOpen:E,onStatus:(s,i)=>void po(s,i),onReply:(s,i,f)=>void go(s,i,f),onEdit:(s,i)=>void Q(s,i),onDeleteComment:s=>void H(s),onDeleteThread:s=>void j(s),...p.isMine?{isMine:s=>p.isMine(s)}:{},...C&&p.adoptSession?{studio:{host:C,uid:l,env:t?.config?.env,member:p.member(),adopt:s=>p.adoptSession(s),signOut:()=>p.signOut()}}:{},canDeleteOwnThread:p.can?p.can("thread:delete:own"):!0,canModerate:p.canModerate?.()??!1,...p.listAssignees&&p.can?.("thread:assign")?{assignees:()=>p.listAssignees(),onAssign:(s,i)=>void mo(s,i)}:{},onClearAll:()=>void ee(),onClose:N,onExport:It,onHover:s=>b.highlight(s),...F&&F.length>1&&p.setRound?{rounds:F,activeRound:p.getRound?.()??F.find(s=>!s.closed)?.number??F[0].number,onRound:s=>{p.setRound(s),Ee()}}:{},onAnnounce:et,loadShot:s=>Is(s,async i=>{const f=await fe();return f?(await f.getBlob(i))?.blob??null:null}),filter:c,onFilter:s=>{const i=s.statuses.join()!==c.statuses.join()||s.by!==c.by||s.page!==c.page||s.read!==c.read;c=s,i?oe():X?.update(x())},...D?{clusterFilter:D}:{},onClusterClear:()=>{D=null,X?.update(x())},onShowAnyway:s=>{b.showGhost(s),Re?.scrollToSnag(r,n,s)}}}async function ae(s,i){const f=k;k=s,oe();try{await _e(i)}catch{k=f,oe(),ie.show("error.sendfailed",void 0,{item:"change"})}}async function Q(s,i){await ae(k.map(f=>({...f,comments:f.comments.map(R=>R.id===s?{...R,body:i}:R)})),()=>p.patchComment(s,i))}async function H(s){await ae(k.map(i=>({...i,comments:i.comments.filter(f=>f.id!==s)})),()=>p.deleteComment(s))}async function j(s){const i=se;se===s&&(se=null),await ae(k.filter(f=>f.id!==s),()=>p.deleteThread(s)),k.some(f=>f.id===s)&&(se=i)}async function ee(){const s=k.map(i=>i.id);k=[],se=null,oe(),await Promise.all(s.map(i=>_e(()=>p.deleteThread(i))))}const te=us(n,{onState:s=>pe(s),onPanel:()=>X?N():void v(),onNav:s=>nn(s),parent:he}),de=r.matchMedia?.("(pointer: coarse)").matches??!1,ne=()=>{de&&te.setConcealed(!!W||!!X)};let ye=null,Le=[];function ut(s){let i=!1;const f=()=>{i||(i=!0,r.removeEventListener("scrollend",f),s())};r.addEventListener("scrollend",f,{once:!0}),r.setTimeout(f,600)}const Ge=o.createElement("div");Ge.setAttribute("aria-live","polite"),Ge.setAttribute("role","status");const en="position:absolute;width:1px;height:1px;overflow:hidden";Ge.style.cssText=en;const Rt=o.createElement("div");Rt.setAttribute("aria-live","assertive"),Rt.style.cssText=en,n.append(Ge,Rt);let tn=0;function et(s){r.clearTimeout(tn),tn=r.setTimeout(()=>{Ge.textContent=s},400)}function nn(s){const i=Le.length;if(i===0)return;ye=ye===null?s===1?0:i-1:(ye+s+i)%i;const f=Le[ye];hs(r,n,f);const R=ye+1;ut(()=>{b.pulse(f.id),et(V("nav.announce",{n:R,label:f.anchor.label,i:R,total:i}))})}function on(){if(L!=="comments"||ke){$e?.disarm();return}rn().then(s=>{s&&L==="comments"&&s.arm()})}let $e=null,_t=null;async function rn(){if($e)return $e;const s=await Me("text",a,o);return!s.ok||$e||(_t=s.mod,$e=s.mod.createSelectionWatcher(n,{onQuote:(i,f)=>void uo(i,f)})),$e}async function uo(s,i){const f=Se??await fe();if(!f||!_t)return;const R=_t.createTextAnchor(s,f,{viewportWidth:r.innerWidth,ourRoot:n});if(R.kind==="refused-form-control"){$(R.el,i);return}if(R.kind!=="text")return;const B=await Ae();if(!B)return;const K=f.captureContext({page:f.derivePageRef(o.location,mt()),...yt()});try{s.removeAllRanges()}catch{}y(B,R.el,R.point,K,R.label,f,void 0,R.record)}function pe(s,i=!1){const f=L;L=s,s!=="add"&&W&&!i&&(W.close(),W=null),s==="add"&&X&&N(),s==="add"&&(Ae(),fe());try{sessionStorage.setItem(ce.mode,s==="add"?"comments":s)}catch{}S.setMode(s),s!==f&&et(V(`toolbar.${s}`)),ne(),s==="add"&&Tt(),on(),le?.setActive(s==="add"),te.setState(s),oe(),s!==f&&u("modechange",{mode:s,previous:f})}let Ye=0,sn=0;const an=[300,800,1600,3200];function fo(){if(Ye||!b.hasPending()){b.hasPending()||(sn=0);return}const s=an[Math.min(sn++,an.length-1)];Ye=r.setTimeout(()=>{Ye=0,oe()},s)}const ho=3e3;let cn=0;function oe(s){const i=s??(Date.now()<cn?"navigating":"authoritative");z=b.reanchor(k.filter(Ao()),i),So(),fo();const f=new Map(z.map(Y=>[Y.id,Y]));k=k.map(Y=>f.get(Y.id)??Y);const R=T()?new Set(z.filter(Y=>!Pr(Y,c,P.map())&&Y.id!==se).map(Y=>Y.id)):void 0;Le=R?z.filter(Y=>!R.has(Y.id)):z,b.render(L==="browse"?[]:z,R);const B=we(o),K=re?Ds(o.location.origin,k,B):null;te.setCount(K?Ls(K,B):re?z.filter(Y=>Y.status!=="resolved").length:null),ye!==null&&ye>=Le.length&&(ye=null),X?.update(x())}async function Ee(){const{data:s}=await p.listThreads();k=s,oe();const i=b.settled();for(const f of i)u("anchor:settled",{threadId:f.id,state:f.state,strategy:f.strategy,confidence:f.confidence});return p.capabilities.anchorReports&&p.reportAnchors&&i.length&&_e(()=>p.reportAnchors(i.map(f=>({threadId:f.id,state:f.state,confidence:f.confidence,strategy:f.strategy})))),p.capabilities.anchorReports||await Promise.all(s.flatMap(f=>{const R=k.find(B=>B.id===f.id);return!R||R.anchorState===f.anchorState?[]:[_e(()=>p.patchThread(R.id,{anchor:R.anchor,anchorState:R.anchorState}))]})),z}async function po(s,i){k=k.map(f=>f.id===s?{...f,status:i}:f),oe(),u("thread:resolve",{threadId:s,status:i}),await _e(()=>p.patchThread(s,{status:i}))}async function mo(s,i){k=k.map(f=>f.id===s?{...f,assignee:i}:f),oe(),await _e(()=>p.patchThread(s,{assignee:i&&i.id}))}async function go(s,i,f){const R={id:Yn(),body:i,author:lo(f)};k=k.map(B=>B.id===s?{...B,comments:[...B.comments,{...R,snagId:s,createdAt:new Date().toISOString()}]}:B),P.mark(s),oe(),u("comment:create",{threadId:s,comment:R}),await _e(()=>p.createComment(s,R))}function ln(){ie.show("error.quota",{label:"action.exportclear",run:()=>{It("json"),ee()}}),console.warn(`[${ve}] ${V("error.quota")}`)}async function _e(s){try{return await s()}catch(i){if(i instanceof Ht&&i.code==="local_quota_exceeded")return ln(),null;throw i}}function It(s){fe().then(async i=>{if(!i)return;const f=await i.resolveAttachmentUris(k).catch(()=>new Map);i.download(n,i.buildExport(s,k,{origin:o.location.origin,exportedAt:new Date().toISOString()},f),r)})}async function dn(s,i,f,R,B,K,Y){const We=lo(B,K),be=Se??await fe();if(!be)throw new Error(`[${ve}] add() needs the capture chunk`);He||mn(s);const me=He?await He:null;He=nt=null,be.applyShotOutcome(f,me,tt===!1,de&&!gt);const bt=me?.blob&&p.uploadAttachment?p.uploadAttachment(me.blob,{kind:"screenshot",...me.width!==void 0?{width:me.width}:{},...me.height!==void 0?{height:me.height}:{}}).catch(()=>null):Promise.resolve(null),ot={id:ps(),key:Js(k),route:we(o),anchor:Y??be.createElementAnchor(s,{point:i,viewportWidth:r.innerWidth,label:be.deriveAnchorLabel(s),...be.describeElement(s)}),anchorState:"anchored",scope:wo(),context:f,createdBy:We,createdAt:new Date().toISOString(),...R?{comment:{id:Yn(),body:R,author:We}}:{}},Ce=Rn(ot);me?.blob&&(Ce.screenshotBlob=me.blob),k=[...k,Ce],P.mark(Ce.id),et(V("announce.created",{key:Ce.key})),u("thread:create",{thread:Ce}),L==="browse"?pe("comments"):oe();try{const ge=await bt;ge&&(ot.attachments=[ge],k=k.map(Ue=>Ue.id===Ce.id?{...Ue,attachments:[ge]}:Ue),oe()),await _e(()=>p.createThread(ot))}catch(ge){throw k=k.filter(Ue=>Ue.id!==Ce.id),oe(),ie.show("error.sendfailed",void 0,{item:zt.toLowerCase()}),console.warn(`[${ve}] ${V("error.sendfailed",{item:zt.toLowerCase()})}`,ge),ge}return Ce}function un(s){if((s.key==="n"||s.key==="p")&&L==="comments"&&!W){if(s.metaKey||s.ctrlKey||s.altKey)return;const i=s.composedPath()[0]??s.target;if(i&&(i.closest?.("input,textarea,select,[contenteditable]")||i.isContentEditable))return;s.preventDefault(),s.stopPropagation(),nn(s.key==="n"?1:-1);return}L==="add"&&s.key==="Escape"&&(W||(s.stopPropagation(),pe("comments")))}o.addEventListener("keydown",un,!0);let fn=0;const hn=()=>{if(o.hidden||!p.revalidate)return;const s=Date.now();s-fn<3e4||(fn=s,p.revalidate())};o.addEventListener("visibilitychange",hn);const yo=Ho(n),bo=Wo(n,s=>{console.warn(`[${ve}] the host page hid the widget from assistive technology ${s} times; leaving it alone.`)}),vo=No(n,s=>{console.warn(`[${ve}] the host page removed the widget ${s} times; leaving it alone. Reload to comment again.`)});function wo(){return{environment:d,...t?.config?.branch?{branch:t.config.branch}:{}}}let ft={route:we(o),url:o.location.href},Pt=!1,ht=null;function xo(s){if(s){if(L==="browse")return;ht=L,pe("browse",!0),Ve.show(),u("paused",{reason:"modal-dialog"})}else if(ht){const i=ht;ht=null,Ve.hide(),pe(i),u("resumed",{mode:i})}}Ae();function So(){z.length>0&&Me("dock",a,o)}{const s=o.createElement("div");s.style.cssText="position:fixed;inset:0;pointer-events:none;visibility:hidden",n.appendChild(s);const i=s.getBoundingClientRect(),f=Math.abs(i.left)>1||Math.abs(i.top)>1||Math.abs(i.width-r.innerWidth)>1||Math.abs(i.height-r.innerHeight)>1;s.remove(),f&&(console.warn(`[${ve}] fixed-trapped: <html> has transform/filter/contain, so our fixed layer follows it, not the viewport. Remove it, or expect drift.`),u("error",{code:"fixed-trapped"}))}let Xe=null;const pt=new Set,Ne=(()=>{const s=r[_o.config];return s&&typeof s=="object"?s:void 0})(),pn=Ne?.breadcrumbs,Mt=(()=>{const s=Ne?.significantQueryParams,i=Ne?.ignoredQueryParams,f={};return s==="*"?f.significantQueryParams="*":Array.isArray(s)&&(f.significantQueryParams=s.map(String)),Array.isArray(i)&&(f.ignoredQueryParams=i.map(String)),f})(),mt=()=>({routeOverride:Gt,query:Mt,doc:o}),tt=Ne?.screenshot===!1?!1:Ne?.screenshot&&typeof Ne.screenshot=="object"?Ne.screenshot:{};let gt=!1,He=null,nt=null;function mn(s){if(tt===!1||He||de&&!gt)return;nt=new AbortController;const i=nt.signal;He=Me("screenshot",a,o).then(f=>f.ok?f.mod.captureScreenshot({doc:o,target:s,signal:i,...tt,...p.fetchForeignImage?{fetchForeignImage:R=>p.fetchForeignImage(R)}:{}}):{situation:"engine-load-failed",blindSpots:[],maskedCount:0})}function Ao(){const s=we(o),i=Un(o.location.pathname),f=Vr(o.location.search,Mt);return R=>(R.route===s||R.context?.page?.pathname===i)&&Yr(R.context?.page?.query,f,Mt)}{const s=pn;s!==!1&&Me("crumbs",a,o).then(i=>{i.ok&&(Xe=i.mod.installTierC({win:r,...t?.early?{early:t.early}:{},...s&&typeof s=="object"?{config:s}:{},subscribeNav:f=>(pt.add(f),()=>pt.delete(f))}))})}const yt=()=>Xe?{breadcrumbs:{records:Xe.drain(),status:Xe.status()}}:{},ko=Qr(o,r,()=>{L!=="browse"&&z.length>0&&oe()}),$o=Cr(r,{onResize:()=>oe(),onRoute:()=>{const s={route:we(o),url:o.location.href},i=s.route!==ft.route;if(i){u("navigate",{from:ft,to:s});for(const f of pt)f(ft.url,s.url)}if(ft=s,!i){Ee();return}cn=Date.now()+ho,r.setTimeout(()=>{p.listThreads().then(({data:f})=>{k=f,oe("optimistic")})},100),r.setTimeout(()=>void Ee(),600)},onModal:xo});return te.setState(L),S.setMode(L),on(),re||ie.show("error.nostorage",{label:"action.export",run:()=>It("md")}),Ee().then(async s=>{const i=Rr(r);if(!i){const R=new URLSearchParams(o.location.search).get(Oo("t"));if(R){let B=s.find(K=>K.key===R);if(!B&&p.getThreadByKey){const K=await p.getThreadByKey(R).catch(()=>null);K&&(k=[...k.filter(Y=>Y.id!==K.id),K],oe(),B=k.find(Y=>Y.id===K.id))}B?(await v(B.id),Re?.scrollToSnag(r,n,B)):(ie.show("permalink.unknown"),await v(null));return}await U();return}const f=s.find(R=>R.id===i);await v(f?i:null),f&&Re?.scrollToSnag(r,n,f)}),{root:n,assetBase:t?.assetBase??"",snags:()=>z,async add(s,i,f,R){const B=R?null:await fe(),K=R??(B?B.captureContext({page:B.derivePageRef(o.location,mt()),...yt()}):void 0);if(!K)throw new Error(`[${ve}] add() needs the capture chunk, or an explicit context`);return dn(s,i,K,f)},refresh:Ee,setRoute(s){Gt=s&&s.startsWith("/")?s:null,Ee()},setState:pe,getState:()=>L,openPanel:v,async open(s){const i=s.startsWith(xt.thread)?k.find(f=>f.id===s):k.find(f=>f.key===s);return i?i.route!==we(o)?{ok:!1,reason:"wrong-page",url:i.context?.url??i.route,route:i.route}:(await v(i.id),Re?.scrollToSnag(r,n,i),{ok:!0,anchorState:i.anchorState}):{ok:!1,reason:"not-found"}},closePanel:N,hitTest:(s,i)=>S.hitTest(s,i),destroy(){W?.close(),N(),le?.destroy(),ie.destroy(),Ve.destroy(),dt(),vo(),bo(),yo(),$o.destroy(),ko.destroy(),Xe?.destroy(),Xe=null,pt.clear(),$e?.destroy(),$e=null,_?.destroy(),_=null,Ye&&r.clearTimeout(Ye),Ye=0,o.removeEventListener("keydown",un,!0),o.removeEventListener("visibilitychange",hn),m(),S.destroy(),b.destroy(),te.destroy(),n.host.remove()}}}export{vn as HOST_CSS,xn as createHost,Xs as isSensitiveValue,qs as mount,$t as redactText,Ys as redactUrl};
1
+ const ve="Snagset",Co="snagset",gn="snagset.v1",To="Snagset",zt="Snag",Ro="Snags",_o={config:"SnagsetConfig"},Io={root:"data-snag-root"},Ot=e=>Io[e],Po={anchor:"data-snag-anchor",ignore:"data-snag-ignore",mask:"data-snag-mask",nomask:"data-snag-nomask",src:"data-snag-src",component:"data-snag-component"},Mo=e=>Po[e],M={font:"--snag-font",accent:"--snag-accent",onAccent:"--snag-onAccent",bg:"--snag-bg",fg:"--snag-fg",muted:"--snag-muted",border:"--snag-border",radius:"--snag-radius",shadow:"--snag-shadow",z:"--snag-z",motion:"--snag-motion",surface:"--snag-surface",sunken:"--snag-sunken",hover:"--snag-hover",focus:"--snag-focus",disabled:"--snag-disabled",statusOpen:"--snag-status-open",statusProgress:"--snag-status-progress",statusReview:"--snag-status-review",statusResolved:"--snag-status-resolved",anchorOrphan:"--snag-anchor-orphan",tbH:"--snag-tb-h",dockW:"--snag-dock-w",kb:"--snag-kb",thumbX:"--snag-thumb-x",thumbW:"--snag-thumb-w"},zo=e=>`var(${M[e]})`,Oo=e=>"snag_"+e,wt={query:["snag_t","snag_off","snag_debug","snag_theme"],fragment:["snag_k"]},Do="snag:disclosure:v1",Dt="snag:identity",yn="data-snag-theme",ce={session:e=>`snag:session:${e}`,silent:e=>`snag:silent:${e}`,identity:Dt,threads:(e,t)=>`snag:threads:${e}:${t}`,seen:(e,t)=>`snag:seen:${e}:${t}`,counts:e=>`snag:counts:${e}`,draft:(e,t)=>`snag:draft:${e}:${t}`,outbox:e=>`snag:outbox:${e}`,mode:"snag:mode",handoff:"snag:handoff",seenCoach:"snag:seen-coach",disclosure:Do},Ie={panels:"snag.panels.js",crumbs:"snag.crumbs.js",capture:"snag.capture.js",screenshot:"snag.screenshot.js",anchorExt:"snag.anchor-ext.js",anchorFuzzy:"snag.anchor-fuzzy.js",dock:"snag.dock.js",text:"snag.text.js"},xt={thread:"thr_",comment:"cmt_",attachment:"att_"},Lt={attachmentKind:"x-snagset-attachment-kind",attachmentWidth:"x-snagset-attachment-width",attachmentHeight:"x-snagset-attachment-height"},Lo={route:"snagset:route"},bn={original:"snagset.original",wrapped:"snagset.wrapped"},vn="position:absolute!important;top:0!important;left:0!important;width:0!important;height:0!important;margin:0!important;padding:0!important;border:0!important;pointer-events:none!important;z-index:2147483647;isolation:isolate;color-scheme:light dark;";function wn(e){const t=e.ownerDocument.defaultView?.getComputedStyle(e);return t?t.transform!=="none"&&t.transform!==""||t.filter!=="none"&&t.filter!==""||t.perspective!=="none"&&t.perspective!==""||/transform|filter|perspective|contain/.test(t.willChange)||/paint|layout|strict|content/.test(t.contain)||t.containerType!==void 0&&t.containerType!=="normal"&&t.containerType!=="":!1}function Nt(e){const t=e.documentElement,n=e.body;return t&&wn(t)?{parent:n??t,trapped:!0}:n&&wn(n)?{parent:t??n,trapped:!1}:{parent:n??t,trapped:!1}}function xn(e=document){const t=Ot("root"),n=e.querySelector(`[${t}]`);if(n?.shadowRoot)return n.shadowRoot;const o=e.createElement("div");return o.setAttribute(t,""),o.style.cssText=vn,Nt(e).parent.appendChild(o),o.attachShadow({mode:"open"})}function No(e,t,n=5){const o=e.ownerDocument??document,r=e.host,l=Nt(o).parent;if(typeof MutationObserver!="function"||!l)return()=>{};let u=0;const a=new MutationObserver(()=>{if(!r.isConnected){if(u++,u>n){a.disconnect(),t(u);return}Nt(o).parent.appendChild(r)}});return a.observe(l,{childList:!0}),()=>a.disconnect()}const Sn=[["pointerdown",!0],["mousedown",!0],["touchstart",!0],["pointerup",!0],["mouseup",!0],["touchend",!0],["click",!0],["dblclick",!0],["focusin",!0],["focusout",!0]];function Ho(e){const t=e.host,n=o=>o.stopPropagation();for(const[o,r]of Sn)t.addEventListener(o,n,{passive:r});return()=>{for(const[o]of Sn)t.removeEventListener(o,n)}}function Wo(e,t,n=20){const o=e.host;if(typeof MutationObserver!="function")return()=>{};let r=0;const l=()=>{let a=!1;return o.getAttribute("aria-hidden")==="true"&&(o.removeAttribute("aria-hidden"),a=!0),o.hasAttribute("inert")&&(o.removeAttribute("inert"),a=!0),a},u=new MutationObserver(()=>{l()&&++r>n&&(u.disconnect(),t(r))});return l(),u.observe(o,{attributes:!0,attributeFilter:["aria-hidden","inert"]}),()=>u.disconnect()}const Uo={product:ve,set:To,item:zt,items:Ro};function An(e){return(t,n)=>(e[t]??"").replace(/\{(\w+)\}/g,(o,r)=>{const l=n?.[r]??Uo[r];return l===void 0?o:String(l)})}const jo=e=>new Intl.NumberFormat().format(e),kn={"where.anchored":"{label}","where.approximate":"position approximate \u2014 the page changed","where.orphaned":"moved \u2014 the element is gone","status.open":"Active","status.progress":"In progress","status.review":"In review","status.resolved":"Resolved","author.unknown":"Someone","label.image":"an image","label.link":"a link","label.button":"a button","label.tag":"the {tag}"},$n=An(kn),En={open:{colour:"#4f6ef7"},progress:{colour:"#f59e0b"},review:{colour:"#8b5cf6"},resolved:{colour:"#10b981"}},Cn=e=>e==="open"||e==="review"?"#fff":"#16161a",Tn=e=>e in En?$n(`status.${e}`):e,Fo=e=>$n(`where.${e.anchorState}`,{label:e.anchor.label});class Ht extends Error{code;constructor(t,n){super(n??t),this.name="AdapterError",this.code=t}}function Rn(e){return{id:e.id,key:e.key,route:e.route,...e.scope?{scope:e.scope}:{},...e.attachments?.length?{attachments:e.attachments}:{},anchor:e.anchor,anchorState:e.anchorState,context:e.context,status:"open",comments:e.comment?[{id:e.comment.id,snagId:e.id,body:e.comment.body,author:e.comment.author,createdAt:e.createdAt}]:[],createdBy:e.createdBy,createdAt:e.createdAt,updatedAt:e.createdAt}}const A=Object.fromEntries(Object.keys(M).map(e=>[e,zo(e)])),Bo=Object.entries(En).map(([e,t])=>` ${M[`status${e[0].toUpperCase()}${e.slice(1)}`]}:${t.colour};`).join(`
2
+ `),Zo=` :host{all:initial}[hidden]{display:none!important}:host{display:block;font:400 14px/1.45 ${A.font};color:${A.fg};${M.font}:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;${M.accent}:#2a51b8;${M.bg}:#fefdfc;${M.fg}:#181716;${M.muted}:#666564;${M.border}:#e4e3e0;${M.radius}:8px;${M.shadow}:0 6px 24px -4px rgb(0 0 0 / .18);${M.z}:2147483647;${M.motion}:160ms;${M.surface}:color-mix(in srgb,${A.fg} 6%,${A.bg});${M.sunken}:color-mix(in srgb,${A.fg} 3%,${A.bg});${M.hover}:color-mix(in srgb,${A.fg} 8%,${A.bg});${M.onAccent}:#fff;${M.focus}:color-mix(in srgb,${A.accent} 62%,${A.fg});${M.disabled}:color-mix(in srgb,${A.muted} 52%,${A.bg});${Bo} ${M.anchorOrphan}:#DC2626;}:host([${yn}="dark"]){${M.accent}:#8aafff;${M.onAccent}:#1d1c1a;${M.bg}:#1d1c1a;${M.fg}:#f0eeec;${M.muted}:#9a9997;${M.border}:#2d2c2b;${M.shadow}:0 6px 24px -4px rgb(0 0 0 / .6);}@media (prefers-reduced-motion:reduce){:host{${M.motion}:0ms}}@media (forced-colors:active){:host{${M.bg}:Canvas;${M.fg}:CanvasText;${M.muted}:CanvasText;${M.border}:CanvasText;${M.accent}:Highlight;${M.onAccent}:HighlightText;${M.surface}:Canvas;${M.sunken}:Canvas;${M.hover}:Canvas;${M.focus}:Highlight;${M.disabled}:GrayText;${M.shadow}:none;${M.anchorOrphan}:CanvasText;}.snag-pin{border-color:CanvasText!important;color:CanvasText!important;forced-color-adjust:none}}`,Ke={shield:1,pins:3,dock:5,notice:6,toolbar:7},_n=new WeakMap;function rt(e,t,n){let o=_n.get(e);if(o||_n.set(e,o=new Set),o.has(t))return;o.add(t);try{const u=new CSSStyleSheet;u.replaceSync(n),e.adoptedStyleSheets=[...e.adoptedStyleSheets,u];return}catch{}const l=(e.ownerDocument??document).createElement("style");l.setAttribute(`data-snag-${t}`,""),l.textContent=n,e.appendChild(l)}function Vo(e){return e==="light"||e==="dark"?e:"auto"}function Yo(e,t){const n=yn;if(t!=="auto")return e.setAttribute(n,t),()=>e.removeAttribute(n);const o=e.ownerDocument?.defaultView?.matchMedia?.("(prefers-color-scheme: dark)");if(!o)return e.setAttribute(n,"light"),()=>e.removeAttribute(n);const r=()=>e.setAttribute(n,o.matches?"dark":"light");return r(),o.addEventListener("change",r),()=>{o.removeEventListener("change",r),e.removeAttribute(n)}}function Wt(e){return e.getBoundingClientRect()}function St(e){if(e.closest('[inert],[aria-hidden="true"]'))return!1;const t=e.checkVisibility;if(typeof t=="function")return t.call(e,{contentVisibilityAuto:!0,opacityProperty:!1,visibilityProperty:!0});const n=Wt(e);if(!(n.width>0||n.height>0||e.getClientRects().length>0))return!1;const r=e.ownerDocument?.defaultView;return r?r.getComputedStyle(e).visibility!=="hidden":!0}const Xo="button,a[href],[role=button],[role=link],[role=tab],[role=menuitem],label,input,select,textarea,summary",Ko=3,In=8,Jo=new Set(["img","picture","canvas","video","audio","iframe","embed","object","svg","math","input","select","textarea","button","progress","meter"]);function qo(e,t){return Jo.has(e.tagName.toLowerCase())?!1:t.getComputedStyle(e).display==="inline"}function Pn(e){const t=e.ownerDocument?.defaultView;if(!t)return e;let n=e;for(let r=e;r;r=r.parentElement){const l=Wt(r);if(l.width>=In&&l.height>=In&&!qo(r,t)){n=r;break}n=r}let o=0;for(let r=n;r&&o<=Ko;r=r.parentElement){if(r.matches(Xo))return r;o++}return n}const Qo=10,Ut=[["click",!1],["auxclick",!1],["dblclick",!1],["pointerdown",!1],["pointerup",!1],["mousedown",!1],["mouseup",!1],["contextmenu",!1],["dragstart",!1],["wheel",!1],["touchstart",!0],["touchmove",!0],["touchend",!0],["selectstart",!0],["keydown",!1],["keyup",!1]];function Go(e,t,n){let o=e;for(;o&&o!==o.ownerDocument.documentElement&&o!==o.ownerDocument.body;){const r=getComputedStyle(o),l=(r.overflowY==="auto"||r.overflowY==="scroll")&&o.scrollHeight>o.clientHeight&&(t>0&&o.scrollTop+o.clientHeight<o.scrollHeight-1||t<0&&o.scrollTop>0),u=(r.overflowX==="auto"||r.overflowX==="scroll")&&o.scrollWidth>o.clientWidth&&(n>0&&o.scrollLeft+o.clientWidth<o.scrollWidth-1||n<0&&o.scrollLeft>0);if(l||u)return o;o=o.parentElement}return null}function Mn(e,t){const n=t==="y"?e.deltaY:e.deltaX;return e.deltaMode===1?n*16:e.deltaMode===2?n*(t==="y"?innerHeight:innerWidth):n}const er=["position:fixed","inset:0",`z-index:${Ke.shield}`,"touch-action:pan-x pan-y pinch-zoom","background:transparent"].join(";");function tr(e,t={}){const n=t.doc??e.ownerDocument??document,o=n.defaultView??window;let r=t.coarsePointer??o.matchMedia?.("(pointer: coarse)").matches??!1;const l=c=>{const T=c.pointerType,b=T==="touch"?!0:T==="mouse"||T==="pen"?!1:r;b!==r&&(r=b,d())},u=n.createElement("div");u.className="snag-shield",u.style.cssText=er;let a="browse";const d=()=>{u.style.pointerEvents=r?"none":"auto",u.style.cursor="crosshair"};d();const m=c=>{const T=c;return!T||typeof T.closest!="function"?!1:e.contains(T)?!0:!!T.closest(`[${Ot("root")}]`)};function w(c,T,b){let I=b,L=0;for(;I.shadowRoot&&L++<Qo;){const W=C(I.shadowRoot,c,T);if(!W||W===I)break;I=W}return I}function C(c,T,b){const I=c.elementsFromPoint;if(typeof I=="function"){for(const W of I.call(c,T,b))if(W.getRootNode()===c)return W;return null}const L=c.elementFromPoint(T,b);return L&&L.getRootNode()===c?L:null}function p(c,T){const b=[];for(const I of n.elementsFromPoint(c,T)){if(m(I))continue;if(I===n.documentElement||I===n.body){b.push(I);continue}const L=w(c,T,I);b.push(m(L)?I:L)}return b}let P=null;const F=(c,T)=>{const[b]=p(c,T);b&&t.onPick?.(Pn(b),{x:c,y:T})};let $=!1;const z=()=>{const c=n.getSelection?.();if(!c||c.isCollapsed||c.rangeCount===0||!c.toString().trim())return!1;const T=c.anchorNode;if(!T||e.contains(T))return!1;const b=T.nodeType===1?T:T.parentElement;return!m(b)},se=c=>{const T=c.composedPath()[0];if(T&&m(T)){$=!1;return}if(c.type==="selectstart"){t.onSelectStart?.();return}const b=c.type;if(b.endsWith("down")||b.endsWith("start")){$=!1;return}if(b.endsWith("up")||b.endsWith("end")){$=z();return}if(b==="click"||b==="auxclick"){if(!$)return;$=!1,c.preventDefault(),c.stopImmediatePropagation()}},q=c=>{if(c.type==="pointerdown"&&l(c),a==="comments"){se(c);return}if(a!=="add")return;if(c.type==="keydown"||c.type==="keyup"){g(c);return}const T=c.composedPath()[0];if(T&&T!==u&&m(T))return;const b=Ut.find(([I])=>I===c.type)?.[1]??!1;if(c.stopImmediatePropagation(),!b){if(r&&c.type==="pointerdown"){const I=c;P={x:I.clientX,y:I.clientY,t:performance.now()},D(I.clientX,I.clientY)}if(r&&c.type==="pointerup"&&P){const I=c,L=P;P=null,Math.hypot(I.clientX-L.x,I.clientY-L.y)<=8&&performance.now()-L.t<=700&&F(I.clientX,I.clientY);return}if(c.type==="click"||c.type==="auxclick"||c.type==="dblclick"){c.preventDefault();const I=c;F(I.clientX,I.clientY);return}if(c.type==="wheel"){const I=c,L=Mn(I,"y"),W=Mn(I,"x"),[X]=p(I.clientX,I.clientY),ae=Go(X??null,L,W);ae&&(ae.scrollTop+=L,ae.scrollLeft+=W,c.preventDefault());return}if(c.type==="dragstart"||c.type==="contextmenu"){c.preventDefault();return}(c.type==="pointerdown"||c.type==="mousedown")&&!r&&c.preventDefault()}},G=new Set(["Tab","ArrowUp","ArrowDown","ArrowLeft","ArrowRight"," ","Spacebar","PageUp","PageDown","Home","End"]),J=/^[a-z0-9/?]$/;function h(c){for(const T of c.composedPath()){const b=T;if(!(!b||b.nodeType!==1||typeof b.matches!="function")&&b.matches('input:not([type=button]):not([type=submit]):not([type=checkbox]):not([type=radio]),textarea,select,[contenteditable=""],[contenteditable=true],[role=textbox],[role=searchbox],[role=combobox]'))return!0}return!1}function g(c){G.has(c.key)||c.metaKey||c.ctrlKey||c.altKey||/^F\d{1,2}$/.test(c.key)||c.key!=="Escape"&&c.key.length===1&&J.test(c.key.toLowerCase())&&!h(c)&&(c.preventDefault(),c.stopImmediatePropagation())}for(const[c,T]of Ut)o.addEventListener(c,q,{capture:!0,passive:T});let _=0,O=null;function Z(){if(_=0,a!=="add"||!O)return;const[c]=p(O.x,O.y);t.onHover?.(c?Pn(c):null)}function D(c,T){a==="add"&&(O={x:c,y:T},!_&&(_=o.requestAnimationFrame(Z)))}return u.addEventListener("pointermove",c=>D(c.clientX,c.clientY)),u.addEventListener("pointerleave",()=>{O=null,t.onHover?.(null)}),{shield:u,getMode:()=>a,setMode(c){a=c,$=!1,d(),c==="add"?e.appendChild(u):u.remove(),c!=="add"&&(O=null,t.onHover?.(null))},hitTest:p,destroy(){_&&o.cancelAnimationFrame(_);for(const[c]of Ut)o.removeEventListener(c,q,{capture:!0});u.remove()}}}const nr=/[\u200B-\u200D\u2060\uFEFF]/gu,or=/[\s\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+/gu,rr=[[/[\u2018\u2019\u201A\u201B]/gu,"'"],[/[\u201C\u201D\u201E\u201F]/gu,'"'],[/[\u2010-\u2015\u2212]/gu,"-"],[/\u2026/gu,"..."],[/\u2044/gu,"/"]];function sr(e){let t=e.normalize("NFC").replace(nr,"");for(const[n,o]of rr)t=t.replace(n,o);return t.replace(or," ").trim()}const ar={testid:1,domid:1,css:.9,aria:.75,"text-exact":.8,"text-fuzzy":.78,"path-rect":.35,none:0,manual:1},zn={anchored:.75,approximate:.35};function ir(e,t){const n=ar[e];return t===1?n:n/(1+Math.log2(t))}function On(e){return e>=zn.anchored?"anchored":e>=zn.approximate?"approximate":"orphaned"}const cr=[Mo("anchor"),"data-testid","data-test-id","data-test","data-cy","data-qa","data-pw","data-automation-id"],Dn=e=>typeof CSS<"u"&&CSS.escape?CSS.escape(e):e.replace(/["\\]/g,"\\$&"),lr=[{strategy:"testid",applicable:e=>!!e.testid,find:(e,t)=>jt(t,cr.map(n=>`[${n}="${Dn(e.testid)}"]`).join(","))},{strategy:"domid",applicable:e=>!!e.domid,find:(e,t)=>jt(t,`#${Dn(e.domid)}`)},{strategy:"css",applicable:e=>!!e.css,find:(e,t)=>{try{return jt(t,e.css)}catch{return[]}}}];function jt(e,t){return[...e.querySelectorAll(t)].filter(dr)}function dr(e){return!e.closest(`[${Ot("root")}]`)}function ur(e,t){const n=t.text?.exact;if(!n)return!0;const o=sr(e.textContent??"");return o?o===n||o.includes(n)||n.includes(o):!0}function Ln(e,t,n,o){St(e)||o.push("hidden"),t.hostPath?.length&&o.push("shadow-boundary");const r=!ur(e,t);r&&o.push("text-drift");let l=o.includes("hidden")?Math.min(n,.7):n;return r&&(l=Math.min(l,.5)),l}const fr={element:null,strategy:"none",score:0,state:"orphaned",reasons:["not-found"],candidates:0};function Ft(e,t=document,n={}){const o=[];for(const r of lr){if(!r.applicable(e))continue;const l=r.find(e,t);if(l.length===0)continue;const u=ir(r.strategy,l.length),a=l[0];l.length>1&&o.push("ambiguous");const d=Ln(a,e,u,o),m={element:a,strategy:r.strategy,score:d,state:On(d),reasons:o.length?o:["exact"],candidates:l.length};if(m.reasons.includes("text-drift")&&n.extended){const w=n.extended(e,t,{...n.viewportWidth===void 0?{}:{viewportWidth:n.viewportWidth},...n.passCaches?{caches:n.passCaches}:{}});if(w&&w.score>m.score)return w}return m}return n.extended?.(e,t,{...n.viewportWidth===void 0?{}:{viewportWidth:n.viewportWidth},...n.passCaches?{caches:n.passCaches}:{}})??fr}const hr={"toolbar.aria":"{product} review toolbar","toolbar.group":"What you see","toolbar.browse":"Browse","toolbar.comments":"Comment","toolbar.comments.unresolved":"Comment, {n} unresolved","toolbar.add":"Add a comment","toolbar.add.draft":"Add a comment \u2014 one is unfinished","toolbar.panel":"All comments","pin.aria":"Comment {key} on {target}. {status}, {replies} replies. Press Enter.","pin.aria.one":"Comment {key} on {target}. {status}, 1 reply. Press Enter.","pin.aria.none":"Comment {key} on {target}. {status}. Press Enter.","pin.aria.moved":"Comment {key} on {target}. {status}. {where}. Press Enter.","pin.target":"{role} \u201C{name}\u201D","cluster.aria":"{n} comments here: {list}","nav.announce":"Comment {n} on {label}, {i} of {total}","action.retry":"Retry","action.dismiss":"Dismiss","action.export":"Export","action.exportclear":"Export & clear","error.quota":"Storage is full \u2014 this {item} is on screen but not saved. Export to keep them.","error.nostorage":"Comments won't be saved in this browser. Export before you leave to keep them.","error.linkrevoked":"This review link was turned off. Ask whoever sent it for a new one.","error.sessionended":"This review session has ended. Open your review link again to carry on.","error.sendfailed":"That {item} couldn't be sent, so it wasn't kept. Check your connection and try again.","error.origin":"{product} is not enabled for {origin}. Add that address to the site's allowed origins.","error.panels":"{product} loaded, but its comment UI didn't. You can still see the comments on the page.","error.panels.add":"Adding comments is unavailable until the comment UI loads.","error.capture":"{product} can't take new comments \u2014 the part that records the page didn't load. Everything already here still works.","paused.dialog":"Review paused \u2014 a dialog is open on this page. Close it to carry on commenting. Commenting inside a native dialog isn't supported yet.","paused.close":"Close","announce.created":"Comment {key} added.","permalink.unknown":"That comment isn't on this page any more"},pr={...kn,...hr},V=An(pr);function mr(e,t){const n=new Array(e.length),o=[],r=new Map,l=[];let u=0;for(let a=0;a<e.length;a++){u++;const d=e[a],m=Math.floor(d.x/t),w=Math.floor(d.y/t);let C=-1;e:for(let p=-1;p<=1;p++)for(let P=-1;P<=1;P++)for(const F of r.get(`${m+p},${w+P}`)??[]){const $=l[F],z=d.x-$.x,se=d.y-$.y;if(z*z+se*se<=t*t){C=F;break e}}if(C===-1){C=o.length,o.push([]),l.push(d);const p=`${m},${w}`,P=r.get(p);P?P.push(C):r.set(p,[C])}n[a]=C,o[C].push(a)}return{group:n,members:o,visits:u}}const gr=`position:absolute;top:0;left:0;width:0;height:0;pointer-events:none;z-index:${Ke.pins}`,yr=' .snag-pp{animation:snag-pp .5s ease-out 2}@keyframes snag-pp{50%{transform:scale(1.45)}}@media (prefers-reduced-motion: reduce){.snag-pp{animation:none}}.snag-pin{width:28px;height:28px;margin:-14px 0 0 -14px}.snag-pin::after{content:"";position:absolute;inset:-8px}@media (pointer:coarse){.snag-pin{width:34px;height:34px;margin:-17px 0 0 -17px}}',br=`position:fixed;inset:0;width:0;height:0;pointer-events:none;z-index:${Ke.pins}`,st=["position:absolute",`color:${A.onAccent}`,`font:600 12px/1 ${A.font}`,"display:flex","align-items:center","justify-content:center","box-shadow:0 1px 4px rgb(0 0 0 / .35)","pointer-events:auto","cursor:pointer","box-sizing:border-box"].join(";"),At="border-radius:50% 50% 50% 2px",Nn=e=>A[`status${e[0].toUpperCase()}${e.slice(1)}`]??A.muted;function Hn(e,t){const n=Cn(t.status),o=`background:${Nn(t.status)};color:${n}`,r="0 1px 4px rgb(0 0 0 / .35)";return e==="anchored"?`${st};${At};${o};border:2px solid ${n};box-shadow:${r}`:e==="approximate"?`${st};${At};${o};border:2px dashed ${n};box-shadow:${r}`:`${st};${At};${o};border:2px solid ${n};box-shadow:inset 0 0 0 2px ${n},${r}`}function vr(e,t){const n=[];let o="static",r=!1;for(let l=e;l&&l!==e.ownerDocument.documentElement;l=l.parentElement){const u=t.getComputedStyle(l),a=l!==e.ownerDocument.body&&/auto|scroll|hidden|overlay/.test(u.overflowY+u.overflowX);a&&!r&&n.push(l),u.position==="fixed"?(o="dynamic",r=!0):u.transform!=="none"||u.filter!=="none"||u.perspective!=="none"?(o="dynamic",r=!1):(u.position==="sticky"||u.willChange.includes("transform")||u.contain.includes("layout")||a&&(l.scrollHeight>l.clientHeight||l.scrollWidth>l.clientWidth))&&(o="dynamic")}return{tier:o,clips:n}}function wr(e,t,n,o){const r=e.ownerDocument??document,l=r.defaultView??window;rt(e,"pins",yr);const u=r.createElement("div");u.className="snag-pins",u.style.cssText=gr,e.appendChild(u);const a=r.createElement("div");a.className="snag-pins-dyn",a.style.cssText=br,e.appendChild(a);let d=[],m=[];const w=new Map;let C=new Map,p=null;const P=new Map;let F=new Map;const $=l.matchMedia?.("(pointer: coarse)").matches??!1,z=$?32:24,se=$?34:28;let q=[],G=null,J=null,h={x:0,y:0};function g(){const S=r.defaultView,k=u.getBoundingClientRect();h={x:k.left+(S?.scrollX??0),y:k.top+(S?.scrollY??0)}}let _=[];const O=new Map,Z=1e4,D=5,c=new Map,T=new Set(["testid","domid"]);function b(S){const k=c.get(S.id),y=k?.ref.deref();if(!y||!y.isConnected)return null;if(T.has(k.strategy))return y;if(S.anchor.css)try{if(!y.matches(S.anchor.css))return null}catch{return null}return y}function I(S,k){const y=[],U=Ln(k,S.anchor,1,y);return{element:k,strategy:c.get(S.id).strategy,score:U,state:On(U),reasons:y.length?y:["exact"],candidates:1}}function L(S,k="authoritative"){w.clear(),_=[];const y=Date.now(),U=n?.newPass?.();return S.map(v=>{const N=b(v),E=n?.get();let x=N?I(v,N):Ft(v.anchor,r,{viewportWidth:r.defaultView?.innerWidth??0,...E?{extended:E}:{},...U?{passCaches:U}:{}});if(N&&x.reasons.includes("text-drift")){const j=Ft(v.anchor,r,{viewportWidth:r.defaultView?.innerWidth??0,...E?{extended:E}:{},...U?{passCaches:U}:{}});j.score>x.score&&(x=j)}if(n&&(!x.element||x.reasons.includes("text-drift"))&&n.want(v.anchor),!x.element&&n){const j=n.fuzzyHit?.(v.id);j?x=j:n.wantFuzzy?.(v.id,v.anchor)}const oe=x.element&&v.anchor.text?.exact&&(x.reasons.includes("text-drift")||x.strategy==="path-rect"&&x.score<.5);if(n&&oe){const j=n.fuzzyHit?.(v.id);j&&j.score>x.score?x=j:j||n.wantFuzzy?.(v.id,v.anchor)}x.element?c.set(v.id,{ref:new WeakRef(x.element),strategy:x.strategy}):c.delete(v.id),x.element&&w.set(v.id,x.element);let Q=!1;if(x.state==="orphaned"){const j=O.get(v.id)??{firstSeenAt:y,tries:0,best:x};j.tries++,x.score>=j.best.score&&(j.best=x),O.set(v.id,j);const ee=n?.unavailable?.()??!1,te=ee?2:D,de=y-j.firstSeenAt<Z;k==="optimistic"||de&&(k==="navigating"||j.tries<te)?Q=!0:(x=j.best,ee&&!x.reasons.includes("budget-exceeded")&&(x={...x,reasons:[...x.reasons,"budget-exceeded"]}),O.delete(v.id))}else O.delete(v.id);Q||_.push({id:v.id,state:x.state,strategy:x.strategy,confidence:x.score});const H=x.element?Wt(x.element):void 0;if(H&&(H.width>0||H.height>0)){const j=r.defaultView;v.anchor.rect={x:H.left+(j?.scrollX??0),y:H.top+(j?.scrollY??0),w:H.width,h:H.height}}return{...v,anchorState:Q?v.anchorState:x.state,anchorPending:Q,anchorReasons:x.reasons}})}function W(){const S=r.documentElement;return{w:S.scrollWidth,h:S.scrollHeight}}function X(S,k,y){return{x:Math.min(Math.max(S,14),Math.max(y.w,28)-14),y:Math.min(Math.max(k,14),Math.max(y.h,28)-14)}}function ae(S,k){g(),u.textContent="",a.textContent="",d=[],m=[],C=new Map,F=new Map,P.clear(),q=[],J=null,S.forEach((y,U)=>{const v=y.anchor.rect;if(!v)return;const N=y.anchor.offset??{fx:.5,fy:.5},E=r.createElement("div");E.className="snag-pin",E.setAttribute("data-state",y.anchorPending?"pending":y.anchorState),E.setAttribute("data-key",y.key),E.style.cssText=y.anchorPending?`${Hn("approximate",y)};opacity:.55`:Hn(y.anchorState,y);const x=w.get(y.id),{tier:oe,clips:Q}=x?vr(x,l):{tier:"static",clips:[]};if(oe==="dynamic"&&x){const ne=x.getBoundingClientRect(),ye=Fe();E.style.left=`${ne.left-ye.left+ne.width*N.fx}px`,E.style.top=`${ne.top-ye.top+ne.height*N.fy}px`,P.set(E,{x:ne.left+ne.width*N.fx+l.scrollX-h.x,y:ne.top+ne.height*N.fy+l.scrollY-h.y});const De={node:E,el:x,fx:N.fx,fy:N.fy,clips:Q};d.push(De),E.hidden=!St(x),E.hidden||Be(De,ne,new Map(Q.map(ut=>[ut,ut.getBoundingClientRect()])))}else{const ne=X(v.x+v.w*N.fx-h.x,v.y+v.h*N.fy-h.y,W());E.style.left=`${ne.x}px`,E.style.top=`${ne.y}px`,P.set(E,ne),x&&(m.push({node:E,el:x,fx:N.fx,fy:N.fy,clips:[]}),E.hidden=!St(x))}E.textContent=String(U+1);const H=Fo(y),j=y.anchor.role?V("pin.target",{role:y.anchor.role,name:y.anchor.accessibleName??y.anchor.label}):y.anchor.label,ee=y.comments.length-1,te=y.anchorState==="approximate"?`~ ${y.key}`:y.key;E.setAttribute("role","button"),E.setAttribute("tabindex","0");const de=y.anchorState==="anchored"?V(ee===0?"pin.aria.none":ee===1?"pin.aria.one":"pin.aria",{key:te,target:j,status:Tn(y.status),replies:ee}):V("pin.aria.moved",{key:te,target:j,status:Tn(y.status),where:H});E.title=de,E.setAttribute("aria-label",de),t&&Se(E,()=>t(y)),k?.has(y.id)&&(E.hidden=!0,E.setAttribute("data-fo","")),C.set(y.id,E),F.set(E,{snag:y,ordinal:U+1}),(oe==="dynamic"?a:u).appendChild(E)}),qe(),p&&Ze(p),Oe(),le="",he(r.visibilityState==="visible"&&C.size>0)}const Fe=()=>a.getBoundingClientRect();let xe=!1;function Be(S,k,y){for(const U of S.clips){const v=y.get(U);if(v&&(k.right<=v.left||k.left>=v.right||k.bottom<=v.top||k.top>=v.bottom)){S.node.hidden=!0;return}}S.node.hidden=!1}function Ct(S){const k=new Map;for(const y of S)for(const U of y.clips)k.has(U)||k.set(U,U.getBoundingClientRect());return k}const Re=["open","progress","review","resolved"];function Se(S,k){S.addEventListener("click",k),S.addEventListener("keydown",y=>{y.key!=="Enter"&&y.key!==" "||(y.preventDefault(),k())})}function ze(S,k,y,U,v){const N=Re.find(x=>S.some(oe=>oe.snag.status===x))??"open",E=r.createElement("div");E.className="snag-pin snag-cluster",E.style.cssText=`${st};border-radius:50%;background:${Nn(N)};color:${Cn(N)};border:2px solid ${A.onAccent}`,E.style.left=`${k}px`,E.style.top=`${y}px`,E.textContent=String(S.length),E.setAttribute("data-count",String(S.length)),E.setAttribute("data-state",N),E.setAttribute("role","button"),E.setAttribute("tabindex","0"),v&&E.setAttribute("aria-expanded","true"),E.setAttribute("aria-label",V("cluster.aria",{n:S.length,list:S.map(x=>x.ordinal).join(", ")})),Se(E,()=>{if(v)G=null;else if(S.length<=6)G=U;else{o?.(S.map(x=>x.snag.id));return}qe()}),u.appendChild(E),q.push(E)}function fe(S,k,y,U){ze(S,k,y,U,!0),S.forEach((v,N)=>{const E=k,x=y+(N+1)*(se+12),oe=v.x-E,Q=v.y-x,H=Math.hypot(oe,Q);if(H>4){const ee=r.createElement("div");ee.className="snag-leader",ee.setAttribute("aria-hidden","true"),ee.style.cssText=`position:absolute;left:${E}px;top:${x}px;width:${H}px;height:0;border-top:1px solid ${A.onAccent};transform-origin:0 0;transform:rotate(${Math.atan2(Q,oe)}rad)`,u.appendChild(ee),q.push(ee)}const j=v.dot.cloneNode(!0);j.style.visibility="",j.style.left=`${E}px`,j.style.top=`${x}px`,Se(j,()=>t?.(v.snag)),u.appendChild(j),q.push(j)})}function qe(){for(const v of q)v.remove();q=[];const S=[];for(const[v,N]of F){if(v.hidden){v.style.visibility="";continue}const E=P.get(v);E&&S.push({dot:v,snag:N.snag,ordinal:N.ordinal,x:E.x,y:E.y})}const{members:k,visits:y}=mr(S,z);u.setAttribute("data-cv",String(y)),u.setAttribute("data-cp",String(S.length));let U=!1;for(const v of k){if(v.length<2){S[v[0]].dot.style.visibility="";continue}const N=v.map(Q=>S[Q]),E=N.map(Q=>Q.snag.id).sort().join("|");for(const Q of N)Q.dot.style.visibility="hidden";const x=N.reduce((Q,H)=>Q+H.x,0)/N.length,oe=N.reduce((Q,H)=>Q+H.y,0)/N.length;G===E&&N.length<=6?(U=!0,fe(N,x,oe,E)):ze(N,x,oe,E,!1)}G&&!U&&(G=null)}function Qe(S){J?.remove(),J=null;const k=S.anchor.rect;if(!k)return;const y=S.anchor.offset??{fx:.5,fy:.5},U=r.createElement("div");U.className="snag-pin snag-ghost",U.style.cssText=`${st};${At};background:transparent;border:2px dashed ${A.anchorOrphan};color:${A.anchorOrphan};box-shadow:none;pointer-events:none`;const v=X(k.x+k.w*y.fx-h.x,k.y+k.h*y.fy-h.y,W());U.style.left=`${v.x}px`,U.style.top=`${v.y}px`,U.setAttribute("aria-hidden","true"),u.appendChild(U),J=U}function Oe(S=!1){const k=S?[...d,...m]:d;xe||k.length===0||(xe=!0,l.requestAnimationFrame(()=>{xe=!1;const y=performance.now(),U=l.scrollX,v=l.scrollY,N=Fe(),E=k.map(H=>H.el.isConnected?H.el.getBoundingClientRect():null),x=k.map(H=>H.el.isConnected&&St(H.el)),oe=Ct(k),Q=W();k.forEach((H,j)=>{const ee=E[j];if(!ee)return;if(H.node.hasAttribute("data-fo")){H.node.hidden=!0;return}if(!x[j]){H.node.hidden=!0;return}H.node.hidden=!1;const te=ee.left+ee.width*H.fx,de=ee.top+ee.height*H.fy;if(H.node.parentElement===a)H.node.style.left=`${te-N.left}px`,H.node.style.top=`${de-N.top}px`,Be(H,ee,oe),P.set(H.node,{x:te+U-h.x,y:de+v-h.y});else{const ne=X(te+U-h.x,de+v-h.y,Q);H.node.style.left=`${ne.x}px`,H.node.style.top=`${ne.y}px`,P.set(H.node,ne)}}),qe(),u.setAttribute("data-ms",(performance.now()-y).toFixed(2))}))}const Ae=()=>Oe();r.addEventListener("scroll",Ae,{capture:!0,passive:!0});const lt=typeof l.ResizeObserver=="function"?new l.ResizeObserver(()=>Oe(!0)):null;lt?.observe(r.documentElement);let ke=null,le="";function Tt(){let S="";for(const k of[...m,...d]){if(!k.el.isConnected)continue;const y=k.el.getBoundingClientRect();S+=`${Math.round(y.left)},${Math.round(y.top)},${Math.round(y.width)};`}!S||S===le||(le=S,Oe(!0))}function he(S){if(ke&&clearTimeout(ke),ke=null,!S)return;const k=()=>{Tt(),ke=setTimeout(k,500)};ke=setTimeout(k,500)}const dt=()=>he(r.visibilityState==="visible"&&C.size>0);r.addEventListener("visibilitychange",dt);function ie(S){const k=C.get(S);k&&(k.classList.remove("snag-pp"),l.requestAnimationFrame(()=>k.classList.add("snag-pp")),l.setTimeout(()=>k.classList.remove("snag-pp"),1400))}function Ze(S){const k=p?C.get(p):void 0;k&&(k.style.transform="",k.style.zIndex=""),p=S;const y=S?C.get(S):void 0;y&&(y.style.transform="scale(1.4)",y.style.zIndex="1")}return{el:u,render:ae,showGhost:Qe,pulse:ie,reanchor:L,settled:()=>_,hasPending:()=>O.size>0,highlight:Ze,destroy(){r.removeEventListener("scroll",Ae,{capture:!0}),r.removeEventListener("visibilitychange",dt),lt?.disconnect(),he(!1),u.remove(),a.remove()}}}const xr=` .snag-notice{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(24px + var(${M.tbH},56px));z-index:${Ke.notice};max-width:min(420px,calc(100vw - 24px));background:${A.bg};color:${A.fg};border:1px solid ${A.border};border-inline-start:3px solid ${A.anchorOrphan};border-radius:${A.radius};box-shadow:${A.shadow};padding:12px 14px;pointer-events:auto;font:400 13px/1.45 ${A.font};display:flex;flex-direction:column;gap:10px}@media (pointer:coarse){.snag-notice{bottom:calc(12px + var(${M.tbH},64px))}}.snag-notice p{margin:0}.snag-notice-actions{display:flex;gap:6px;justify-content:flex-end}.snag-notice button{appearance:none;font:inherit;cursor:pointer;border-radius:calc(${A.radius} - 2px);padding:6px 12px;min-height:30px;border:0;transition:background ${A.motion}}.snag-notice-retry{background:${A.accent};color:${A.onAccent};font-weight:600}.snag-notice-dismiss{background:transparent;color:${A.muted}}.snag-notice-dismiss:hover{background:${A.hover};color:inherit}.snag-notice button:focus-visible{outline:2px solid ${A.focus};outline-offset:2px}`;function Sr(e,t){const n=e.ownerDocument??document,o=n.defaultView??window;rt(e,"notice",xr);const r=n.createElement("div");r.className="snag-notice",r.setAttribute("role","alert"),r.hidden=!0;const l=n.createElement("p"),u=n.createElement("div");u.className="snag-notice-actions";const a=n.createElement("button");a.type="button",a.className="snag-notice-dismiss",a.textContent=V("action.dismiss"),a.addEventListener("click",()=>C());const d=n.createElement("button");d.type="button",d.className="snag-notice-retry",u.append(a,d),r.append(l,u);let m;d.addEventListener("click",()=>{C(),m?.run()});let w=0;function C(){w&&o.cancelAnimationFrame(w),w=0,r.hidden=!0,r.remove()}return{show(p,P,F){m=P,d.hidden=!P,P&&(d.textContent=V(P.label)),r.hidden=!1,l.textContent="",(t??e).appendChild(r);const $=V(p,F);w&&o.cancelAnimationFrame(w),w=o.requestAnimationFrame(()=>{w=0,l.textContent=$})},hide:C,visible:()=>r.isConnected&&!r.hidden,destroy(){r.remove()}}}const Ar=` .snag-paused{border:0;padding:0;background:transparent;pointer-events:auto;max-width:min(420px,calc(100vw - 32px))}.snag-paused::backdrop{background:rgb(0 0 0 / .28)}.snag-paused-box{background:${A.bg};color:${A.fg};border:1px solid ${A.border};border-inline-start:3px solid ${A.accent};border-radius:${A.radius};box-shadow:${A.shadow};padding:14px 16px;font:400 13px/1.45 ${A.font};display:flex;flex-direction:column;gap:12px}.snag-paused p{margin:0}.snag-paused-actions{display:flex;justify-content:flex-end}.snag-paused button{appearance:none;font:inherit;cursor:pointer;border:0;font-weight:600;border-radius:calc(${A.radius} - 2px);padding:6px 14px;min-height:30px;background:${A.accent};color:${A.onAccent}}.snag-paused button:focus-visible{outline:2px solid ${A.focus};outline-offset:2px}`;function kr(e,t){const n=e.ownerDocument??document;rt(e,"paused",Ar);const o=n.createElement("dialog");o.className="snag-paused",o.setAttribute("aria-label",V("paused.dialog"));const r=n.createElement("div");r.className="snag-paused-box",r.setAttribute("role","status");const l=n.createElement("p");l.textContent=V("paused.dialog");const u=n.createElement("div");u.className="snag-paused-actions";const a=n.createElement("button");a.type="button",a.textContent=V("paused.close"),a.addEventListener("click",()=>w()),u.append(a),r.append(l,u),o.append(r);let d=!1;function m(){if(!d){(t??e).appendChild(o);try{o.showModal(),d=!0}catch{o.setAttribute("open",""),d=!0}}}function w(){if(d){d=!1;try{o.close()}catch{o.removeAttribute("open")}o.remove()}}return o.addEventListener("close",()=>{d=!1,o.remove()}),{show:m,hide:w,destroy(){w(),o.remove()}}}const $r=Symbol.for(bn.original),Wn=Symbol.for(bn.wrapped),at=()=>{};function Er(e,t,n){let o;try{o=e[t]}catch{return at}if(typeof o!="function"||o[Wn])return at;const r=o,l=n(r);let u=!1;const a=function(...d){return u?r.apply(this,d):l.apply(this,d)};try{const d=a;d[Wn]=!0,d[$r]=r,Object.defineProperty(a,"name",{value:r.name,configurable:!0}),Object.defineProperty(a,"length",{value:r.length,configurable:!0})}catch{}try{e[t]=a}catch{return at}return e[t]!==a?at:()=>{let d;try{d=e[t]}catch{d=void 0}if(d===a)try{e[t]=r;return}catch{}u=!0}}function Cr(e,t){const n=[];let o=0;const r=()=>{o||(o=e.requestAnimationFrame(()=>{o=0,t.onResize()}))};e.addEventListener("resize",r),n.push(()=>{o&&e.cancelAnimationFrame(o),e.removeEventListener("resize",r)}),e.visualViewport?.addEventListener("resize",r),n.push(()=>e.visualViewport?.removeEventListener("resize",r));const l=()=>void e.setTimeout(t.onResize,250);e.addEventListener("orientationchange",l),n.push(()=>e.removeEventListener("orientationchange",l));let u=e.location.pathname;const a=()=>{const z=e.location.pathname;z!==u&&(u=z,t.onRoute())},d=e.navigation;if(d){const z=()=>void e.setTimeout(a,0);d.addEventListener("navigatesuccess",z),n.push(()=>d.removeEventListener("navigatesuccess",z))}else for(const z of["pushState","replaceState"])n.push(Er(e.history,z,se=>function(...q){const G=se.apply(this,q);return e.setTimeout(a,0),G}));const m=e.document;let w=!0;try{m.documentElement.matches(":modal")}catch{w=!1}const C=()=>{const z=m.querySelectorAll("dialog[open]");if(!w)return z.length>0;for(const se of z)if(se.matches(":modal"))return!0;return!1};let p=!1;const P=()=>{const z=C();z!==p&&(p=z,t.onModal(z))};m.addEventListener("toggle",P,!0),n.push(()=>m.removeEventListener("toggle",P,!0));const F=new MutationObserver(P);F.observe(m.documentElement,{subtree:!0,attributes:!0,attributeFilter:["open"]}),n.push(()=>F.disconnect());const $=()=>void e.setTimeout(a,0);return e.addEventListener("popstate",$),n.push(()=>e.removeEventListener("popstate",$)),{destroy(){for(const z of n)z();n.length=0}}}function Tr(e,t){try{e.sessionStorage.setItem(ce.handoff,JSON.stringify({openThreadId:t}))}catch{}}function Rr(e){try{const t=e.sessionStorage.getItem(ce.handoff);if(t===null)return null;e.sessionStorage.removeItem(ce.handoff);const n=JSON.parse(t);return typeof n.openThreadId=="string"?n.openThreadId:null}catch{return null}}function _r(){return{statuses:[],read:"all",pageOnly:!1,newOnly:!1,sort:"page"}}const Ir=["open","progress","review","resolved"];function Pr(e,t,n){if(t.statuses.length>0&&Ir.includes(e.status)&&!t.statuses.includes(e.status)||t.by&&e.createdBy.id!==t.by||t.page&&e.route!==t.page)return!1;if(t.read!=="all"&&n){const o=Mr(e,n);if(t.read==="unread"&&!o||t.read==="read"&&o)return!1}return!0}function Mr(e,t){const n=t.get(e.id)??0;return Date.parse(e.updatedAt)>n}function zr(e,t,n){const o=e.visualViewport;let r=0;const l=()=>{if(r=0,!o)return;const a=o.offsetLeft,d=o.offsetTop;t.style.translate=a||d?`${a}px ${d}px`:"",t.style.width=`${o.width}px`,t.style.height=`${o.height}px`,n?.(o.scale)},u=()=>{r||(r=e.requestAnimationFrame(l))};return o?.addEventListener("resize",u,{passive:!0}),o?.addEventListener("scroll",u,{passive:!0}),u(),()=>{r&&e.cancelAnimationFrame(r),o?.removeEventListener("resize",u),o?.removeEventListener("scroll",u)}}const Or=/^eyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/,Dr=/^[a-f0-9]{32,}$/i,Lr=/^(?=[A-Za-z0-9_-]{24,}$)(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9_-]+$/,Nr="[redacted]";function Un(e){return e.includes("/")?e.split("/").map(t=>Or.test(t)||Dr.test(t)||Lr.test(t)?Nr:t).join("/"):e}const Hr=/\/index\.(html?|php)$/i;function Wr(e){if(!e.startsWith("/"))return e;let t=e.replace(Hr,"/");return t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t.toLowerCase()}function Ur(e){try{const t=e.querySelector(`meta[name="${Lo.route}"]`)?.getAttribute("content")?.trim();return!t||t.length>512||!t.startsWith("/")?null:t}catch{return null}}function jr(e,t){const n=t??Ur(e);return Wr(n??Un(e.location.pathname))}const Fr=[/^utm_/,/^(gclid|gbraid|wbraid|fbclid|msclkid|ttclid|twclid|igshid|yclid|li_fat_id)$/,/^(mc_cid|mc_eid|_hsenc|_hsmi|vero_id|oly_enc_id|oly_anon_id)$/,/^_vercel_/,/^__vercel_/,/^_rsc$/],Br=[...wt.query,...wt.fragment];function Zr(e,t=[]){return Br.includes(e)||t.includes(e)?!0:Fr.some(n=>n.test(e))}function Vr(e,t={}){const n=t.significantQueryParams??[];if(n!=="*"&&n.length===0)return;let o;try{o=new URLSearchParams(e)}catch{return}const r={};for(const[l,u]of o)Zr(l,t.ignoredQueryParams??[])||n!=="*"&&!n.includes(l)||(r[l]=u);return Object.keys(r).length>0?r:void 0}function Yr(e,t,n={}){const o=n.significantQueryParams??[];if(o==="*"){const r=e??{},l=t??{},u=new Set([...Object.keys(r),...Object.keys(l)]);for(const a of u)if(r[a]!==l[a])return!1;return!0}for(const r of o)if((e?.[r]??void 0)!==(t?.[r]??void 0))return!1;return!0}const Xr=120,Kr=1e3,Jr=200,qr=1e4;function Qr(e,t,n){const o=t.MutationObserver;if(typeof o!="function")return{destroy:()=>{}};let r=!1,l=null,u=!1,a=!1,d=0,m=C(),w=0;function C(){return t.performance?.now?.()??0}const p=new o(()=>{r=!0,d++,F()});function P(){const z=C();return z-m>=1e3&&(d>Jr&&(w=z+qr),d=0,m=z),z<w?Kr:Xr}function F(){l||(l=setTimeout($,P()))}function $(){if(l=null,!!r){if(u){a=!0;return}r=!1,u=!0;try{n()}finally{u=!1,a&&(a=!1,r=!0,F())}}}return p.observe(e.documentElement,{childList:!0,subtree:!0}),{destroy(){p.disconnect(),l&&clearTimeout(l),l=null}}}const Gr="0.0.0",es={capture:Ie.capture,"anchor-ext":Ie.anchorExt,"anchor-fuzzy":Ie.anchorFuzzy,crumbs:Ie.crumbs,screenshot:Ie.screenshot,dock:Ie.dock,text:Ie.text},jn=new Map,Bt=new Map,Fn=new Map;function ts(e,t,n){const o=new URL(t,n.location.href).href,r=new URL(es[e],o);r.searchParams.set("cv",Gr);const l=Fn.get(e)??0;return l>0&&r.searchParams.set("r",String(l)),Fn.set(e,l+1),r.href}async function Pe(e,t,n=document){const o=jn.get(e);if(o)return{ok:!0,mod:o};const r=Bt.get(e);if(r)return r;const l=(async()=>{for(let u=0;u<2;u++)try{const a=await import(ts(e,t,n));return jn.set(e,a),{ok:!0,mod:a}}catch{}return{ok:!1,reason:"unavailable"}})();Bt.set(e,l);try{return await l}finally{Bt.delete(e)}}const ns="composer",Zt=e=>ce.draft(e,ns),os=ce.draft("\0","").split("\0")[0];function rs(e){try{return e.body.trim()?(localStorage.setItem(Zt(e.route),JSON.stringify(e)),!0):(Bn(e.route),!0)}catch{return!1}}function ss(e){try{const t=localStorage.getItem(Zt(e));if(!t)return null;const n=JSON.parse(t);return!n||typeof n.body!="string"||!n.anchor||n.route!==e?null:n}catch{return null}}function Bn(e){try{localStorage.removeItem(Zt(e))}catch{}}function Vt(){try{for(let e=0;e<localStorage.length;e++){const t=localStorage.key(e);if(t&&t.startsWith(os))return!0}return!1}catch{return!1}}const as="http://www.w3.org/2000/svg";function Me(e,t,n,o=[]){const r=e.createElementNS(as,t);for(const l in n)r.setAttribute(l,n[l]);for(const l of o)r.appendChild(l);return r}const Yt=(e,t="16",n="16",o="0 0 16 16")=>({width:t,height:n,viewBox:o,fill:"none","aria-hidden":"true"}),is=e=>Me(e,"svg",Yt(),[Me(e,"path",{d:"M8 3v10M3 8h10",stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round"})]),cs=e=>Me(e,"svg",Yt(),[Me(e,"rect",{x:"2.25",y:"3.25",width:"11.5",height:"9.5",rx:"1.75",stroke:"currentColor","stroke-width":"1.5"}),Me(e,"path",{d:"M9.5 3.5v9",stroke:"currentColor","stroke-width":"1.5"})]),ls=e=>Me(e,"svg",{...Yt(e,"10","16","0 0 10 16"),fill:"currentColor"},[Me(e,"g",{fill:"currentColor"},[4,8,12].flatMap(t=>[3,7].map(n=>Me(e,"circle",{cx:String(n),cy:String(t),r:"1"}))))]),ds=` .snag-tb{position:fixed;z-index:${Ke.toolbar};display:flex;align-items:center;gap:2px;padding:4px;border-radius:calc(${A.radius} + 4px);background:${A.bg};color:${A.fg};box-shadow:${A.shadow};font:500 13px/1 ${A.font};pointer-events:auto;user-select:none;border:1px solid ${A.border}}.snag-tb{transition:inset-inline-end ${A.motion}}.snag-tb--fine{inset-inline-end:calc(20px + env(safe-area-inset-right) + var(${M.dockW},0px));inset-block-end:calc(20px + env(safe-area-inset-bottom));transition:inset-inline-end ${A.motion}}.snag-tb--coarse{inset-inline:0;inset-block-end:0;border-radius:14px 14px 0 0;padding:6px 10px calc(6px + env(safe-area-inset-bottom));justify-content:center;gap:4px;flex-direction:column}.snag-grabber{width:36px;height:4px;border-radius:2px;background:${A.muted};margin:2px auto 6px}.snag-row{display:flex;align-items:center;gap:2px}.snag-grip{display:flex;align-items:center;padding:0 4px;color:${A.muted};cursor:grab;touch-action:none}.snag-grip:active{cursor:grabbing}.snag-seg{display:flex;background:${A.surface};border-radius:${A.radius};padding:2px;position:relative}.snag-seg::before{content:"";position:absolute;inset-block:2px;inset-inline-start:var(${M.thumbX},0);width:var(${M.thumbW},0);background:${A.accent};border-radius:calc(${A.radius} - 2px);pointer-events:none;transition:inset-inline-start ${A.motion},width ${A.motion}}.snag-seg>.snag-b[aria-pressed="true"]{background:transparent;color:${A.onAccent}}.snag-seg>.snag-b{z-index:1}.snag-b{appearance:none;border:0;background:transparent;color:inherit;font:inherit;padding:6px 11px;border-radius:calc(${A.radius} - 2px);cursor:pointer;display:flex;align-items:center;gap:6px;position:relative;min-height:32px;transition:background ${A.motion}}.snag-b:hover:not(:disabled){background:color-mix(in srgb,currentColor 12%,transparent)}.snag-b:disabled{opacity:.4;cursor:not-allowed}.snag-b[aria-pressed="true"]{background:${A.accent};color:${A.onAccent}}.snag-b:focus-visible{outline:2px solid ${A.focus};outline-offset:2px}.snag-icon{padding:6px 9px}@media (pointer:coarse){.snag-b{min-height:44px;min-width:44px;padding:6px 14px}.snag-icon{padding:6px 14px}}.snag-puck .snag-row>:not([aria-expanded]){display:none}.snag-puck{padding:4px;border-radius:50%}.snag-puck [aria-expanded]{min-width:44px;min-height:44px;border-radius:50%}`;function us(e,t){const n=e.ownerDocument??document,o=t.coarsePointer??n.defaultView?.matchMedia?.("(pointer: coarse)").matches??!1;rt(e,"toolbar",ds);const r=n.createElement("div");r.className=`snag-tb ${o?"snag-tb--coarse":"snag-tb--fine"}`,r.setAttribute("role","toolbar"),r.setAttribute("aria-label",V("toolbar.aria"));const l=n.createElement("div");l.className="snag-grabber",l.setAttribute("aria-hidden","true");const u=n.createElement("div");u.className="snag-row";const a=n.createElement("span");a.className="snag-grip",a.setAttribute("aria-hidden","true"),a.appendChild(ls(n));const d=n.createElement("div");d.className="snag-seg",d.setAttribute("role","group"),d.setAttribute("aria-label",V("toolbar.group"));const m=(c,T,b)=>{const I=n.createElement("button");return I.type="button",I.className=`snag-b ${c}`,I.setAttribute("aria-label",T),typeof b=="string"?I.textContent=b:I.appendChild(b),I},w=m("",V("toolbar.browse"),V("toolbar.browse")),C=m("",V("toolbar.comments"),V("toolbar.comments")),p=m("snag-icon",V("toolbar.add"),is(n)),P=m("snag-icon",V("toolbar.panel"),cs(n));P.setAttribute("aria-expanded","false"),d.append(w,C),o||u.appendChild(a),u.append(d,p,P),o&&r.appendChild(l),r.appendChild(u),(t.parent??e).appendChild(r);const F=()=>{e.host.style.setProperty(M.tbH,`${r.offsetHeight}px`)};F();let $=null;function z(c,T){const b=n.defaultView,I=r.offsetWidth,L=r.offsetHeight,W=Zn(c,8,Math.max(8,b.innerWidth-I-8)),X=Zn(T,8,Math.max(8,b.innerHeight-L-8));$={left:W,top:X},r.style.left=`${W}px`,r.style.top=`${X}px`,r.style.right="auto",r.style.bottom="auto"}const se=()=>{F(),$&&z($.left,$.top)},q=n.defaultView;if(q?.addEventListener("resize",se),w.addEventListener("click",()=>t.onState("browse")),C.addEventListener("click",()=>t.onState("comments")),p.addEventListener("click",()=>t.onState(G==="add"?"comments":"add")),P.addEventListener("click",()=>t.onPanel()),!o){let c=null;a.addEventListener("pointerdown",b=>{c={x:b.clientX,y:b.clientY,r:r.getBoundingClientRect()},a.setPointerCapture(b.pointerId),b.preventDefault()}),a.addEventListener("pointermove",b=>{c&&z(c.r.left+(b.clientX-c.x),c.r.top+(b.clientY-c.y))});const T=b=>{c=null,a.hasPointerCapture(b.pointerId)&&a.releasePointerCapture(b.pointerId)};a.addEventListener("pointerup",T),a.addEventListener("pointercancel",T)}let G="browse";function J(c){G=c,w.setAttribute("aria-pressed",String(c==="browse")),C.setAttribute("aria-pressed",String(c!=="browse")),p.setAttribute("aria-pressed",String(c==="add")),h()}function h(){const c=d.querySelector('.snag-b[aria-pressed="true"]'),T=d.getBoundingClientRect(),b=c?.getBoundingClientRect();if(!c||!b?.width){d.style.setProperty(M.thumbW,"0px");return}const I=n.defaultView?.getComputedStyle(d),L=I?.direction==="rtl",W=parseFloat((L?I?.paddingRight:I?.paddingLeft)??"0")||0,X=(L?T.right-b.right:b.left-T.left)-W;d.style.setProperty(M.thumbW,`${Math.round(b.width)}px`),d.style.setProperty(M.thumbX,`${Math.max(0,Math.round(X))}px`)}function g(c){p.disabled=c,c?p.title=V("error.panels.add"):p.removeAttribute("title")}function _(c){p.setAttribute("aria-label",V(c?"toolbar.add.draft":"toolbar.add"))}function O(c){C.setAttribute("aria-label",c!==null&&c>0?V("toolbar.comments.unresolved",{n:jo(c)}):V("toolbar.comments"))}J("browse"),O(0);function Z(c){r.classList.toggle("snag-puck",c),c||h()}function D(c){r.hidden=c,c||h(),F()}return{el:r,setState:J,setCount:O,setDegraded:g,setDraft:_,setPuck:Z,setConcealed:D,destroy(){q?.removeEventListener("resize",se),e.host.style.removeProperty(M.tbH),r.remove()}}}const Zn=(e,t,n)=>e<t?t:e>n?n:e,Vn=24;function fs(e,t){const n=e.innerHeight,o=t.querySelector(".snag-dk");if(!o)return{top:0,bottom:n};const r=o.getBoundingClientRect();return r.height>=n-1?{top:0,bottom:n}:{top:0,bottom:Math.max(0,r.top)}}function hs(e,t,n){const o=n.anchor.rect;if(!o)return;const r=n.anchor.offset??{fy:.5},l=o.y+o.h*r.fy,u=fs(e,t),a=l-e.scrollY;if(a>=u.top+Vn&&a<=u.bottom-Vn)return;const d=e.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;e.scrollTo({top:Math.max(0,l-(u.top+u.bottom)/2),behavior:d?"auto":"smooth"})}function Xt(){const e=new Uint8Array(16);crypto.getRandomValues(e);const t=Date.now();e[0]=Math.floor(t/2**40)&255,e[1]=Math.floor(t/2**32)&255,e[2]=Math.floor(t/2**24)&255,e[3]=Math.floor(t/2**16)&255,e[4]=Math.floor(t/2**8)&255,e[5]=t&255,e[6]=e[6]&15|112,e[8]=e[8]&63|128;const n=Array.from(e,o=>o.toString(16).padStart(2,"0")).join("");return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}const ps=()=>xt.thread+Xt(),Yn=()=>xt.comment+Xt(),ms=()=>xt.attachment+Xt(),gs={attachments:"direct",realtime:"none",anchorReports:!1,identity:["guest"],export:["json","md"],serverSideSearch:!1,privateThreads:!1,assignees:!1};function ys(){const e=ce.threads("probe","probe");try{return localStorage.setItem(e,"1"),localStorage.removeItem(e),!0}catch(t){return Xn(t)}}function bs(e,t,n){const o=ce.threads(e,t);function r(){let a=null;try{a=localStorage.getItem(o)}catch{return[]}if(!a)return[];try{const d=JSON.parse(a);return Array.isArray(d)?d.filter(ws):[]}catch{return[]}}function l(a){try{localStorage.setItem(o,JSON.stringify(a))}catch(d){if(!Xn(d))return;throw new Ht("local_quota_exceeded")}}const u=a=>({...a,updatedAt:new Date().toISOString()});return{kind:"local",capabilities:gs,async init(a){return{uid:a.uid,env:a.env,features:{screenshots:!0,uploads:!1}}},async listThreads(a={}){let d=r();return a.route!==void 0&&(d=d.filter(m=>m.route===a.route)),a.status?.length&&(d=d.filter(m=>a.status.includes(m.status))),{data:d,serverTime:new Date().toISOString()}},async getThread(a){return r().find(d=>d.id===a)??null},async createThread(a){const d=Rn(a);return l([...r(),d]),d},async patchThread(a,d){const m=r(),w=m.findIndex(F=>F.id===a);if(w<0)return null;const{assignee:C,...p}=d,P=u({...m[w],...vs(p)});return m[w]=P,l(m),P},async deleteThread(a){const d=r(),m=d.find(C=>C.id===a),w=d.filter(C=>C.id!==a);w.length!==d.length&&l(w);for(const C of m?.attachments??[])n?.del(C.id).catch(()=>{})},async uploadAttachment(a,d){if(!n)throw new Ht("attachments_unsupported");const m=ms();return await n.put(m,{blob:a,uid:e,env:t,kind:d.kind,...d.width!==void 0?{width:d.width}:{},...d.height!==void 0?{height:d.height}:{},createdAt:Date.now()}),{id:m,kind:d.kind,url:"",...d.width!==void 0?{width:d.width}:{},...d.height!==void 0?{height:d.height}:{},bytes:a.size,contentType:a.type}},async createComment(a,d){const m=r(),w=m.findIndex(p=>p.id===a);if(w<0)return null;const C={id:d.id,snagId:a,body:d.body,author:d.author,createdAt:new Date().toISOString()};return m[w]=u({...m[w],comments:[...m[w].comments,C]}),l(m),C},async patchComment(a,d){const m=r();for(let w=0;w<m.length;w++){const C=m[w].comments.find(P=>P.id===a);if(!C)continue;const p={...C,body:d};return m[w]=u({...m[w],comments:m[w].comments.map(P=>P.id===a?p:P)}),l(m),p}return null},async deleteComment(a){const d=r(),m=d.findIndex(w=>w.comments.some(C=>C.id===a));m<0||(d[m]=u({...d[m],comments:d[m].comments.filter(w=>w.id!==a)}),l(d))}}}function vs(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Xn(e){return e instanceof Error?e.name==="QuotaExceededError"||e.name==="NS_ERROR_DOM_QUOTA_REACHED"||e.code===22||e.code===1014:!1}function ws(e){if(typeof e!="object"||e===null)return!1;const t=e;return typeof t.id=="string"&&typeof t.key=="string"&&typeof t.route=="string"&&typeof t.anchor=="object"&&t.anchor!==null&&typeof t.anchor.label=="string"&&Array.isArray(t.comments)}function xs(e,t,n=()=>Date.now()){const o=ce.seen(e,t);let r=null;function l(){if(r)return r;try{const a=localStorage.getItem(o),d=a?JSON.parse(a):{};return r=typeof d=="object"&&d!==null&&!Array.isArray(d)?d:{}}catch{return r={}}}function u(a){r=a;try{localStorage.setItem(o,JSON.stringify(a))}catch{}}return{map:()=>new Map(Object.entries(l())),mark(a){u({...l(),[a]:n()})},markAll(a){const d=n(),m={...l()};for(const w of a)m[w.id]=d;u(m)}}}function it(){let e=null;try{e=localStorage.getItem(Dt)}catch{return{}}if(!e)return{};if(e[0]!=="{")return{name:e};try{const t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function Kn(e){try{localStorage.setItem(Dt,JSON.stringify(e))}catch{}}function Kt(){const e=it();return{name:typeof e.name=="string"?e.name:"",...e.email?{email:e.email}:{}}}function Jn(e){return it().projects?.[e]?.holderId}function Ss(e){const t=it().projects?.[e]?.holderSecret;return t&&/^[\w-]{43}$/.test(t)?t:void 0}function As(e,t,n){const o=it();Kn({...o,projects:{...o.projects,[e]:{holderId:t,holderSecret:n}}})}function ks(e,t){const n=it(),o=n.projects?.[e];o&&Kn({...n,projects:{...n.projects,[e]:{...o,holderId:t}}})}const Ue=e=>ce.session(e);function qn(e){if(!e)return null;const t=JSON.parse(e);return typeof t?.token=="string"&&typeof t?.refreshableUntil=="number"?t:null}function Je(e){try{const t=qn(sessionStorage.getItem(Ue(e)));if(t)return t;const n=qn(localStorage.getItem(Ue(e)));return n?.member?n:null}catch{return null}}function Jt(e,t){try{t.member?(localStorage.setItem(Ue(e),JSON.stringify(t)),sessionStorage.removeItem(Ue(e))):sessionStorage.setItem(Ue(e),JSON.stringify(t))}catch{}}function ct(e){try{sessionStorage.removeItem(Ue(e)),localStorage.removeItem(Ue(e))}catch{}}const $s=(e,t=Date.now())=>t>e.expiresAt-3e4,qt=(e,t=Date.now())=>t>=e.refreshableUntil;class je extends Error{code;status;constructor(t,n,o){super(o),this.name="HttpAdapterError",this.status=t,this.code=n}}function Es(e){const{offset:t,testId:n,domId:o,page:r,schemaVersion:l,...u}=e;return{...u,...n?{testid:n}:{},...o?{domid:o}:{},...t?{offset:{fx:t.x,fy:t.y}}:{}}}function Cs(e,t){const n=e.url??"",o=/^https?:/i.test(n)?n:n?`${t}${n.startsWith("/")?"":"/"}${n}`:`${t}/api/v1/attachments/${encodeURIComponent(e.id)}/blob`;return{...e,url:o}}function kt(e,t,n){return{id:e.id,route:e.anchor?.page?.route??"",key:e.key,status:e.status,anchor:Es(e.anchor),anchorState:e.anchorState,context:e.context,comments:e.comments??[],createdBy:e.createdBy,assignee:e.assignee??null,createdAt:e.createdAt,updatedAt:e.updatedAt,...e.resolvedAt?{resolvedAt:e.resolvedAt}:{},...e.attachments?.length?{attachments:e.attachments.map(o=>Cs(o,n))}:{},...t?{scope:{environment:t}}:{}}}function Ts(e,t){const{offset:n,testid:o,domid:r,...l}=e;return{...l,schemaVersion:gn,...o?{testId:o}:{},...r?{domId:r}:{},offset:n?{x:n.fx,y:n.fy}:{x:.5,y:.5},page:{route:t,pathname:location.pathname,origin:location.origin}}}function Rs(e,t){const n=o=>/^[\d.]+$|:/.test(o)?o:o.split(".").slice(-2).join(".");return n(e)===n(t)}const Qn=10*6e4;function _s(e,t,n,o={}){const r=e.replace(/\/+$/,""),l=`${r}/api/v1/projects/${encodeURIComponent(t)}`;let u=o.reviewToken,a=Je(t),d=[];const m=ce.silent(t);let w=0,C=Promise.resolve(!1);function p(){if(u||Date.now()-w<Qn)return C;try{if(!Rs(location.hostname,new URL(r).hostname)||localStorage.getItem(m)||Date.now()-Number(sessionStorage.getItem(m))<Qn)return C}catch{}return w=Date.now(),C=(async()=>{try{const h=await fetch(`${l}/sessions/member/silent`,{method:"POST",credentials:"include",...n?{body:JSON.stringify({environment:n})}:{}});if(h.status===201)return F(await h.json()),w=0,!0}catch{}try{sessionStorage.setItem(m,String(Date.now()))}catch{}return!1})()}let P=null;function F(h){a={token:h.sessionToken,expiresAt:Date.parse(h.expiresAt),refreshableUntil:Date.parse(h.refreshableUntil),reviewerId:h.reviewer.id,permissions:h.permissions,member:h.reviewer.name,...h.moderator?{moderator:!0}:{}},Jt(t,a),o.onSessionStarted?.()}const $=()=>a;async function z(h=!1){const g=a&&!qt(a)?a.token:null,_=!!g&&!u&&!h,O=_?void 0:u?{kind:"link",token:u,name:Kt().name||void 0}:{kind:"guest",name:Kt().name||"Anonymous",holderId:Jn(t),holderSecret:Ss(t)};let Z;try{Z=await fetch(`${l}/sessions`,{method:"POST",credentials:"omit",headers:{"content-type":"application/json",...g?{Authorization:`Bearer ${g}`}:{}},body:JSON.stringify({...n?{environment:n}:{},...O?{identity:O}:{},client:{widget:Co,schema:gn}})})}catch(T){throw new je(0,"network_error",T.message)}finally{u=void 0}if(!Z.ok){const b=(await Z.json().catch(()=>null))?.error?.code??"unauthorized",I=_&&!!a?.member;if(ct(t),a=null,I&&Z.status===401&&await p())return $();throw b==="session_revoked"||b==="token_revoked"?o.onSessionEnded?.("revoked"):Z.status===401&&o.onSessionEnded?.("expired"),new je(Z.status,b,"This review session is not valid.")}const D=await Z.json();D.holderSecret&&D.reviewer?As(t,D.reviewer.id,D.holderSecret):D.reviewer&&ks(t,D.reviewer.id);const c=D.round?.number??(_||h?a?.round:void 0);return a={token:D.sessionToken,expiresAt:Date.parse(D.expiresAt),refreshableUntil:Date.parse(D.refreshableUntil),reviewerId:D.reviewer?.id??a?.reviewerId??"",permissions:D.permissions??a?.permissions??[],...c!==void 0?{round:c}:{},..._&&a?.member?{member:a.member}:{},..._&&a?.member&&a.moderator?{moderator:!0}:{}},Jt(t,a),O&&(q=O.name??null),o.onSessionStarted?.(),a}async function se(){if(a){if(qt(a)){ct(t),a=null,await p()||o.onSessionEnded?.("expired");return}await z().catch(()=>{})}}let q=null;async function G(){if(await(P??=a?.member?Promise.resolve():p()),a&&qt(a)&&(ct(t),a=null,q=null,!await p()))return o.onSessionEnded?.("expired"),null;const h=Kt().name||null,g=a!==null&&!a.member&&h!==null&&h!==q;if(!a||$s(a)||u||g)try{await z(g)}catch(_){if(!(_ instanceof je)||_.status===0)throw _;return null}return a?.token??null}async function J(h,g,_=!1){const O=await G();let Z;try{Z=await fetch(l+h,{...g,headers:{"content-type":"application/json",...O?{Authorization:`Bearer ${O}`}:{},...g?.headers??{}},credentials:"omit"})}catch(D){throw new je(0,"network_error",D.message)}if(!Z.ok){const D=await Z.json().catch(()=>null),c=D?.error?.code??"http_error";if(Z.status===401&&!_&&c!=="session_revoked"){const T=!!a?.member;return ct(t),a=null,T&&await p(),J(h,g,!0)}throw new je(Z.status,c,D?.error?.message??`The server answered ${Z.status}.`)}return await Z.json()}return{kind:"http",capabilities:{attachments:"none",realtime:"none",anchorReports:!0,identity:["guest"],export:[],serverSideSearch:!1,privateThreads:!1,assignees:!0},async init(h){const g=await J("/config");return this.capabilities.attachments=g.features.screenshots?"direct":"none",d=g.rounds??[],{uid:h.uid,env:h.env,features:g.features,...g.rounds?{rounds:g.rounds}:{},...g.writable===void 0?{}:{writable:g.writable},...g.reason===void 0?{}:{reason:g.reason}}},async reportAnchors(h){if(h.length!==0)for(let g=0;g<h.length;g+=50)try{await J("/anchor-reports",{method:"POST",body:JSON.stringify({reports:h.slice(g,g+50)})})}catch{return}},revalidate:se,member:()=>a?.member??null,adoptSession(h){try{localStorage.removeItem(m)}catch{}F(h)},signOut(){ct(t),a=null,q=null;try{localStorage.setItem(m,"out")}catch{}},getRound(){return a?.round??Je(t)?.round??null},setRound(h){a&&(a={...a,round:h});const g=Je(t);g&&Jt(t,{...g,round:h})},async fetchForeignImage(h){try{const g=await G(),_=await fetch(`${l}/image?src=${encodeURIComponent(h)}`,{credentials:"omit",...g?{headers:{Authorization:`Bearer ${g}`}}:{}});if(!_.ok)return null;const O=await _.blob();return O.type.startsWith("image/")?O:null}catch{return null}},async uploadAttachment(h,g){const _=await G(),O=await fetch(`${l}/attachments`,{method:"POST",credentials:"omit",headers:{"content-type":h.type||"image/webp",[Lt.attachmentKind]:g.kind,...g.width?{[Lt.attachmentWidth]:String(g.width)}:{},...g.height?{[Lt.attachmentHeight]:String(g.height)}:{},..._?{Authorization:`Bearer ${_}`}:{}},body:h});if(!O.ok){const D=await O.json().catch(()=>null);throw new je(O.status,D?.error?.code??"upload_failed",D?.error?.message??"Upload failed.")}const Z=await O.json();return{id:Z.id,kind:g.kind,contentType:Z.contentType,byteSize:Z.byteSize,...g.width?{width:g.width}:{},...g.height?{height:g.height}:{},url:`${r}/api/v1/attachments/${Z.id}/blob`}},async listThreads(h){await G();const g=new URLSearchParams;n&&g.set("env",n),h?.route&&g.set("route",h.route),a?.round&&g.set("round",String(a.round));const _=await J(`/threads?${g}`);return{data:_.data.map(O=>kt(O,n,r)),..._.nextCursor?{nextCursor:_.nextCursor}:{},deleted:[],serverTime:_.serverTime}},async getThread(h){return(await this.listThreads()).data.find(_=>_.id===h)??null},async getThreadByKey(h){const g=new URLSearchParams({key:h});n&&g.set("env",n);const O=(await J(`/threads?${g}`)).data[0];return O?kt(O,n,r):null},async createThread(h){const g=a?.round,_=d.some(D=>D.number===g&&!D.closed)?g:void 0,O=D=>J("/threads",{method:"POST",body:JSON.stringify({id:h.id,anchor:Ts(h.anchor,h.route),anchorState:h.anchorState,context:h.context,...n||D?{scope:{...n?{environment:n}:{},...D?{round:D}:{}}}:{},createdBy:{name:h.createdBy.name},...h.comment?{comment:{id:h.comment.id,body:h.comment.body}}:{},...h.attachments?.length?{attachments:h.attachments.map(c=>c.id)}:{}})}),Z=await O(_).catch(D=>{if(_&&D instanceof je&&D.code.startsWith("round_"))return O();throw D});return kt(Z,n,r)},async patchThread(h,g){const _="assignee"in g;if(!g.status&&!_)return null;const O=await J(`/threads/${encodeURIComponent(h)}`,{method:"PATCH",body:JSON.stringify({...g.status?{status:g.status}:{},..._?{assignee:g.assignee??null}:{}})});return kt(O,n,r)},async listAssignees(h){return(await J(`/assignees${h?`?q=${encodeURIComponent(h)}`:""}`)).data??[]},async deleteThread(h){await J(`/threads/${encodeURIComponent(h)}`,{method:"DELETE"})},isMine(h){return h.id?h.id===(a??Je(t))?.reviewerId||h.id===Jn(t):!1},canModerate(){const h=a??Je(t);return!!h?.member&&!!h.moderator},can(h){return(a??Je(t))?.permissions.includes(h)??!1},async createComment(h,g){const _=await J(`/threads/${encodeURIComponent(h)}/comments`,{method:"POST",body:JSON.stringify({id:g.id,body:g.body})});return{id:_.id,snagId:h,body:_.body,author:_.author,createdAt:_.createdAt}},async patchComment(h,g){return await J(`/comments/${encodeURIComponent(h)}`,{method:"PATCH",body:JSON.stringify({body:g})}),null},async deleteComment(h){await J(`/comments/${encodeURIComponent(h)}`,{method:"DELETE"})}}}async function Is(e,t){if(e.url&&/^https?:/i.test(e.url))try{const n=await fetch(e.url,{credentials:"omit"});if(!n.ok)return null;const o=await n.blob();return o.type&&!o.type.startsWith("image/")?null:o}catch{return null}return t(e.id)}const Ps=64,Ms=4096,zs=e=>ce.counts(e),Os=e=>e.filter(t=>t.status!=="resolved").length;function Ds(e,t,n){const o=new Map;for(const a of t){const d=o.get(a.route)??{n:0,seen:""};a.status!=="resolved"&&d.n++,a.updatedAt>d.seen&&(d.seen=a.updatedAt),o.set(a.route,d)}o.has(n)||o.set(n,{n:0,seen:new Date().toISOString()});const l=[...o.entries()].sort((a,d)=>d[1].seen.localeCompare(a[1].seen)).slice(0,Ps);l.some(([a])=>a===n)||(l[l.length-1]=[n,o.get(n)]);let u={v:1,p:Os(t),r:Object.fromEntries(l.map(([a,d])=>[a,d.n])),t:new Date().toISOString()};JSON.stringify(u).length>Ms&&(u={...u,r:{}});try{localStorage.setItem(zs(e),JSON.stringify(u))}catch{return null}return u}function Ls(e,t){return e?.r[t]??0}const Ns="pass(?:word|wd)?|pwd|secret|token|api[_-]?key|apikey|auth(?:orization)?|credential|session|sid|cookie|jwt|bearer|otp|mfa|totp|cvv|cvc|ssn|nino|iban|card(?:[_-]?number)?|account[_-]?number|private[_-]?key|signature|client[_-]?secret|refresh[_-]?token|access[_-]?token",Hs=new RegExp(`(["'\`]?)(?<![A-Za-z0-9])(?:${Ns})[\\w-]*\\b\\1?\\s*[:=]\\s*(?:(["'\`])((?:\\\\.|(?!\\2)[^\\\\])*)\\2|([^\\s,;&}\\])]{3,}))`,"gi"),Ws=/^(?:Bearer|Basic|Digest|Negotiate|Token)$/i,Us=(e,t,n,o,r,l,u)=>{if(!n&&Ws.test(r)&&u.slice(l+e.length).startsWith(" [redacted]")||(n?o:r).startsWith("[redacted"))return e;const a=n?`${n}${o}${n}`:r;return e.slice(0,e.length-a.length)+(n?`${n}[redacted]${n}`:"[redacted]")},Gn=/data:[a-z0-9.+-]*\/?[a-z0-9.+-]*;base64,[A-Za-z0-9+/=]{16,}/gi,eo=/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{0,}/g,to=/\b(sk-[A-Za-z0-9]+-[A-Za-z0-9_-]{20,}|sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9]{20,}|(sk|pk|rk)_(live|test)_[A-Za-z0-9]{16,}|gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|glpat-[A-Za-z0-9_-]{16,}|xox[baprs]-[A-Za-z0-9-]{10,}|xapp-[A-Za-z0-9-]{10,}|AKIA[0-9A-Z]{16}|ASIA[0-9A-Z]{16}|AIza[0-9A-Za-z_-]{35}|ya29\.[A-Za-z0-9_-]{20,}|SG\.[A-Za-z0-9_-]{20,}|npm_[A-Za-z0-9]{30,}|dop_v1_[a-f0-9]{40,}|shpat_[a-f0-9]{30,}|sbp_[a-f0-9]{30,}|hf_[A-Za-z0-9]{30,}|nvapi-[A-Za-z0-9_-]{20,})\b/g,js=/\b(Bearer|Basic|Digest|Negotiate|Token)\s+[A-Za-z0-9._~+/=-]{8,}/gi,no=/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z]{2,24})+\b/g,Qt=/\b(?:\d[ -]?){12,18}\d\b/g,oo=/\b(?=[A-Za-z0-9+/]*[a-z])(?=[A-Za-z0-9+/]*[A-Z])(?=[A-Za-z0-9+/]*\d)[A-Za-z0-9+/]{40,}={0,2}\b/g,ro=/\b[0-9a-f]{32,}\b/gi,so=/\b(?=[A-Za-z0-9_-]*[a-z])(?=[A-Za-z0-9_-]*[A-Z])(?=[A-Za-z0-9_-]*\d)[A-Za-z0-9_-]{40,}\b/g,ao=/\b[a-z][a-z0-9]{1,15}(?:_[a-z0-9]{1,15}){0,2}_(?=[A-Za-z0-9_-]*[A-Z])(?=[A-Za-z0-9_-]*\d)[A-Za-z0-9_-]{24,}\b/g,io=/\b[a-z][a-z0-9+.-]*:\/\/[^\s/:@]+:[^\s/@]+@/gi,Fs=/^(?=[A-Za-z0-9_~.+/=-]*[a-z])(?=[A-Za-z0-9_~.+/=-]*[A-Z])(?=[A-Za-z0-9_~.+/=-]*\d)[A-Za-z0-9_~.+/=-]{24,}$/;function Te(e,t){e.lastIndex=0;const n=e.test(t);return e.lastIndex=0,n}function co(e){const t=e.replace(/[ -]/g,"");if(t.length<13||t.length>19)return!1;let n=0,o=!1;for(let r=t.length-1;r>=0;r--){let l=t.charCodeAt(r)-48;o&&(l*=2,l>9&&(l-=9)),n+=l,o=!o}return n%10===0}function Bs(e){Qt.lastIndex=0;for(const t of e.matchAll(Qt))if(co(t[0]))return!0;return!1}function $t(e){let t=e;return t=t.replace(Gn,"data:[redacted]"),t=t.replace(js,"$1 [redacted]"),t=t.replace(Hs,Us),t=t.replace(eo,"[redacted:jwt]"),t=t.replace(to,"[redacted:key]"),t=t.replace(ao,"[redacted:key]"),t=t.replace(io,"[redacted:url-cred]@"),t=t.replace(no,"[redacted:email]"),t=t.replace(Qt,n=>co(n)?"[redacted:card]":n),t=t.replace(so,n=>`[redacted:b64:${n.length}]`),t=t.replace(oo,n=>`[redacted:b64:${n.length}]`),t=t.replace(ro,n=>`[redacted:hex:${n.length}]`),t}const Zs=wt.query,Vs=wt.fragment;function Ys(e,t=[]){let n;try{const o=globalThis.location?.href;n=new URL(e,o)}catch{return $t(e)}n.username="",n.password="";for(const o of[...n.searchParams.keys()]){if(Vs.includes(o)){n.searchParams.set(o,"[redacted]");continue}if(Zs.includes(o))continue;if(!t.includes(o)){n.searchParams.set(o,"[redacted]");continue}const r=n.searchParams.get(o)??"";$t(r)!==r&&n.searchParams.set(o,"[redacted]")}return n.hash&&n.hash.length>1&&(n.hash=t.includes("#")?n.hash:"#[redacted]"),$t(n.toString().replace(/%5Bredacted%5D/gi,"[redacted]"))}function Xs(e){return e.length>120?!0:Te(no,e)||Te(eo,e)||Te(to,e)||Te(ro,e)||Te(oo,e)||Te(Gn,e)||Te(so,e)||Te(ao,e)||Te(io,e)||Fs.test(e)||Bs(e)}const Et={id:"rev_local",name:V("author.unknown"),kind:"guest"},Ks="0.0.0";function lo(e,t){if(e)return{...Et,name:e,...t?{email:t}:{}};try{const n=localStorage.getItem(ce.identity);if(n)return{...Et,name:n[0]==="{"?JSON.parse(n).name??Et.name:n}}catch{}return Et}function Js(e){return`SN-${e.reduce((n,o)=>{const r=Number(o.key.split("-")[1]??0);return Number.isFinite(r)&&r>n?r:n},0)+1}`}let Gt=null;const we=e=>jr(e,Gt);function qs(e,t){const n=xn(),o=n.ownerDocument??document,r=o.defaultView??window,l=t?.config?.site??"local",u=t?.emit??(()=>{}),a=t?.assetBase??"./",d=t?.config?.env??"default";rt(n,"tokens",Zo);const m=Yo(n.host,Vo(t?.config?.theme)),w={},C=t?.config?.storage==="local"?void 0:t?.config?.host,p=C&&l!=="local"?_s(C,l,t?.config?.env,{reviewToken:t?.reviewToken,onSessionEnded:s=>{ie.show(s==="revoked"?"error.linkrevoked":"error.sessionended")},onSessionStarted:()=>ie.hide()}):bs(l,d,{put:(s,i)=>w.put(s,i),del:s=>w.del(s)}),P=xs(l,d);let F=null;p.init({uid:l,env:d}).then(s=>{F=s.rounds??null,X?.update(x()),s.writable===!1&&s.reason==="origin_not_allowed"&&ie.show("error.origin",void 0,{origin:location.origin})}).catch(()=>{});let $=[],z=[];const se=ys();let q=null,G=null,J=!1,h=!1,g=!1,_=null,O=!1;const Z={get:()=>q,unavailable:()=>h||g,newPass:()=>G?.createPassCaches(),fuzzyHit:s=>_?.hit(s)??null,wantFuzzy:(s,i)=>{if(_){_.enqueue(s,i,()=>re());return}O||!G||!i.text?.exact||i.text.exact.length<8||(O=!0,Pe("anchor-fuzzy",a,o).then(f=>{if(!f.ok||!G){g=!0,re();return}_=f.mod.createFuzzyEngine(o,G.fuzzyDeps),Ee()}))},want:s=>{J||!(s.role&&s.accessibleName)&&!s.text?.exact&&!s.path?.length||(J=!0,Pe("anchor-ext",a,o).then(i=>{if(!i.ok){h=!0,re();return}G=i.mod,q=i.mod.resolveExtended,Ee()}))}};let D=null,c=_r();const T=()=>c.statuses.length>0||!!c.by||!!c.page||c.read!=="all",b=wr(n,s=>{if(L==="add"){if(W?.hasText()){W.pulse();return}W?.close(),W=null,pe("comments")}v(s.id)},Z,s=>{D=s,X?X.update(x()):v()});let L=(()=>{try{return sessionStorage.getItem(ce.mode)==="comments"?"comments":"browse"}catch{return"browse"}})(),W=null,X=null,ae=null,Fe=!1,xe=null,Be=!1,Ct=null,Re=null,Se=null,ze=!1;function fe(){return Se?Promise.resolve(Se):ze?Promise.resolve(null):Pe("capture",a,o).then(i=>i.ok?(w.put=i.mod.putBlob,w.del=i.mod.deleteBlob,Se=i.mod):(qe(new Error("chunk unavailable")),null))}function qe(s){ze||(ze=!0,L==="add"&&pe("comments"),te.setDegraded(!0),ie.show("error.capture",{label:"action.retry",run:()=>{ze=!1,te.setDegraded(!1),fe()}}),console.warn(`[${ve}] the capture chunk failed to load`,s))}let Qe=0;function Oe(){const s=new URL(a,o.location.href).href,i=new URL(Ie.panels,s);return i.searchParams.set("cv",Ks),Qe>0&&i.searchParams.set("r",String(Qe)),Qe++,import(i.href)}async function Ae(){if(Be)return null;if(xe)return xe.catch(()=>null);xe=Oe().catch(async()=>(await new Promise(s=>setTimeout(s,1e3)),Oe()));try{return Ct=await xe}catch(s){return xe=null,lt(s),null}}function lt(s){Be=!0,L==="add"&&pe("comments"),te.setDegraded(!0),ie.show("error.panels",{label:"action.retry",run:()=>{Be=!1,te.setDegraded(!1),v(ae)}}),console.warn(`[${ve}] the panels chunk failed to load`,s)}const ke=o.defaultView?.matchMedia?.("(pointer: coarse)").matches??!1;let le=null;async function Tt(){if(le)return;const s=await fe();!s||le||(le=s.createAddChrome(n,ke,{pick:(i,f)=>void k(i,f),announce:et}),le.setActive(L==="add"))}const he=o.createElement("div");he.style.cssText=`position:fixed;left:0;top:0;pointer-events:none;z-index:${Ke.dock}`,n.appendChild(he);const dt=zr(r,he,s=>te.setPuck(s>1.2)),ie=Sr(n,he),Ze=kr(n,he),S=tr(n,{onPick:(s,i)=>void k(s,i),onHover:s=>s?le?.show(s):le?.clear(),onSelectStart:()=>{ke||rn()}});async function k(s,i){if(W?.hasText()){W.pulse();return}W?.close();const[f,R]=await Promise.all([Ae(),fe()]);if(!f||!R)return;const B=R.captureContext({page:R.derivePageRef(o.location,mt()),...yt()});mn(s);const K=R.deriveAnchorLabel(s);y(f,s,i,B,K,R)}function y(s,i,f,R,B,K,Y,He){let be=i;gt=!1;const me=we(o);Pt=!1;const bt=()=>{W=null,Bn(me),te.setDraft(Vt()),pe("comments")},ot=()=>{nt?.abort(),Ne=nt=null,bt()},ge=F?.find(ue=>ue.number===p.getRound?.())?.closed?F.find(ue=>!ue.closed):void 0,We={at:f,label:B,...Y?{initialBody:Y.body,initialName:Y.author,...Y.email?{initialEmail:Y.email}:{}}:{},onDraft:(ue,_e,vt)=>{const Eo=rs({route:me,body:ue,author:_e,...vt?{email:vt}:{},label:B,anchor:He??K.createElementAnchor(i,{point:f,viewportWidth:r.innerWidth,label:B,...K.describeElement(i)}),at:{x:f.x+r.scrollX,y:f.y+r.scrollY},savedAt:new Date().toISOString()});te.setDraft(Vt()),!Eo&&!Pt&&(Pt=!0,ln())},onSend:(ue,_e,vt)=>{bt(),ge&&p.setRound(ge.number),dn(be,f,R,ue,_e,vt,He).then(()=>ge&&Ee())},onRetarget:ue=>{const _e=ue==="up"?K.widen(be):K.narrow(be);_e&&(be=_e,le?.show(_e),W?.setLabel(K.deriveAnchorLabel(_e)))},...de&&tt!==!1?{onShotOptIn:ue=>gt=ue}:{},onCancel:ot,crumbsOn:pn!==!1,shotsOn:tt!==!1,...C&&l!=="local"?{serverHost:new URL(C).host}:{},...C&&p.adoptSession?{studio:{host:C,uid:l,env:t?.config?.env,member:p.member(),adopt:ue=>p.adoptSession(ue),signOut:()=>p.signOut()}}:{},...He?.text?.exact?{quote:He.text.exact}:{},...ge?{roundNote:ge.name}:{}};W=s.openComposer(n,We,he),ne()}async function U(){const s=we(o),i=ss(s);if(te.setDraft(Vt()),!i||W)return;const[f,R]=await Promise.all([Ae(),fe()]);if(!f||!R)return;const B=Ft(i.anchor,o,{viewportWidth:r.innerWidth,...q?{extended:q}:{}});if(!B.element)return;const K=B.element.getBoundingClientRect();if(K.width===0&&K.height===0)return;const Y={x:i.at.x-r.scrollX,y:i.at.y-r.scrollY};pe("add"),y(f,B.element,Y,R.captureContext({page:R.derivePageRef(o.location,mt()),...yt()}),i.label,R,{body:i.body,author:i.author,...i.email?{email:i.email}:{}})}async function v(s=null){if(s&&s!==ae&&u("thread:open",{threadId:s}),s&&P.mark(s),ae=s,Fe=!0,L==="browse"&&pe("comments"),X){X.update(x());return}if(!await Ae())return;const f=await Pe("dock",a,o);if(!f.ok){ie.show("error.panels",{label:"action.retry",run:()=>void v(ae)});return}!Fe||X||(Re=f.mod,X=f.mod.openDock(n,x(),he),ne())}function N(){P.markAll($),c.newOnly&&(c={...c,newOnly:!1}),Fe=!1,X?.close(),X=null,ae=null,b.highlight(null),ne(),T()&&re()}function E(s){const i=s?$.find(f=>f.id===s):void 0;if(i&&i.route!==we(o)){Tr(r,i.id),r.location.assign(i.route);return}s&&P.mark(s),ae=s,b.highlight(null),T()?re():X?.update(x()),i&&Re?.scrollToSnag(r,n,i)}function x(){return{snags:$,route:we(o),openId:ae,seenAt:P.map(),onOpen:E,onStatus:(s,i)=>void po(s,i),onReply:(s,i,f)=>void go(s,i,f),onEdit:(s,i)=>void Q(s,i),onDeleteComment:s=>void H(s),onDeleteThread:s=>void j(s),...p.isMine?{isMine:s=>p.isMine(s)}:{},...C&&p.adoptSession?{studio:{host:C,uid:l,env:t?.config?.env,member:p.member(),adopt:s=>p.adoptSession(s),signOut:()=>p.signOut()}}:{},canDeleteOwnThread:p.can?p.can("thread:delete:own"):!0,canStatus:p.can?p.can("thread:resolve"):!0,canModerate:p.canModerate?.()??!1,...p.listAssignees&&p.can?.("thread:assign")?{assignees:()=>p.listAssignees(),onAssign:(s,i)=>void mo(s,i)}:{},onClearAll:()=>void ee(),onClose:N,...p.kind==="local"?{onExport:It}:{},onHover:s=>b.highlight(s),...F&&F.length>1&&p.setRound?{rounds:F,activeRound:p.getRound?.()??F.find(s=>!s.closed)?.number??F[0].number,onRound:s=>{p.setRound(s),Ee()}}:{},onAnnounce:et,loadShot:s=>Is(s,async i=>{const f=await fe();return f?(await f.getBlob(i))?.blob??null:null}),filter:c,onFilter:s=>{const i=s.statuses.join()!==c.statuses.join()||s.by!==c.by||s.page!==c.page||s.read!==c.read;c=s,i?re():X?.update(x())},...D?{clusterFilter:D}:{},onClusterClear:()=>{D=null,X?.update(x())},onShowAnyway:s=>{b.showGhost(s),Re?.scrollToSnag(r,n,s)}}}async function oe(s,i){const f=$;$=s,re();try{await Ye(i)}catch{$=f,re(),ie.show("error.sendfailed",void 0,{item:"change"})}}async function Q(s,i){await oe($.map(f=>({...f,comments:f.comments.map(R=>R.id===s?{...R,body:i}:R)})),()=>p.patchComment(s,i))}async function H(s){await oe($.map(i=>({...i,comments:i.comments.filter(f=>f.id!==s)})),()=>p.deleteComment(s))}async function j(s){const i=ae;ae===s&&(ae=null),await oe($.filter(f=>f.id!==s),()=>p.deleteThread(s)),$.some(f=>f.id===s)&&(ae=i)}async function ee(){const s=$.map(i=>i.id);$=[],ae=null,re(),await Promise.all(s.map(i=>Ye(()=>p.deleteThread(i))))}const te=us(n,{onState:s=>pe(s),onPanel:()=>X?N():void v(),onNav:s=>nn(s),parent:he}),de=r.matchMedia?.("(pointer: coarse)").matches??!1,ne=()=>{de&&te.setConcealed(!!W||!!X)};let ye=null,De=[];function ut(s){let i=!1;const f=()=>{i||(i=!0,r.removeEventListener("scrollend",f),s())};r.addEventListener("scrollend",f,{once:!0}),r.setTimeout(f,600)}const Ge=o.createElement("div");Ge.setAttribute("aria-live","polite"),Ge.setAttribute("role","status");const en="position:absolute;width:1px;height:1px;overflow:hidden";Ge.style.cssText=en;const Rt=o.createElement("div");Rt.setAttribute("aria-live","assertive"),Rt.style.cssText=en,n.append(Ge,Rt);let tn=0;function et(s){r.clearTimeout(tn),tn=r.setTimeout(()=>{Ge.textContent=s},400)}function nn(s){const i=De.length;if(i===0)return;ye=ye===null?s===1?0:i-1:(ye+s+i)%i;const f=De[ye];hs(r,n,f);const R=ye+1;ut(()=>{b.pulse(f.id),et(V("nav.announce",{n:R,label:f.anchor.label,i:R,total:i}))})}function on(){if(L!=="comments"||ke){$e?.disarm();return}rn().then(s=>{s&&L==="comments"&&s.arm()})}let $e=null,_t=null;async function rn(){if($e)return $e;const s=await Pe("text",a,o);return!s.ok||$e||(_t=s.mod,$e=s.mod.createSelectionWatcher(n,{onQuote:(i,f)=>void uo(i,f)})),$e}async function uo(s,i){const f=Se??await fe();if(!f||!_t)return;const R=_t.createTextAnchor(s,f,{viewportWidth:r.innerWidth,ourRoot:n});if(R.kind==="refused-form-control"){k(R.el,i);return}if(R.kind!=="text")return;const B=await Ae();if(!B)return;const K=f.captureContext({page:f.derivePageRef(o.location,mt()),...yt()});try{s.removeAllRanges()}catch{}y(B,R.el,R.point,K,R.label,f,void 0,R.record)}function pe(s,i=!1){const f=L;L=s,s!=="add"&&W&&!i&&(W.close(),W=null),s==="add"&&X&&N(),s==="add"&&(Ae(),fe());try{sessionStorage.setItem(ce.mode,s==="add"?"comments":s)}catch{}S.setMode(s),s!==f&&et(V(`toolbar.${s}`)),ne(),s==="add"&&Tt(),on(),le?.setActive(s==="add"),te.setState(s),re(),s!==f&&u("modechange",{mode:s,previous:f})}let Ve=0,sn=0;const an=[300,800,1600,3200];function fo(){if(Ve||!b.hasPending()){b.hasPending()||(sn=0);return}const s=an[Math.min(sn++,an.length-1)];Ve=r.setTimeout(()=>{Ve=0,re()},s)}const ho=3e3;let cn=0;function re(s){const i=s??(Date.now()<cn?"navigating":"authoritative");z=b.reanchor($.filter(Ao()),i),So(),fo();const f=new Map(z.map(Y=>[Y.id,Y]));$=$.map(Y=>f.get(Y.id)??Y);const R=T()?new Set(z.filter(Y=>!Pr(Y,c,P.map())&&Y.id!==ae).map(Y=>Y.id)):void 0;De=R?z.filter(Y=>!R.has(Y.id)):z,b.render(L==="browse"?[]:z,R);const B=we(o),K=se?Ds(o.location.origin,$,B):null;te.setCount(K?Ls(K,B):se?z.filter(Y=>Y.status!=="resolved").length:null),ye!==null&&ye>=De.length&&(ye=null),X?.update(x())}async function Ee(){const{data:s}=await p.listThreads();$=s,re();const i=b.settled();for(const f of i)u("anchor:settled",{threadId:f.id,state:f.state,strategy:f.strategy,confidence:f.confidence});return p.capabilities.anchorReports&&p.reportAnchors&&i.length&&Ye(()=>p.reportAnchors(i.map(f=>({threadId:f.id,state:f.state,confidence:f.confidence,strategy:f.strategy})))),p.capabilities.anchorReports||await Promise.all(s.flatMap(f=>{const R=$.find(B=>B.id===f.id);return!R||R.anchorState===f.anchorState?[]:[Ye(()=>p.patchThread(R.id,{anchor:R.anchor,anchorState:R.anchorState}))]})),z}async function po(s,i){u("thread:resolve",{threadId:s,status:i}),await oe($.map(f=>f.id===s?{...f,status:i}:f),()=>p.patchThread(s,{status:i}))}async function mo(s,i){await oe($.map(f=>f.id===s?{...f,assignee:i}:f),()=>p.patchThread(s,{assignee:i&&i.id}))}async function go(s,i,f){const R={id:Yn(),body:i,author:lo(f)};$=$.map(B=>B.id===s?{...B,comments:[...B.comments,{...R,snagId:s,createdAt:new Date().toISOString()}]}:B),P.mark(s),re(),u("comment:create",{threadId:s,comment:R}),await Ye(()=>p.createComment(s,R))}function ln(){ie.show("error.quota",{label:"action.exportclear",run:()=>{It("json"),ee()}}),console.warn(`[${ve}] ${V("error.quota")}`)}async function Ye(s){try{return await s()}catch(i){if(i instanceof Ht&&i.code==="local_quota_exceeded")return ln(),null;throw i}}function It(s){fe().then(async i=>{if(!i)return;const f=await i.resolveAttachmentUris($).catch(()=>new Map);i.download(n,i.buildExport(s,$,{origin:o.location.origin,exportedAt:new Date().toISOString()},f),r)})}async function dn(s,i,f,R,B,K,Y){const He=lo(B,K),be=Se??await fe();if(!be)throw new Error(`[${ve}] add() needs the capture chunk`);Ne||mn(s);const me=Ne?await Ne:null;Ne=nt=null,be.applyShotOutcome(f,me,tt===!1,de&&!gt);const bt=me?.blob&&p.uploadAttachment?p.uploadAttachment(me.blob,{kind:"screenshot",...me.width!==void 0?{width:me.width}:{},...me.height!==void 0?{height:me.height}:{}}).catch(()=>null):Promise.resolve(null),ot={id:ps(),key:Js($),route:we(o),anchor:Y??be.createElementAnchor(s,{point:i,viewportWidth:r.innerWidth,label:be.deriveAnchorLabel(s),...be.describeElement(s)}),anchorState:"anchored",scope:wo(),context:f,createdBy:He,createdAt:new Date().toISOString(),...R?{comment:{id:Yn(),body:R,author:He}}:{}},Ce=Rn(ot);me?.blob&&(Ce.screenshotBlob=me.blob),$=[...$,Ce],P.mark(Ce.id),et(V("announce.created",{key:Ce.key})),u("thread:create",{thread:Ce}),L==="browse"?pe("comments"):re();try{const ge=await bt;ge&&(ot.attachments=[ge],$=$.map(We=>We.id===Ce.id?{...We,attachments:[ge]}:We),re()),await Ye(()=>p.createThread(ot))}catch(ge){throw $=$.filter(We=>We.id!==Ce.id),re(),ie.show("error.sendfailed",void 0,{item:zt.toLowerCase()}),console.warn(`[${ve}] ${V("error.sendfailed",{item:zt.toLowerCase()})}`,ge),ge}return Ce}function un(s){if((s.key==="n"||s.key==="p")&&L==="comments"&&!W){if(s.metaKey||s.ctrlKey||s.altKey)return;const i=s.composedPath()[0]??s.target;if(i&&(i.closest?.("input,textarea,select,[contenteditable]")||i.isContentEditable))return;s.preventDefault(),s.stopPropagation(),nn(s.key==="n"?1:-1);return}L==="add"&&s.key==="Escape"&&(W||(s.stopPropagation(),pe("comments")))}o.addEventListener("keydown",un,!0);let fn=0;const hn=()=>{if(o.hidden||!p.revalidate)return;const s=Date.now();s-fn<3e4||(fn=s,p.revalidate())};o.addEventListener("visibilitychange",hn);const yo=Ho(n),bo=Wo(n,s=>{console.warn(`[${ve}] the host page hid the widget from assistive technology ${s} times; leaving it alone.`)}),vo=No(n,s=>{console.warn(`[${ve}] the host page removed the widget ${s} times; leaving it alone. Reload to comment again.`)});function wo(){return{environment:d,...t?.config?.branch?{branch:t.config.branch}:{}}}let ft={route:we(o),url:o.location.href},Pt=!1,ht=null;function xo(s){if(s){if(L==="browse")return;ht=L,pe("browse",!0),Ze.show(),u("paused",{reason:"modal-dialog"})}else if(ht){const i=ht;ht=null,Ze.hide(),pe(i),u("resumed",{mode:i})}}Ae();function So(){z.length>0&&Pe("dock",a,o)}{const s=o.createElement("div");s.style.cssText="position:fixed;inset:0;pointer-events:none;visibility:hidden",n.appendChild(s);const i=s.getBoundingClientRect(),f=Math.abs(i.left)>1||Math.abs(i.top)>1||Math.abs(i.width-r.innerWidth)>1||Math.abs(i.height-r.innerHeight)>1;s.remove(),f&&(console.warn(`[${ve}] fixed-trapped: <html> has transform/filter/contain, so our fixed layer follows it, not the viewport. Remove it, or expect drift.`),u("error",{code:"fixed-trapped"}))}let Xe=null;const pt=new Set,Le=(()=>{const s=r[_o.config];return s&&typeof s=="object"?s:void 0})(),pn=Le?.breadcrumbs,Mt=(()=>{const s=Le?.significantQueryParams,i=Le?.ignoredQueryParams,f={};return s==="*"?f.significantQueryParams="*":Array.isArray(s)&&(f.significantQueryParams=s.map(String)),Array.isArray(i)&&(f.ignoredQueryParams=i.map(String)),f})(),mt=()=>({routeOverride:Gt,query:Mt,doc:o}),tt=Le?.screenshot===!1?!1:Le?.screenshot&&typeof Le.screenshot=="object"?Le.screenshot:{};let gt=!1,Ne=null,nt=null;function mn(s){if(tt===!1||Ne||de&&!gt)return;nt=new AbortController;const i=nt.signal;Ne=Pe("screenshot",a,o).then(f=>f.ok?f.mod.captureScreenshot({doc:o,target:s,signal:i,...tt,...p.fetchForeignImage?{fetchForeignImage:R=>p.fetchForeignImage(R)}:{}}):{situation:"engine-load-failed",blindSpots:[],maskedCount:0})}function Ao(){const s=we(o),i=Un(o.location.pathname),f=Vr(o.location.search,Mt);return R=>(R.route===s||R.context?.page?.pathname===i)&&Yr(R.context?.page?.query,f,Mt)}{const s=pn;s!==!1&&Pe("crumbs",a,o).then(i=>{i.ok&&(Xe=i.mod.installTierC({win:r,...t?.early?{early:t.early}:{},...s&&typeof s=="object"?{config:s}:{},subscribeNav:f=>(pt.add(f),()=>pt.delete(f))}))})}const yt=()=>Xe?{breadcrumbs:{records:Xe.drain(),status:Xe.status()}}:{},ko=Qr(o,r,()=>{L!=="browse"&&z.length>0&&re()}),$o=Cr(r,{onResize:()=>re(),onRoute:()=>{const s={route:we(o),url:o.location.href},i=s.route!==ft.route;if(i){u("navigate",{from:ft,to:s});for(const f of pt)f(ft.url,s.url)}if(ft=s,!i){Ee();return}cn=Date.now()+ho,r.setTimeout(()=>{p.listThreads().then(({data:f})=>{$=f,re("optimistic")})},100),r.setTimeout(()=>void Ee(),600)},onModal:xo});return te.setState(L),S.setMode(L),on(),se||ie.show("error.nostorage",{label:"action.export",run:()=>It("md")}),Ee().then(async s=>{const i=Rr(r);if(!i){const R=new URLSearchParams(o.location.search).get(Oo("t"));if(R){let B=s.find(K=>K.key===R);if(!B&&p.getThreadByKey){const K=await p.getThreadByKey(R).catch(()=>null);K&&($=[...$.filter(Y=>Y.id!==K.id),K],re(),B=$.find(Y=>Y.id===K.id))}B?(await v(B.id),Re?.scrollToSnag(r,n,B)):(ie.show("permalink.unknown"),await v(null));return}await U();return}const f=s.find(R=>R.id===i);await v(f?i:null),f&&Re?.scrollToSnag(r,n,f)}),{root:n,assetBase:t?.assetBase??"",snags:()=>z,async add(s,i,f,R){const B=R?null:await fe(),K=R??(B?B.captureContext({page:B.derivePageRef(o.location,mt()),...yt()}):void 0);if(!K)throw new Error(`[${ve}] add() needs the capture chunk, or an explicit context`);return dn(s,i,K,f)},refresh:Ee,setRoute(s){Gt=s&&s.startsWith("/")?s:null,Ee()},setState:pe,getState:()=>L,openPanel:v,async open(s){const i=s.startsWith(xt.thread)?$.find(f=>f.id===s):$.find(f=>f.key===s);return i?i.route!==we(o)?{ok:!1,reason:"wrong-page",url:i.context?.url??i.route,route:i.route}:(await v(i.id),Re?.scrollToSnag(r,n,i),{ok:!0,anchorState:i.anchorState}):{ok:!1,reason:"not-found"}},closePanel:N,hitTest:(s,i)=>S.hitTest(s,i),destroy(){W?.close(),N(),le?.destroy(),ie.destroy(),Ze.destroy(),dt(),vo(),bo(),yo(),$o.destroy(),ko.destroy(),Xe?.destroy(),Xe=null,pt.clear(),$e?.destroy(),$e=null,_?.destroy(),_=null,Ve&&r.clearTimeout(Ve),Ve=0,o.removeEventListener("keydown",un,!0),o.removeEventListener("visibilitychange",hn),m(),S.destroy(),b.destroy(),te.destroy(),n.host.remove()}}}export{vn as HOST_CSS,xn as createHost,Xs as isSensitiveValue,qs as mount,$t as redactText,Ys as redactUrl};
@@ -1 +0,0 @@
1
- import{u as r,Q as u,d as s}from"./useBaseQuery-CZkDX1tZ.js";import{y as t}from"./index-BZAfm4kX.js";function a(e,o){return r({...e,enabled:!0,suspense:!0,throwOnError:s,placeholderData:void 0},u)}function i(){return a(t.me()).data}export{i as u};
@@ -1 +0,0 @@
1
- import{j as t,O as o}from"./index-BZAfm4kX.js";const n=()=>t.jsx(o,{});export{n as component};
@@ -1 +0,0 @@
1
- import{r as l,h as De,a5 as de,a6 as Me,d as ue,a4 as qe,E as fe,i as pe,j as e,a7 as _e,e as U,aF as ve,aL as Ye,f as he,aM as Ue,aN as Qe,B as V,y as Oe,aO as Je,aP as Xe,o as Ze,aQ as et}from"./index-BZAfm4kX.js";import{u as Ae}from"./useQuery-C0BVsxqZ.js";import{f as Fe,h as Te,j as Le,u as Ve,A as tt,c as st,n as nt,g as ye,e as at,k as it,l as ot,a as rt,I as ae,L as Q}from"./label-C9GdL6JP.js";import{O as dt,L as lt,M as ct,N as ut,A as ft,aL as je,ak as Re,ad as le,a9 as ce,aM as Ce,aN as Ie,ao as mt,aO as ke,aa as pt,ab as ht,aP as we,aQ as Ne,aR as Se,aS as Ee,aT as gt,aU as xt,X as bt}from"./dialog-_GPHTnXl.js";import{b as vt,u as yt,C as jt}from"./CompositeItem-wqcRki5s.js";import{u as Rt}from"./useValueChanged-CCRl5Bf5.js";import{u as Ct}from"./FieldItemContext-DVLVe_H8.js";import{u as It}from"./useAriaLabelledBy-BLgC8mE_.js";import{C as Ke}from"./ConfirmDialog-BqK5eJxB.js";import{C as kt}from"./CopyButton-Cc4nF6JB.js";import{I as wt}from"./InstallTag-DCRj1B-Z.js";import{B as Nt}from"./badge-BIVx2feC.js";import{a as ne,P as St}from"./parts-BOtvDu_v.js";import{u as He}from"./me-Bgw9jS9F.js";import{S as Et}from"./switch-BCNx3nDC.js";import{S as Pt}from"./SaveState-B5TIvzLh.js";import{P as Dt}from"./plus-CTKInfcq.js";import"./useBaseQuery-CZkDX1tZ.js";import"./check-CMqBU0e3.js";import"./copy-Cn6p0txj.js";import"./useRender-P5Wj_Sbt.js";import"./card-HwCaU_bv.js";import"./labels--UUyt9uB.js";const Mt=l.createContext(void 0);function Ot(s=!1){const t=l.useContext(Mt);if(!t&&!s)throw new Error(De(86));return t}function At(s,t){return s.matches(":disabled")?!1:!t||s.form===t?!0:s.form===null&&!s.hasAttribute("form")}function Ft(s){return s==null||s.hasAttribute("disabled")||s.getAttribute("aria-disabled")==="true"}const me={checked(s){return s?{"data-checked":""}:{"data-unchecked":""}},...dt,...Fe},Be="data-composite-item-active",ze=l.createContext(void 0);function Tt(){return l.useContext(ze)}function Lt(s){if(s==null)return"";if(typeof s=="string")return s;try{return JSON.stringify(s)}catch{return String(s)}}const We=l.createContext(void 0);function Vt(){const s=l.useContext(We);if(s===void 0)throw new Error(De(52));return s}const Kt=l.forwardRef(function(t,n){const{render:o,className:r,disabled:c=!1,readOnly:i=!1,required:f=!1,"aria-labelledby":d,value:v,inputRef:T,nativeButton:h=!1,id:O,style:y,...j}=t,I=Tt(),{disabled:E,readOnly:q,required:x,form:B,checkedValue:R,touched:A=!1,validation:z,name:k,setCheckedValue:$=de,setTouched:_=de,registerInputRef:a=de}=I??{},{setTouched:g,setFilled:b,state:w,disabled:P}=Te(),D=Ct(),{labelId:K,getDescriptionProps:J}=Le(),m=P||D.disabled||E||c,p=q||i,L=x||f,H=B,N=I?R===v:v==="",F=l.useRef(null),S=l.useRef(null),W=z?.registerInput,G=l.useCallback(C=>W?.(C,{controlRef:F,value:void 0}),[W]),X=Me(T,S,a,G);ue(()=>{S.current?.checked&&b(!0)},[b]),ue(()=>{if(S.current){if(m&&N){a(null);return}a(S.current)}},[N,m,a]);const ee=Ve(),te=tt({id:O,implicit:!1,controlRef:F}),se=h?void 0:te,ie=It(d,K,S,!h,se),oe={role:"radio","aria-checked":N,"aria-labelledby":ie,[Be]:N?"":void 0,id:h?te:ee,onKeyDown(C){C.key==="Enter"&&C.preventDefault()},onClick(C){if(C.defaultPrevented||m||p)return;C.preventDefault();const Z=S.current;Z&&_e(Z,C)},onFocus(C){C.defaultPrevented||m||p||!A||(S.current?.click(),_(!1))}},{getButtonProps:re,buttonRef:u}=qe({disabled:m,native:h,composite:!1}),M={type:"radio",ref:X,form:H,id:se,name:k,tabIndex:-1,style:k?lt:ct,"aria-hidden":!0,...v!==void 0?{value:Lt(v)}:fe,disabled:m,checked:N,required:L,readOnly:p,onChange(C){if(C.nativeEvent.defaultPrevented||m||p||v===void 0)return;const Z=st(nt,C.nativeEvent);$(v,Z),!Z.isCanceled&&g(!0)},onClick(C){C.stopPropagation()},onFocus(){F.current?.focus()}},Y=l.useMemo(()=>({...w,required:L,disabled:m,readOnly:p,checked:N}),[w,m,p,N,L]),Ge=Y,ge=I!==void 0,xe=[n,F,u],be=[oe,j,re,J,z?C=>z.getValidationProps(m,C):fe],$e=pe("span",t,{enabled:!ge,state:Y,ref:xe,props:be,stateAttributesMapping:me});return e.jsxs(We.Provider,{value:Ge,children:[ge?e.jsx(vt,{tag:"span",render:o,className:r,style:y,state:Y,refs:xe,props:be,stateAttributesMapping:me}):$e,e.jsx("input",{...M,suppressHydrationWarning:!0})]})}),Ht=l.forwardRef(function(t,n){const{render:o,className:r,style:c,keepMounted:i=!1,...f}=t,d=Vt(),v=d.checked,{mounted:T,transitionStatus:h,setMounted:O}=ut(v),y={...d,transitionStatus:h},j=l.useRef(null),I=i||T,E=pe("span",t,{ref:[n,j],state:y,props:f,stateAttributesMapping:me});return ft({open:v,ref:j,onComplete(){v||O(!1)}}),I?E:null}),Bt=[];function zt(s){const{loopFocus:t=!0,orientation:n="both",grid:o,onLoop:r,direction:c,highlightedIndex:i,onHighlightedIndexChange:f,rootRef:d,enableHomeAndEndKeys:v=!1,stopEventPropagation:T,disabledIndices:h,modifierKeys:O=Bt}=s,[y,j]=l.useState(0),I=o!=null,E=l.useRef(null),q=Me(E,d),x=l.useRef([]),B=l.useRef(!1),R=i??y,A=U((a,g=!1)=>{if((f??j)(a),g){const b=x.current[a];je(E.current,b,c,n)}}),z=U(a=>{if(a.size===0||B.current)return;B.current=!0;const g=Array.from(a.keys()),b=g.find(P=>P?.hasAttribute(Be))??null,w=b?a.get(b)?.index??-1:-1;if(w!==-1)A(w);else if(Re(g,R,h)){const P=le(g,{disabledIndices:h});ce(g,P)||A(P)}je(E.current,b,c,n)});ue(()=>{if(h==null||i!=null||!B.current)return;const a=x.current;if(Re(a,R,h)){const g=le(a,{disabledIndices:h});ce(a,g)||A(g)}},[h,i,R,x,A]);const k=U((a,g,b)=>r?r(a,g,b,x):b),$=U(a=>{const g=a.key===Ce||a.key===Ie;if(!mt.has(a.key)||!v&&g||Wt(a,O)||!E.current)return;const w=c==="rtl",P=w?Se:Ee,D=w?Ee:Se,K=n==="vertical"?we:P,J=n==="vertical"?Ne:D,m=ye(a.nativeEvent);if(m!=null&&ke(m)&&!Ft(m)){const S=m.selectionStart,W=m.selectionEnd,G=m.value;if(S==null||a.shiftKey||S!==W||a.key!==J&&S<G.length||a.key!==K&&S>0)return}let p=R;const L=pt(x,h),H=ht(x,h);o!=null&&(p=o({disabledIndices:h,elementsRef:x,event:a,highlightedIndex:R,loopFocus:t,maxIndex:H,minIndex:L,onLoop:k,orientation:n,rtl:w}));const N=n!=="vertical"&&a.key===P||n!=="horizontal"&&a.key===we,F=n!=="vertical"&&a.key===D||n!=="horizontal"&&a.key===Ne;v&&(a.key===Ce?p=L:a.key===Ie&&(p=H)),p===R&&(N||F)&&(t&&p===H&&N?(p=L,r&&(p=r(a,R,p,x))):t&&p===L&&F?(p=H,r&&(p=r(a,R,p,x))):p=le(x.current,{startingIndex:p,decrement:F,disabledIndices:h})),p!==R&&!ce(x.current,p)&&(T&&a.stopPropagation(),(I||g||N||F)&&a.preventDefault(),A(p,!0),queueMicrotask(()=>{x.current[p]?.focus()}))});return{props:{ref:q,onFocus(a){const g=E.current,b=ye(a.nativeEvent);!g||b==null||!ke(b)||b.setSelectionRange(0,b.value.length)},onKeyDown:$},highlightedIndex:R,onHighlightedIndexChange:A,elementsRef:x,onMapChange:z,relayKeyboardEvent:$}}function Wt(s,t){for(const n of gt)if(!t.includes(n)&&s.getModifierState(n))return!0;return!1}function Gt(s){const{render:t,className:n,style:o,refs:r=ve,props:c=ve,state:i=fe,stateAttributesMapping:f,highlightedIndex:d,onHighlightedIndexChange:v,orientation:T,grid:h,loopFocus:O,onLoop:y,enableHomeAndEndKeys:j,onMapChange:I,stopEventPropagation:E=!0,rootRef:q,disabledIndices:x,modifierKeys:B,highlightItemOnHover:R=!1,tag:A="div",...z}=s,k=yt(),{props:$,highlightedIndex:_,onHighlightedIndexChange:a,elementsRef:g,onMapChange:b,relayKeyboardEvent:w}=zt({grid:h,loopFocus:O,onLoop:y,orientation:T,highlightedIndex:d,onHighlightedIndexChange:v,rootRef:q,stopEventPropagation:E,enableHomeAndEndKeys:j,direction:k,disabledIndices:x,modifierKeys:B}),P=pe(A,s,{state:i,ref:r,props:[$,...c,z],stateAttributesMapping:f}),D=l.useMemo(()=>({highlightedIndex:_,onHighlightedIndexChange:a,highlightItemOnHover:R,relayKeyboardEvent:w}),[_,a,R,w]);return e.jsx(Ye.Provider,{value:D,children:e.jsx(jt,{elementsRef:g,onMapChange:K=>{I?.(K),b(K)},children:P})})}const $t=[xt],qt=l.forwardRef(function(t,n){const{render:o,className:r,disabled:c,readOnly:i,required:f,onValueChange:d,value:v,defaultValue:T,form:h,name:O,inputRef:y,id:j,style:I,...E}=t,{setTouched:q,setFocused:x,validationMode:B,name:R,disabled:A,state:z,validation:k,setDirty:$,setFilled:_,validityData:a}=Te(),{labelId:g}=Le(),{clearErrors:b,elementRef:w}=at(),P=Ot(!0),D=A||c,K=R??O,J=Ve(j),[m,p]=it({controlled:v,default:T,name:"RadioGroup",state:"value"}),[L,H]=l.useState(!1),N=U((u,M)=>{d?.(u,M),!M.isCanceled&&p(u)}),F=k.getInputControl,S=l.useMemo(()=>({get current(){return F()}}),[F]),W=l.useRef(null),G=l.useRef(null);function X(u){let M;return y&&(typeof y=="function"?M=y(u):y.current=u),W.current=u,M}const ee=U(u=>{if(!u||u.disabled)return;G.current||(G.current=u);const M=W.current,Y=u.checked||M==null||M.disabled?X(u):void 0;return()=>{G.current===u&&(G.current=null),W.current===u?Y?(Y(),W.current=null):X(null):Y?.()}}),te=U(()=>{const u=w.current;if(!u)return m??null;for(const M of k.registeredInputs.keys())if(M.checked&&At(M,u))return m??null;return null});ot(S,J,m??null,te,!D,O),Rt(m,()=>{b(K),$(m!==a.initialValue),_(m!=null),k.change(m);const u=G.current;m==null&&u&&!u.disabled&&X(u)});const se=g??P?.legendId,ie={...z,disabled:D??!1,required:f??!1,readOnly:i??!1},oe=l.useMemo(()=>({checkedValue:m,disabled:D,form:h,validation:k,name:K,readOnly:i,registerInputRef:ee,required:f,setCheckedValue:N,setTouched:H,touched:L}),[m,D,h,k,K,i,ee,f,N,H,L]),re={id:j,role:"radiogroup","aria-required":f||void 0,"aria-disabled":D||void 0,"aria-readonly":i||void 0,"aria-labelledby":se,onFocus(){x(!0)},onBlur(u){rt(u.currentTarget,u.relatedTarget)||(q(!0),x(!1),B==="onBlur"&&k.commit(m))},onKeyDownCapture(u){u.key.startsWith("Arrow")&&(H(!0),x(!0))}};return e.jsx(ze.Provider,{value:oe,children:e.jsx(Gt,{render:o,className:r,style:I,state:ie,props:[re,E,u=>k.getValidationProps(D??!1,u)],refs:[n],stateAttributesMapping:Fe,enableHomeAndEndKeys:!1,modifierKeys:$t})})});function _t({className:s,...t}){return e.jsx(qt,{"data-slot":"radio-group",className:he("grid w-full gap-2",s),...t})}function Yt({className:s,...t}){return e.jsx(Kt,{"data-slot":"radio-group-item",className:he("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",s),...t,children:e.jsx(Ht,{"data-slot":"radio-group-indicator",className:"flex size-4 items-center justify-center",children:e.jsx("span",{className:"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground"})})})}function Ut({uid:s}){const t=He(),n=Ae(Oe.rounds(s)),o=t.user.role==="owner"||t.user.role==="admin",r=n.data?.data??[],c=r.filter(i=>!i.closed&&!i.archived).length;return e.jsxs(ne,{title:"Rounds",description:e.jsx(e.Fragment,{children:"One pass of feedback each, and several can run at once — your own QA beside the client's. A new comment goes to the round its reviewer is looking at. Archive a finished round to put it away; delete removes its comments too."}),children:[!o&&e.jsx("p",{className:"m-0 text-[12.5px] text-muted-foreground",children:"Only an owner or an admin can change rounds."}),e.jsxs("ul",{className:"m-0 flex list-none flex-col divide-y divide-border p-0","aria-label":"Rounds",children:[r.map(i=>e.jsx(Qt,{uid:s,round:i,manager:o,last:!i.closed&&!i.archived&&c===1},i.id)),n.isSuccess&&r.length===0&&e.jsx("li",{className:"text-[12.5px] text-muted-foreground",children:"No rounds yet."})]})]})}const Pe="Open another round first — new comments need somewhere to go.";function Qt({uid:s,round:t,manager:n,last:o}){const r=Ue(s),c=Qe(s),[i,f]=l.useState(!1),[d,v]=l.useState(t.name),[T,h]=l.useState(!1),O=t.archived?"archived":t.closed?"closed":"open",y=r.isPending||c.isPending;return e.jsxs("li",{className:"flex flex-wrap items-center gap-x-3 gap-y-2 py-2.5 first:pt-0 last:pb-0",children:[i?e.jsxs("form",{className:"flex min-w-0 flex-1 items-center gap-2",onSubmit:j=>{j.preventDefault();const I=d.trim();if(!I||I===t.name)return f(!1);r.mutate({id:t.id,name:I},{onSuccess:()=>f(!1)})},children:[e.jsx(ae,{"aria-label":`New name for ${t.name}`,value:d,maxLength:80,autoFocus:!0,onChange:j=>v(j.target.value),onKeyDown:j=>j.key==="Escape"&&f(!1)}),e.jsx(V,{type:"submit",size:"sm",disabled:!d.trim()||r.isPending,children:"Save"}),e.jsx(V,{type:"button",size:"sm",variant:"ghost",onClick:()=>f(!1),children:"Cancel"})]}):e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"truncate text-[13.5px] font-medium",children:t.name}),e.jsx(Nt,{variant:"outline",className:"text-[11px]",children:O})]}),e.jsxs("p",{className:"m-0 mt-0.5 text-[12px] text-muted-foreground",children:["Round ",t.number," · ",t.threads," ",t.threads===1?"comment":"comments",t.unresolved>0?` · ${t.unresolved} unresolved`:""]})]}),n&&!i&&e.jsxs("div",{className:"flex flex-wrap items-center gap-1",title:o?Pe:void 0,children:[e.jsx(V,{size:"sm",variant:"ghost","aria-label":`Rename ${t.name}`,disabled:y,onClick:()=>{v(t.name),f(!0)},children:"Rename"}),!t.archived&&e.jsx(V,{size:"sm",variant:"ghost","aria-label":`${t.closed?"Reopen":"Close"} ${t.name}`,disabled:y||o,onClick:()=>r.mutate({id:t.id,closed:!t.closed}),children:t.closed?"Reopen":"Close"}),e.jsx(V,{size:"sm",variant:"ghost","aria-label":`${t.archived?"Restore":"Archive"} ${t.name}`,disabled:y||o,onClick:()=>r.mutate({id:t.id,archived:!t.archived}),children:t.archived?"Restore":"Archive"}),e.jsx(V,{size:"sm",variant:"ghost",className:"text-destructive","aria-label":`Delete ${t.name}`,disabled:y||o,onClick:()=>h(!0),children:"Delete…"})]}),n&&o&&!i&&e.jsx("p",{className:"m-0 w-full text-[12px] text-muted-foreground",children:Pe}),e.jsx(Ke,{open:T,onOpenChange:h,title:`Delete ${t.name}?`,description:t.threads>0?e.jsxs(e.Fragment,{children:["This deletes the round and"," ",e.jsxs("b",{className:"font-semibold text-foreground",children:[t.threads," ",t.threads===1?"comment":"comments"," and their screenshots"]}),". Reviewers stop seeing them straight away. To keep them out of sight instead, archive the round."]}):e.jsxs(e.Fragment,{children:["This round has no comments. Its number, Round ",t.number,", is not used again."]}),confirmLabel:"Delete round",confirmWord:t.name,busy:c.isPending,onConfirm:()=>c.mutate({id:t.id,confirm:t.name},{onSuccess:()=>h(!1)})})]})}const Jt=[{id:"open",title:"Everyone on the site",note:"The toolbar appears for every visitor on the addresses above. Simplest for a staging URL nobody else knows."},{id:"link-required",title:"Only reviewers with a link",note:"You add a reviewer and send them their link. Use this when staging is publicly reachable, or when one reviewer needs revoking without shutting the whole site."}];function ks(){const{site:s}=Je.useParams(),n=He().projects.find(d=>d.uid===s),o=Ae(Oe.origins(s)),r=Xe(s),[c,i]=l.useState(null),f=d=>r.mutate(d,{onSuccess:()=>i(Date.now())});return e.jsxs("div",{className:"flex flex-col gap-10 p-7",children:[e.jsx(St,{title:"Settings",sub:n.name,actions:e.jsx(Pt,{saving:r.isPending,savedAt:c})}),e.jsxs(ne,{title:"Site",description:"Its name, its ID for the tag, and where the widget may run.",children:[e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(Q,{children:"Site ID"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"rounded-md bg-muted px-2.5 py-1.5 font-mono text-[12.5px] text-ink-soft",children:n.uid}),e.jsx(kt,{text:n.uid,label:"Copy the site ID"})]})]}),e.jsx(Xt,{name:n.name,onSave:d=>f({name:d})}),e.jsx(Zt,{domain:o.data?.domain??null,loaded:o.isSuccess,onSave:d=>f({domain:d})}),e.jsx(es,{list:o.data?.origins??[],loaded:o.isSuccess,hasDomain:!!o.data?.domain,onChange:d=>f({origins:d})})]}),e.jsxs(ne,{title:"Widget",description:"Whether it runs, who the toolbar appears for, and the tag itself.",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-md border border-border px-3 py-2.5",children:[e.jsxs("div",{children:[e.jsx(Q,{htmlFor:"widget-on",className:"text-[13px] font-medium",children:"Widget on this site"}),e.jsx("p",{className:"m-0 mt-0.5 text-[12px] leading-normal text-muted-foreground",children:"Off hides the toolbar for everyone and refuses new comments. The tag can stay in the site's code."})]}),e.jsx(Et,{id:"widget-on","aria-label":"Widget on this site",checked:n.status!=="paused",onCheckedChange:d=>f({status:d?"active":"paused"})})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(Q,{children:"Who can comment"}),e.jsx(_t,{value:n.writeMode,onValueChange:d=>f({writeMode:String(d)}),className:"gap-2",children:Jt.map(d=>e.jsxs("label",{className:he("flex cursor-pointer items-start gap-2.5 rounded-md border border-border px-3 py-2.5",n.writeMode===d.id&&"border-brand bg-brand-soft"),children:[e.jsx(Yt,{value:d.id,className:"mt-0.5","aria-label":d.title}),e.jsxs("span",{children:[e.jsx("span",{className:"block text-[13px] font-medium",children:d.title}),e.jsx("span",{className:"block text-[12px] leading-normal text-muted-foreground",children:d.note})]})]},d.id))})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(Q,{children:"The tag"}),e.jsx(wt,{uid:n.uid}),e.jsxs("p",{className:"m-0 text-[12px] text-muted-foreground",children:["Paste it before ",e.jsx("code",{className:"font-mono",children:"</body>"})," on every page you want reviewed."]})]})]}),e.jsx(Ut,{uid:s}),e.jsx(ts,{uid:s,name:n.name})]})}function Xt({name:s,onSave:t}){const[n,o]=l.useState(s);l.useEffect(()=>o(s),[s]);const r=n.trim().length>0&&n.trim()!==s;return e.jsxs("form",{className:"flex flex-col gap-1.5",onSubmit:c=>{c.preventDefault(),r&&t(n.trim())},children:[e.jsx(Q,{htmlFor:"site-name",children:"Name"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(ae,{id:"site-name",value:n,onChange:c=>o(c.target.value)}),r&&e.jsx(V,{type:"submit",variant:"outline",children:"Save"})]})]})}function Zt({domain:s,loaded:t,onSave:n}){const[o,r]=l.useState(s??"");l.useEffect(()=>r(s??""),[s]);const c=o.trim()!==(s??"");return e.jsxs("form",{className:"flex flex-col gap-1.5",onSubmit:i=>{i.preventDefault(),c&&n(o.trim()||null)},children:[e.jsx(Q,{htmlFor:"site-domain",children:"Domain"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(ae,{id:"site-domain",placeholder:"kilnwork.studio",value:o,onChange:i=>r(i.target.value),disabled:!t}),c&&e.jsx(V,{type:"submit",variant:"outline",children:o.trim()?"Save domain":"Clear domain"})]}),e.jsx("p",{className:"m-0 text-[12px] text-muted-foreground",children:"Every subdomain, scheme and port of it may run the widget — staging, previews, and localhost while you build."})]})}function es({list:s,loaded:t,hasDomain:n,onChange:o}){const[r,c]=l.useState("");return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(Q,{htmlFor:"site-origin-add",children:"Also allowed"}),e.jsx("p",{className:"m-0 text-[12px] text-muted-foreground",children:"Exact addresses the domain does not cover — a client's other host, a preview on somebody else's suffix."}),e.jsxs("ul",{className:"m-0 flex list-none flex-col gap-1.5 p-0",children:[s.map(i=>e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"rounded-md border border-border px-2 py-1 font-mono text-[12px]",children:i}),e.jsx(V,{type:"button",variant:"ghost",size:"icon-sm","aria-label":`Remove ${i}`,disabled:s.length<=1&&!n,onClick:()=>o(s.filter(f=>f!==i)),children:e.jsx(bt,{})})]},i)),t&&s.length===0&&e.jsx("li",{className:"text-[12.5px] text-muted-foreground",children:n?"None besides the domain.":"No address yet."})]}),e.jsxs("form",{className:"flex gap-2",onSubmit:i=>{i.preventDefault();const f=r.trim();f&&(o([...s,f]),c(""))},children:[e.jsx(ae,{id:"site-origin-add",placeholder:"https://staging.example.com",value:r,onChange:i=>c(i.target.value)}),e.jsxs(V,{type:"submit",variant:"outline",disabled:!r.trim(),children:[e.jsx(Dt,{}),"Add"]})]})]})}function ts({uid:s,name:t}){const[n,o]=l.useState(!1),r=Ze(),c=et(s);return e.jsxs(ne,{danger:!0,title:"Delete this site",description:e.jsxs(e.Fragment,{children:["The site stops appearing and its widget stops being served."," ",e.jsx("b",{className:"font-semibold text-foreground",children:"Nothing your client wrote is destroyed"})," — the comments stay in the database, so a mistake here is recoverable."]}),children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("p",{className:"m-0 flex-1 text-[13px] text-ink-soft",children:"You will be asked to type the site's name."}),e.jsxs(V,{type:"button",variant:"outline",className:"border-destructive text-destructive",onClick:()=>o(!0),children:["Delete ",t,"…"]})]}),e.jsx(Ke,{open:n,onOpenChange:o,title:`Delete ${t}?`,description:"The site stops appearing and its widget stops being served. Nothing your client wrote is destroyed — the comments stay in the database.",confirmLabel:"Delete",confirmWord:t,busy:c.isPending,onConfirm:()=>c.mutate(void 0,{onSuccess:()=>{o(!1),r({to:"/sites"})}})})]})}export{ks as component};
@@ -1 +0,0 @@
1
- import{j as t,O as o}from"./index-BZAfm4kX.js";const n=()=>t.jsx(o,{});export{n as component};
@@ -1 +0,0 @@
1
- import{u as r,Q as u}from"./useBaseQuery-CZkDX1tZ.js";function a(e,s){return r(e,u)}export{a as u};
@@ -1 +0,0 @@
1
- import{i as n}from"./index-BZAfm4kX.js";function u(e){return n(e.defaultTagName??"div",e,e)}export{u};