@snagset/server 0.1.10 → 0.1.11

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 (94) hide show
  1. package/dist/app.js +5 -0
  2. package/dist/app.js.map +1 -1
  3. package/dist/config.generated.js +2 -1
  4. package/dist/config.generated.js.map +1 -1
  5. package/dist/db/migrations/0008_outbox_org_rows.sql +29 -0
  6. package/dist/jobs/set.js +15 -4
  7. package/dist/jobs/set.js.map +1 -1
  8. package/dist/mail/digest.js +291 -0
  9. package/dist/mail/digest.js.map +1 -0
  10. package/dist/mail/links.js +41 -0
  11. package/dist/mail/links.js.map +1 -0
  12. package/dist/mail/notify.js +126 -25
  13. package/dist/mail/notify.js.map +1 -1
  14. package/dist/net/publicFetch.js +202 -0
  15. package/dist/net/publicFetch.js.map +1 -0
  16. package/dist/routes/commentEdit.js +20 -5
  17. package/dist/routes/commentEdit.js.map +1 -1
  18. package/dist/routes/imageProxy.js +77 -0
  19. package/dist/routes/imageProxy.js.map +1 -0
  20. package/dist/routes/threads.js +182 -42
  21. package/dist/routes/threads.js.map +1 -1
  22. package/package.json +3 -3
  23. package/static/dashboard/assets/CompositeItem-Bg_GF93m.js +1 -0
  24. package/static/dashboard/assets/{ConfirmDialog-eCzw7vjK.js → ConfirmDialog-WnZ92dk2.js} +1 -1
  25. package/static/dashboard/assets/{CopyButton-lcjux1TA.js → CopyButton-rL26RLOJ.js} +1 -1
  26. package/static/dashboard/assets/{FieldItemContext-i5zdyQYl.js → FieldItemContext-BFJSEdB-.js} +1 -1
  27. package/static/dashboard/assets/{InstallTag-Eqs3RM9e.js → InstallTag-BKIArjPk.js} +1 -1
  28. package/static/dashboard/assets/{SaveState-Cf_bnJmg.js → SaveState-DVHi0zeB.js} +1 -1
  29. package/static/dashboard/assets/{_app-CuKLSKZ2.js → _app-D2r-zfbF.js} +1 -1
  30. package/static/dashboard/assets/_app-iK-weT5A.js +56 -0
  31. package/static/dashboard/assets/activity-CCqTW3Th.js +1 -0
  32. package/static/dashboard/assets/{arrow-left-CQUHEFUP.js → arrow-left-BEHXEKLy.js} +1 -1
  33. package/static/dashboard/assets/{avatar-CWT37Ivf.js → avatar-BnPBt2UW.js} +1 -1
  34. package/static/dashboard/assets/{badge-thtKAJ0h.js → badge-B2rHdH8b.js} +1 -1
  35. package/static/dashboard/assets/{card-CsXE7vKD.js → card-BNGTf8dq.js} +1 -1
  36. package/static/dashboard/assets/{check-Bc_1fmPx.js → check-C3gaSIDM.js} +1 -1
  37. package/static/dashboard/assets/{chevron-right-neQQkaOt.js → chevron-right-CLLS6JcX.js} +1 -1
  38. package/static/dashboard/assets/{copy-O3USBatC.js → copy-Dy7nBeu2.js} +1 -1
  39. package/static/dashboard/assets/{dialog-MC-TOvQV.js → dialog-q6J2VL2H.js} +2 -2
  40. package/static/dashboard/assets/{dropdown-menu-C2ZhmONu.js → dropdown-menu-DFZrgFpI.js} +1 -1
  41. package/static/dashboard/assets/{image-off-Bu6l8gP5.js → image-off-Bug-3iC-.js} +1 -1
  42. package/static/dashboard/assets/index-ClhJtAFR.css +1 -0
  43. package/static/dashboard/assets/index-CtyJ8ep7.js +169 -0
  44. package/static/dashboard/assets/{label-BTdAT39L.js → label-DoQ07Q_y.js} +1 -1
  45. package/static/dashboard/assets/{layout-grid-rYWIGaIJ.js → layout-grid-B3BkFR60.js} +1 -1
  46. package/static/dashboard/assets/me-NFjosbdz.js +1 -0
  47. package/static/dashboard/assets/{parts-kPNZVO9H.js → parts-BTWw4Uv-.js} +1 -1
  48. package/static/dashboard/assets/{plus-CcJ1Zwa7.js → plus-DqdyxL8q.js} +1 -1
  49. package/static/dashboard/assets/s._site-kVvU6ucw.js +1 -0
  50. package/static/dashboard/assets/s._site.comments-kEGEpFR2.js +54 -0
  51. package/static/dashboard/assets/{s._site.reviewers-Djq2t6Dx.js → s._site.reviewers-C1LLoSS5.js} +1 -1
  52. package/static/dashboard/assets/s._site.settings-CeKMuuRo.js +1 -0
  53. package/static/dashboard/assets/{setup-D748SEIm.js → setup-CdZYVZmd.js} +1 -1
  54. package/static/dashboard/assets/{sign-in-CKSiZWCo.js → sign-in-CvstpETe.js} +1 -1
  55. package/static/dashboard/assets/{sign-up-BX9j_Ya2.js → sign-up-Cq7YvdYN.js} +1 -1
  56. package/static/dashboard/assets/sites-CUWMKMCM.js +1 -0
  57. package/static/dashboard/assets/{studio-HH_J6PPv.js → studio-BfA8kzFc.js} +1 -1
  58. package/static/dashboard/assets/studio-uAl1i7Nd.js +1 -0
  59. package/static/dashboard/assets/studio.index-BTF7YIX-.js +1 -0
  60. package/static/dashboard/assets/studio.integrations-Nr_jBcXh.js +1 -0
  61. package/static/dashboard/assets/{studio.members-DTbKcrEI.js → studio.members-BtbPt4iX.js} +1 -1
  62. package/static/dashboard/assets/{sun-CWPmS6_O.js → sun-s_t6Zx3r.js} +1 -1
  63. package/static/dashboard/assets/switch-DbqX1mWE.js +1 -0
  64. package/static/dashboard/assets/{table-CiZO2uuW.js → table-CrWNqpP8.js} +1 -1
  65. package/static/dashboard/assets/{useAriaLabelledBy-oZFqC809.js → useAriaLabelledBy-CgL3SaJd.js} +1 -1
  66. package/static/dashboard/assets/{useBaseQuery-CHgLQD-M.js → useBaseQuery-CBTINzcX.js} +1 -1
  67. package/static/dashboard/assets/useQuery-BPuxCfhJ.js +1 -0
  68. package/static/dashboard/assets/useRender-BCpbp3WG.js +1 -0
  69. package/static/dashboard/assets/{useValueChanged-Dvr7PvAV.js → useValueChanged-B20GM2vK.js} +1 -1
  70. package/static/dashboard/assets/{users-Ci-ogubz.js → users-CQwkq_Tk.js} +1 -1
  71. package/static/dashboard/assets/{welcome-BDWw5Qlv.js → welcome-W1YxYlGW.js} +1 -1
  72. package/static/dashboard/assets/{you-DAUNHAFI.js → you-DXZRdbGS.js} +1 -1
  73. package/static/dashboard/assets/{zod-CtjFmGX5.js → zod-DWEgoEmm.js} +1 -1
  74. package/static/dashboard/index.html +2 -2
  75. package/static/widget/snag.capture.js +1 -1
  76. package/static/widget/snag.dock.js +1 -1
  77. package/static/widget/snag.runtime.js +2 -2
  78. package/static/widget/snag.screenshot.js +1 -1
  79. package/static/dashboard/assets/CompositeItem-Db_8iHSG.js +0 -1
  80. package/static/dashboard/assets/_app-qNVG5lsX.js +0 -56
  81. package/static/dashboard/assets/activity-CQLBFIV4.js +0 -1
  82. package/static/dashboard/assets/index-BR4Mnw-o.css +0 -1
  83. package/static/dashboard/assets/index-C6gyyLd5.js +0 -169
  84. package/static/dashboard/assets/me-CI9giaT9.js +0 -1
  85. package/static/dashboard/assets/s._site-D0HRtia-.js +0 -1
  86. package/static/dashboard/assets/s._site.comments-D3ACsr3a.js +0 -39
  87. package/static/dashboard/assets/s._site.settings-D0b6vJci.js +0 -1
  88. package/static/dashboard/assets/sites-QwJy87Y8.js +0 -1
  89. package/static/dashboard/assets/studio-B_ma5JGA.js +0 -1
  90. package/static/dashboard/assets/studio.index-DrtJF7DT.js +0 -1
  91. package/static/dashboard/assets/studio.integrations-Cv34ukzT.js +0 -1
  92. package/static/dashboard/assets/switch-CzijGUed.js +0 -1
  93. package/static/dashboard/assets/useQuery-C6FyjMS-.js +0 -1
  94. package/static/dashboard/assets/useRender-D5jZ1wns.js +0 -1
@@ -2,4 +2,4 @@ var W,S,$e,F,Ce,Se,Ee,ie,V,q,Te,le,de,ce,G={},Y=[],pn=/acit|ex(?:s|g|n|p|$)|rph|
2
2
  `);`${d.font}${d.fg}${x.font}${x.accent}${x.bg}${x.fg}${x.muted}${x.border}${x.radius}${x.shadow}${x.z}${x.motion}${x.surface}${d.fg}${d.bg}${x.sunken}${d.fg}${d.bg}${x.hover}${d.fg}${d.bg}${x.onAccent}${x.focus}${d.accent}${d.fg}${x.disabled}${d.muted}${d.bg}${Pn}${x.anchorOrphan}${Cn}${x.accent}${x.onAccent}${x.bg}${x.fg}${x.muted}${x.border}${x.shadow}${x.motion}${x.bg}${x.fg}${x.muted}${x.border}${x.accent}${x.onAccent}${x.surface}${x.sunken}${x.hover}${x.focus}${x.disabled}${x.shadow}${x.anchorOrphan}`;const Rn={dock:5},nn=new WeakMap;function tn(e,n,t){let o=nn.get(e);if(o||nn.set(e,o=new Set),o.has(n))return;o.add(n);try{const i=new CSSStyleSheet;i.replaceSync(t),e.adoptedStyleSheets=[...e.adoptedStyleSheets,i];return}catch{}const a=(e.ownerDocument??document).createElement("style");a.setAttribute(`data-snag-${n}`,""),a.textContent=t,e.appendChild(a)}const zn=` .snag-input,.snag-text{width:100%;box-sizing:border-box;background:${d.surface};color:inherit;border:1px solid ${d.border};border-radius:${d.radius};padding:8px;font:inherit;resize:vertical}@media (pointer:coarse){.snag-input,.snag-text{font-size:16px}}.snag-input:focus,.snag-text:focus{outline:2px solid ${d.focus};outline-offset:1px;border-color:transparent}.snag-input--bad{border-color:${d.anchorOrphan}}.snag-note{margin:-2px 0 0;color:${d.anchorOrphan};font-size:11px;line-height:1.35}.snag-note.snag-dim{color:${d.muted}}.snag-actions{display:flex;justify-content:flex-end;gap:6px}.snag-actions button{appearance:none;border:0;border-radius:calc(${d.radius} - 1px);padding:7px 13px;font:inherit;cursor:pointer;min-height:32px;transition:background ${d.motion}}.snag-cancel{background:transparent;color:${d.muted}}.snag-armed{color:${d.anchorOrphan};font-weight:600}.snag-cancel:hover{background:${d.hover};color:inherit}.snag-send{background:${d.accent};color:${d.onAccent};font-weight:600}.snag-send:disabled{opacity:.45;cursor:not-allowed}.snag-actions button:focus-visible{outline:2px solid ${d.focus};outline-offset:2px}`;function On(e,n,t){const[o,s]=z(!1);return H(()=>{if(!o)return;const a=setTimeout(()=>s(!1),3e3);return()=>clearTimeout(a)},[o]),{armed:o,press(){if(o||n){s(!1),e();return}s(!0)}}}function Ln(e){const n=window.visualViewport;if(!n)return;let t=0,o=0;const s=()=>{t=0;const u=Math.max(0,Math.round(window.innerHeight-n.height-n.offsetTop));e.style.setProperty(x.kb,`${u}px`)},a=()=>{t||(t=requestAnimationFrame(s))},i=()=>{clearTimeout(o),o=window.setTimeout(s,300)};return s(),n.addEventListener("resize",a),n.addEventListener("scroll",a),window.addEventListener("orientationchange",a),e.addEventListener("focusout",i),()=>{t&&cancelAnimationFrame(t),clearTimeout(o),n.removeEventListener("resize",a),n.removeEventListener("scroll",a),window.removeEventListener("orientationchange",a),e.removeEventListener("focusout",i)}}const Nn="noreferrer nofollow";function Hn(e){const n=e.trim();if(!n||/[-]/.test(n)||n.startsWith("//"))return null;const t=/^([a-z][a-z0-9+.-]*):/i.exec(n);return t?/^(https?|mailto)$/i.test(t[1])?n:null:n}const In=new RegExp(["\\*\\*(?=\\S)(?<bold>[\\s\\S]*?\\S)\\*\\*","(?<!\\w)__(?=\\S)(?<boldU>[\\s\\S]*?\\S)__(?!\\w)","(?<!\\*)\\*(?!\\*)(?=\\S)(?<em>[\\s\\S]*?\\S)(?<!\\*)\\*(?!\\*)","(?<!\\w)_(?=\\S)(?<emU>[\\s\\S]*?\\S)_(?!\\w)","`(?<code>[^`]+)`","\\[(?<label>[^\\]\\n]*)\\]\\((?<href>(?:[^()\\s]|\\([^()\\s]*\\))*)\\)"].join("|")),Un=4;function re(e,n=0,t=0){const o=[];let s=e,a=n;if(t>=Un)return e?[e]:[];for(;;){const i=In.exec(s);if(!i)return s&&o.push(s),o;i.index>0&&o.push(s.slice(0,i.index));const u=`i${a++}`,g=i.groups,l=g.bold??g.boldU,_=g.em??g.emU;if(l!==void 0)o.push(L("strong",{key:u},re(l,a,t+1)));else if(_!==void 0)o.push(L("em",{key:u},re(_,a,t+1)));else if(g.code!==void 0)o.push(L("code",{key:u},g.code));else{const y=Hn(g.href??"");o.push(y?L("a",{key:u,href:y,target:"_blank",rel:Nn},g.label??""):i[0])}s=s.slice(i.index+i[0].length)}}const be=/^```[^\n]*$/,xe=/^[-*]\s+(.*)$/,ye=/^\d{1,9}[.)]\s+(.*)$/;function on(e){const n=e.split(`
3
3
  `),t=[];let o=0,s=0;for(;o<n.length;){const a=n[o];if(be.test(a)){const l=[];for(o++;o<n.length&&!be.test(n[o]);)l.push(n[o++]);o++,t.push(L("pre",{key:`b${s++}`},L("code",null,l.join(`
4
4
  `))));continue}const i=xe.exec(a),u=ye.exec(a);if(i||u){const l=i?xe:ye,_=[];for(;o<n.length;){const y=l.exec(n[o]);if(!y)break;_.push(L("li",{key:`l${_.length}`},re(y[1]))),o++}t.push(L(i?"ul":"ol",{key:`b${s++}`},_));continue}const g=[];for(;o<n.length;){const l=n[o];if(!l.trim()||be.test(l)||xe.test(l)||ye.test(l))break;g.push(l),o++}g.length?t.push(L("p",{key:`b${s++}`},re(g.join(`
5
- `)))):o++}return L("div",{class:"snag-md"},t)}const jn={"detail.details":"Anchor details","detail.hidden":"This element isn't visible right now \u2014 it may be inside a closed menu, tab, or accordion.","detail.orphaned":"The element this was pinned to has moved or gone \u2014 it was {label}.","detail.approximate":"The page changed since this was written, so the pin is close rather than exact \u2014 it points at {label}.","detail.unavailable":"Some of the matching steps couldn't load, so this was judged with the basic ones only.","detail.filedat":"Filed at {query}.","detail.openquery":"Open with original query","capture.agent":"{browser} \xB7 {os}","capture.agent.noos":"{browser}","capture.device":"{device} \xB7 {w}\xD7{h} @{dpr}x","capture.device.at1x":"{device} \xB7 {w}\xD7{h}"},Fn={"disclosure.title":"Before your first comment","disclosure.always":"Each comment carries the page address, viewport size and browser make.","disclosure.crumbs.on":"Recent console messages and network results ride along, recognisable secrets redacted first.","disclosure.crumbs.off":"Console and network capture is off here.","disclosure.screenshot.off":"Screenshots are off for this project.","disclosure.screenshot.on":"{product} never reads what you type. Screenshots are pictures of the page, so anything visible on screen is in the picture \u2014 mark sensitive regions with {maskAttr} and they are blurred before the screenshot leaves your browser.","disclosure.retention":"Everything stays in this browser until someone exports it \u2014 the privacy notes list what can still leak.","disclosure.retention.server":"Your comment, the page address and the details above are sent to {host} when you post \u2014 the privacy notes list what can still leak.","disclosure.ack":"Got it","composer.aria":"New comment","composer.parent":"Pin the parent","composer.child":"Pin the first child","composer.shot":"Add a screenshot","composer.name":"Your name","composer.email":"Email, so we can reply","composer.email.bad":"Check the address \u2014 or leave it blank.","composer.chars":"{n} characters left","composer.body":"Comment","composer.body.placeholder":"What's the {item}?","action.cancel":"Cancel","action.post":"Post comment","composer.discard.sure":"Sure? Discard this comment","action.discard":"Discard?"},Bn={"shot.open":"See the screenshot","shot.aria":"Screenshot","shot.close":"Close","announce.status":"Comment {key} set to {status}.","search.placeholder":"Search {n} comments\u2026","search.aria":"Search comments","round.label":"Round","round.closed":"(closed)","filter.status":"Status","filter.clear":"Clear","filter.selectall":"Select all","sort.button":"Sort","sort.newest":"Newest first","sort.oldest":"Oldest first","sort.page":"By page","filter.button":"Filter","filter.button.n":"Filter \xB7 {n}","filter.by":"Comments by","filter.by.anyone":"Anyone","filter.pages":"Pages","filter.pages.all":"All pages","filter.pageonly":"Show comments on this page only","filter.new":"See new activity \xB7 {n}","filter.new.on":"Showing new activity \u2014 show all","filter.new.none":"You\u2019re caught up \u2014 show all","filter.read":"Marked as","filter.read.all":"Anyone\u2019s, read or not","filter.read.unread":"Unread","filter.read.read":"Read","dock.unread":"Unread","badge.anchored":"","badge.approximate":"~","badge.orphaned":"moved","badge.hidden":"hidden","capture.label":"Comment left on","capture.page":"{route}","device.Mobile":"Mobile","device.Desktop":"Desktop","dock.aria":"All comments","dock.title.list":"All comments","dock.title.detail":"Comment","dock.close":"Close all comments","dock.empty":"No comments yet. Press +, then click anything on the page.","dock.empty.filter":"Nothing matches that filter.","dock.empty.orphans":"Every comment here lost its element \u2014 but what each one pointed at is still recorded.","dock.empty.page":"Nothing on this page. {n} comments on {m} other pages.","dock.row.empty":"(no comment)","dock.replies":"{n} replies","dock.goto":"Go to {route}","dock.cluster":"{n} comments in this cluster","dock.cluster.clear":"Show all","dock.hiddenrow":"That comment is now hidden by your filter","dock.hiddenrow.show":"Show","dock.back":"All","dock.back.aria":"Back to all comments","dock.position":"{n} of {total}","dock.prev":"Previous comment","dock.next":"Next comment","dock.clear":"Clear all","dock.clear.aria":"Delete every comment in this review","comment.edit":"Edit this comment","comment.delete":"Delete this comment and its pin","reply.delete":"Delete this reply","detail.hidden.show":"Show anyway","field.status":"Status","permalink.copy":"Copy link","permalink.copied":"Copied","reply.add":"Add reply","reply.aria":"Reply","reply.placeholder":"Reply\u2026","reply.send":"Reply","action.more":"More actions","action.edit":"Edit","action.delete":"Delete","action.save":"Save","action.sure":"Sure?","export.button":"Export","export.md":"Markdown","export.json":"JSON"},qn={...Ze,...jn,...Fn,...Bn},p=Xe(qn),Kn=[/^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$/],Wn=[...Ue.query,...Ue.fragment];function Vn(e,n=[]){return Wn.includes(e)||n.includes(e)?!0:Kn.some(t=>t.test(e))}const ae=["open","progress","review","resolved"];function Gn(e,n){const t=e.includes(n)?e.filter(o=>o!==n):[...e,n];return t.length>=ae.length?[]:t}function Yn(e,n,t){if(n.statuses.length>0&&ae.includes(e.status)&&!n.statuses.includes(e.status)||n.by&&e.createdBy.id!==n.by||n.page&&e.route!==n.page)return!1;if(n.read!=="all"&&t){const o=se(e,t);if(n.read==="unread"&&!o||n.read==="read"&&o)return!1}return!0}function se(e,n){const t=n.get(e.id)??0;return Date.parse(e.updatedAt)>t}function Qn(e,n,t,o){let s=e;n.pageOnly&&(s=s.filter(i=>i.route===t)),n.newOnly&&o&&(s=s.filter(i=>se(i,o)));const a=n.q?.trim().toLowerCase();return a&&(s=s.filter(i=>i.comments.some(u=>(u.body??"").toLowerCase().includes(a)||u.author.name.toLowerCase().includes(a))||i.createdBy.name.toLowerCase().includes(a))),s}function Jn(e,n){if(n==="page")return e;const t=(s,a)=>Date.parse(s.createdAt)-Date.parse(a.createdAt),o=[...e].sort(t);return n==="oldest"?o:o.reverse()}function Xn(e){const n=new Map;for(const t of e)n.set(t.status,(n.get(t.status)??0)+1);return{all:e.length,byStatus:n}}function Zn(e){return(e.read!=="all"?1:0)+(e.by?1:0)+(e.page?1:0)}const ve=Object.keys(oe);function rn({label:e,title:n,cls:t,role:o,onConfirm:s}){const{armed:a,press:i}=On(s);return r("button",{type:"button",...o===void 0?{}:{role:o},class:`${t}${a?" snag-dk-armed":""}`,"aria-label":a?`${p("action.sure")} ${n}`:n,title:n,onClick:i,children:a?p("action.sure"):e})}function et({snag:e}){const n=e.context?.derived?.device;if(!n)return null;const t=p(`device.${n}`);return r("span",{class:"snag-dk-dev",title:t,"aria-label":t,role:"img",children:n==="Mobile"?r("svg",{width:"11",height:"14",viewBox:"0 0 11 14",fill:"none","aria-hidden":"true",children:[r("rect",{x:".75",y:".75",width:"9.5",height:"12.5",rx:"1.75",stroke:"currentColor","stroke-width":"1.5"}),r("path",{d:"M4.5 11h2",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"})]}):r("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[r("rect",{x:".75",y:"1.75",width:"12.5",height:"8.5",rx:"1.75",stroke:"currentColor","stroke-width":"1.5"}),r("path",{d:"M5 12.75h4",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"})]})})}function nt({anchor:e}){const n=[];if(e.testid&&n.push(["testid",e.testid]),e.domid&&n.push(["id",e.domid]),e.css&&n.push(["css",e.css]),e.hostPath?.length&&n.push(["shadow host",e.hostPath.join(" >> ")]),e.role&&n.push(["role",e.role]),e.accessibleName&&n.push(["name",e.accessibleName]),e.text?.exact&&n.push(["text",e.text.exact]),e.path?.length&&n.push(["path",e.path.join(" > ")]),e.rect){const t=e.rect;n.push(["rect",`${Math.round(t.x)}, ${Math.round(t.y)} \u2014 ${Math.round(t.w)} x ${Math.round(t.h)}`])}return e.breakpoint&&n.push(["breakpoint",`${e.breakpoint} at capture \xB7 you are at ${typeof window>"u"?"?":window.innerWidth}px`]),r("details",{class:"snag-dk-anchor",children:[r("summary",{children:p("detail.details")}),r("dl",{children:n.map(([t,o])=>r("div",{children:[r("dt",{children:t}),r("dd",{children:o})]},t))})]})}function an({body:e,onEdit:n,deleteLabel:t,onDelete:o}){const s=e??"",[a,i]=z(!1),[u,g]=z(!1),[l,_]=z(s),y=I(null),c=h=>{h.key!=="Escape"||!u||(h.stopPropagation(),g(!1))};return H(()=>{a&&y.current?.focus()},[a]),a?r("div",{class:"snag-dk-editbox",children:[r("textarea",{ref:y,class:"snag-text",rows:3,"aria-label":p("comment.edit"),value:l,onInput:h=>_(h.target.value),onKeyDown:h=>{h.key==="Enter"&&(h.metaKey||h.ctrlKey)&&(h.preventDefault(),l.trim()&&(n(l.trim()),i(!1))),h.key==="Escape"&&(h.stopPropagation(),_(s),i(!1))}}),r("div",{class:"snag-actions",children:[r("button",{type:"button",class:"snag-cancel",onClick:()=>{_(s),i(!1)},children:p("action.cancel")}),r("button",{type:"button",class:"snag-send",disabled:!l.trim()||l.trim()===s,onClick:()=>{n(l.trim()),i(!1)},children:p("action.save")})]})]}):r("div",{class:"snag-dk-acts snag-dk-menus",onKeyDown:c,children:[u&&r("div",{class:"snag-dk-menubg","aria-hidden":"true",onClick:()=>g(!1)}),r("span",{class:"snag-dk-menuwrap",children:[r("button",{type:"button",class:"snag-dk-act snag-dk-more","aria-label":p("action.more"),"aria-expanded":u,"aria-haspopup":"menu",title:p("action.more"),onClick:()=>g(!u),children:"\u22EF"}),u&&r("div",{class:"snag-dk-menu",role:"menu",children:[r("button",{type:"button",role:"menuitem",title:p("comment.edit"),"aria-label":p("comment.edit"),onClick:()=>{g(!1),_(s),i(!0)},children:p("action.edit")}),r(rn,{label:p("action.delete"),title:t,cls:"snag-dk-act--danger",role:"menuitem",onConfirm:o})]})]})]})}function tt({snag:e}){const n=e.anchorReasons?.includes("hidden")??!1;return r("span",{class:"snag-dk-dim snag-dk-where",children:[n&&r(N,{children:[r("span",{class:"snag-dk-moved",children:p("badge.hidden")})," "]}),e.anchorState!=="anchored"&&r(N,{children:[r("span",{class:"snag-dk-moved",children:p(`badge.${e.anchorState}`)})," "]}),e.anchor.label]})}function ot(e){const n=new Map,t=new Map;for(const o of e){const s=(n.get(o.route)??0)+1;n.set(o.route,s),t.set(o.id,s)}return t}function rt(e,n){const t=new Map;for(const o of e){const s=t.get(o.route);s?s.push(o):t.set(o.route,[o])}return[...t.entries()].map(([o,s])=>({route:o,here:o===n,snags:s})).sort((o,s)=>o.route.localeCompare(s.route))}function at({snag:e,n,here:t,unread:o,onOpen:s,onHover:a}){const i=g=>a(t?g:null),u=t?"":p("dock.goto",{route:e.route});return r("li",{children:r("button",{type:"button",class:"snag-dk-item",onClick:()=>s(e.id),onPointerEnter:()=>i(e.id),onPointerLeave:()=>i(null),onFocus:()=>i(e.id),onBlur:()=>i(null),children:[r("span",{class:`snag-dk-dot${o?" snag-dk-dot--on":""}`,role:"img","aria-label":o?p("dock.unread"):""}),r("span",{class:`snag-dk-num${e.anchorState==="anchored"?"":` snag-dk-num--${e.anchorState}`}`,style:{background:me(e.status),color:en(e.status)},children:n}),r("span",{class:"snag-dk-main",children:[r("span",{class:`snag-dk-body${e.status==="resolved"?" snag-dk-done":""}`,children:e.comments[0]?.body??p("dock.row.empty")}),r("span",{class:"snag-dk-sub",children:r(tt,{snag:e})})]}),r(et,{snag:e}),e.comments.length>1&&r("span",{class:"snag-dk-replies",role:"img","aria-label":p("dock.replies",{n:O(e.comments.length-1)}),children:O(e.comments.length-1)}),!t&&r("span",{class:"snag-dk-goto",role:"img",title:u,"aria-label":u,children:"\u2197"})]})})}const sn=e=>d[`status${e[0].toUpperCase()}${e.slice(1)}`]??d.muted;function st({round:e,filter:n,onFilter:t,rounds:o,activeRound:s,onRound:a,onClearAll:i,seenAt:u}){const g=!!o&&o.length>1&&!!a,l=e.length>0,[_,y]=z(null),c=Xn(e),h=k=>{const C={...n};for(const[E,D]of Object.entries(k))D===void 0?delete C[E]:C[E]=D;t(C)},$=n.statuses.length>0,b=Zn(n),m=[...new Map(e.map(k=>[k.createdBy.id,k.createdBy.name]))],w=[...new Set(e.map(k=>k.route))].sort(),v=[...c.byStatus.keys()].filter(k=>!ae.includes(k)),P=r("div",{class:"snag-dk-menugroup",children:[r("div",{class:"snag-dk-chiphead",children:[r("span",{class:"snag-dk-menutitle",children:p("filter.status")}),r("button",{type:"button",class:"snag-dk-link",onClick:()=>h({statuses:[]}),children:p($?"filter.selectall":"filter.clear")})]}),r("div",{class:"snag-dk-chips",role:"group","aria-label":p("filter.status"),children:[ae.map(k=>{const C=n.statuses.includes(k);return r("button",{type:"button",class:"snag-dk-chip","aria-pressed":C,style:`border-color:color-mix(in srgb, ${sn(k)} 60%, transparent);background:color-mix(in srgb, ${sn(k)} ${C?28:10}%, transparent)`,onClick:()=>h({statuses:Gn(n.statuses,k)}),children:[ke(k)," ",r("span",{class:"snag-dk-dim",children:O(c.byStatus.get(k)??0)})]})}),v.map(k=>r("span",{class:"snag-dk-chip snag-dk-chip-stray",children:[k," ",r("span",{class:"snag-dk-dim",children:O(c.byStatus.get(k)??0)})]}))]})]});return r("div",{class:"snag-dk-filters",children:[l&&r("input",{class:"snag-input snag-dk-search",type:"search","aria-label":p("search.aria"),placeholder:p("search.placeholder",{n:O(e.length)}),value:n.q??"",onInput:k=>h({q:k.currentTarget.value||void 0})}),r("div",{class:"snag-dk-menus",onKeyDown:k=>{k.key!=="Escape"||!_||(k.stopPropagation(),y(null))},children:[_&&r("div",{class:"snag-dk-menubg","aria-hidden":"true",onClick:()=>y(null)}),r("span",{class:"snag-dk-menuwrap",children:[r("button",{type:"button",class:"snag-dk-link","aria-expanded":_==="filter",onClick:()=>y(_==="filter"?null:"filter"),children:b>0?p("filter.button.n",{n:O(b)}):p("filter.button")}),_==="filter"&&r("div",{class:"snag-dk-menu snag-dk-menu-form",role:"group","aria-label":p("filter.button"),children:[(g||l)&&r("div",{class:"snag-dk-menugroup",children:[!g&&r("span",{class:"snag-dk-menutitle",children:p("round.label")}),g&&r("label",{class:"snag-dk-round",children:[r("span",{class:"snag-dk-menutitle",children:p("round.label")}),r("select",{class:"snag-input",value:String(s??""),onChange:k=>a(Number(k.currentTarget.value)),children:o.map(k=>r("option",{value:String(k.number),children:[k.name,k.closed?` ${p("round.closed")}`:""]},k.number))})]}),l&&r(rn,{label:p("dock.clear"),title:p("dock.clear.aria"),cls:"snag-dk-link snag-dk-clear",onConfirm:i})]}),l&&P,l&&r("div",{class:"snag-dk-menugroup",role:"radiogroup","aria-label":p("sort.button"),children:[r("span",{class:"snag-dk-menutitle","aria-hidden":"true",children:p("sort.button")}),[["newest","sort.newest"],["oldest","sort.oldest"],["page","sort.page"]].map(([k,C])=>r("button",{type:"button",role:"radio","aria-checked":n.sort===k,onClick:()=>h({sort:k}),children:[r("span",{class:"snag-dk-tick","aria-hidden":"true",children:n.sort===k?"\u2713":"\xA0"}),p(C)]}))]}),l&&r("div",{class:"snag-dk-menugroup snag-dk-menugroup-last",children:[u&&r("label",{children:[p("filter.read"),r("select",{value:n.read,onChange:k=>h({read:k.currentTarget.value}),children:[r("option",{value:"all",children:p("filter.read.all")}),r("option",{value:"unread",children:p("filter.read.unread")}),r("option",{value:"read",children:p("filter.read.read")})]})]}),r("label",{children:[p("filter.by"),r("select",{value:n.by??"",onChange:k=>h({by:k.currentTarget.value||void 0}),children:[r("option",{value:"",children:p("filter.by.anyone")}),m.map(([k,C])=>r("option",{value:k,children:C}))]})]}),r("label",{children:[p("filter.pages"),r("select",{value:n.page??"",onChange:k=>h({page:k.currentTarget.value||void 0}),children:[r("option",{value:"",children:p("filter.pages.all")}),w.map(k=>r("option",{value:k,children:k}))]})]}),r("label",{class:"snag-dk-pageonly",children:[r("input",{type:"checkbox",checked:n.pageOnly,onChange:k=>h({pageOnly:k.currentTarget.checked})})," ",p("filter.pageonly")]})]})]})]})]})]})}function it({snags:e,groups:n,route:t,onOpen:o,onHover:s,onExport:a,onClearAll:i,clusterFilter:u,onClusterClear:g,filter:l,onFilter:_,hiddenNote:y,onHiddenShow:c,rounds:h,activeRound:$,onRound:b,seenAt:m}){const w=ot(e),v=n.flatMap(f=>f.snags),P=l.statuses.length>0||!!l.by||!!l.page||!!l.q?.trim()||l.pageOnly||l.newOnly||l.read!=="all",k=m?e.filter(f=>se(f,m)).length:0,C=I(null),[E,D]=z(!1),R=f=>{f.key!=="Escape"||!E||(f.stopPropagation(),D(!1))},j=I(null);return H(()=>{const f=C.current,A=j.current;!f||!A||(f.scrollTop+=A.getBoundingClientRect().top-f.getBoundingClientRect().top)},[t,n.length]),r(N,{children:[(e.length>0||h&&h.length>1&&b)&&r(st,{round:e,filter:l,onFilter:_,onClearAll:i,...m===void 0?{}:{seenAt:m},...h===void 0?{}:{rounds:h},...$===void 0?{}:{activeRound:$},...b===void 0?{}:{onRound:b}}),m&&(k>0||l.newOnly)&&r("button",{type:"button",class:"snag-dk-newpill","aria-pressed":l.newOnly,onClick:()=>_({...l,newOnly:!l.newOnly}),children:l.newOnly?p(k===0?"filter.new.none":"filter.new.on"):p("filter.new",{n:O(k)})}),e.length===0?r("div",{class:"snag-dk-empty",children:r("p",{children:p("dock.empty")})}):v.length===0&&P?r("div",{class:"snag-dk-empty",children:l.pageOnly&&e.some(f=>f.route!==t)?r("p",{children:p("dock.empty.page",{n:O(e.filter(f=>f.route!==t).length),m:O(new Set(e.filter(f=>f.route!==t).map(f=>f.route)).size)})}):r("p",{children:p("dock.empty.filter")})}):r(N,{children:[y&&r("p",{class:"snag-dk-notice",children:[p("dock.hiddenrow")," ",r("button",{type:"button",class:"snag-dk-link",onClick:()=>c(y),children:p("dock.hiddenrow.show")})]}),u&&r("p",{class:"snag-dk-notice",children:[p("dock.cluster",{n:u.length})," ",r("button",{type:"button",class:"snag-dk-link",onClick:()=>g?.(),children:p("dock.cluster.clear")})]}),e.every(f=>f.anchorState==="orphaned")&&r("p",{class:"snag-dk-notice",children:p("dock.empty.orphans")}),r("div",{class:"snag-dk-scroll",ref:C,children:n.map(f=>r("section",{class:"snag-dk-group",ref:f.here?j:null,children:[f.route!==""&&r("h3",{class:"snag-dk-grouphd",children:[r("span",{class:"snag-dk-route",children:f.route}),r("span",{class:"snag-dk-dim",children:O(f.snags.length)})]}),r("ul",{class:"snag-dk-list",children:f.snags.map(A=>r(at,{snag:A,n:w.get(A.id),here:f.here,unread:!!m&&se(A,m),onOpen:o,onHover:s},A.id))})]},f.route))})]}),r("div",{class:"snag-dk-foot",children:r("div",{class:"snag-dk-menus snag-dk-menus-up",onKeyDown:R,children:[E&&r("div",{class:"snag-dk-menubg","aria-hidden":"true",onClick:()=>D(!1)}),r("span",{class:"snag-dk-menuwrap",children:[r("button",{type:"button",class:"snag-dk-link","aria-expanded":E,"aria-haspopup":"menu",onClick:()=>D(!E),children:p("export.button")}),E&&r("div",{class:"snag-dk-menu snag-dk-menu-up",role:"menu",children:["md","json"].map(f=>r("button",{type:"button",role:"menuitem",onClick:()=>{D(!1),a(f)},children:p(f==="md"?"export.md":"export.json")}))})]})]})})]})}const we=new Map;function lt(e){const n=[];try{for(const[t,o]of new URL(e).searchParams)Vn(t)||n.push(o&&o!=="[redacted]"?`${t}=${o}`:t)}catch{return null}return n.length?`?${n.join("&")}`:null}function dt({att:e,load:n}){const t=I(null),[o,s]=z(!1),[a,i]=z(null);return H(()=>{let u=!1;return n(e.id).then(async g=>{if(!g||u)return;const l=await createImageBitmap(g);u?l.close():i(l)}),()=>{u=!0}},[e.id]),H(()=>{const u=t.current;if(!u||!a)return;const g=142,l=g/a.width;u.width=g,u.height=Math.min(96,Math.round(a.height*l)),u.getContext("2d").drawImage(a,0,0,a.width,Math.round(u.height/l),0,0,u.width,u.height)},[a]),a?r(N,{children:[r("button",{type:"button",class:"snag-dk-shot",onClick:()=>s(!0),"aria-label":p("shot.open"),children:r("canvas",{ref:t})}),o&&r(ct,{bmp:a,onClose:()=>s(!1)})]}):null}function ct({bmp:e,onClose:n}){const t=I(null);return H(()=>{const o=t.current;o&&(o.width=e.width,o.height=e.height,o.getContext("2d").drawImage(e,0,0))},[e]),r("div",{class:"snag-dk-lightbox",role:"dialog","aria-modal":"true","aria-label":p("shot.aria"),tabIndex:-1,ref:o=>o?.focus(),onKeyDown:o=>{o.key==="Escape"&&(o.stopPropagation(),n())},onClick:n,children:[r("canvas",{ref:t}),r("button",{type:"button",class:"snag-dk-link snag-dk-lightclose",onClick:n,children:p("shot.close")})]})}function ut({snag:e,loadShot:n}){const t=e.context;if(!t)return null;const o=e.attachments?.find(u=>u.kind==="screenshot"),s=t.derived,a=t.viewport,i=a?Math.round(a.dpr*100)/100:1;return r("div",{class:"snag-dk-cap",children:[o&&n&&r(dt,{att:o,load:n}),r("p",{class:"snag-dk-caplabel",children:p("capture.label")}),t.page?.route!==void 0&&r("p",{children:p("capture.page",{route:t.page.route})}),s&&a&&r(N,{children:[r("p",{children:s.os?p("capture.agent",{browser:s.browser,os:s.os}):p("capture.agent.noos",{browser:s.browser})}),r("p",{children:i===1?p("capture.device.at1x",{device:s.device,w:a.w,h:a.h}):p("capture.device",{device:s.device,w:a.w,h:a.h,dpr:i})})]}),t.capture?.reasons?.map(u=>r("p",{class:"snag-dk-capwhy",children:u},u)),t.capture?.blindSpots?.map(u=>r("p",{class:"snag-dk-capwhy",children:u},u)),(()=>{const u=lt(t.url);return u?r("p",{class:"snag-dk-capwhy",children:[p("detail.filedat",{query:u})," ",r("a",{class:"snag-dk-openq",href:t.url,target:"_blank",rel:"noreferrer",children:p("detail.openquery")})]}):null})()]})}function ln(e){const n=e.context?.url??e.route;return`${n}${n.includes("?")?"&":"?"}${$n("t")}=${e.key}`}function pt({snag:e}){const[n,t]=z(!1),o=ln(e);return navigator.clipboard?r("button",{type:"button",class:"snag-dk-link",onClick:()=>void navigator.clipboard.writeText(o).then(()=>{t(!0),setTimeout(()=>t(!1),1500)},()=>{}),children:p(n?"permalink.copied":"permalink.copy")}):null}function gt({snag:e}){return navigator.clipboard?null:r("p",{class:"snag-dk-permaline",children:[r("span",{class:"snag-dk-permalabel",children:p("permalink.copy")})," ",r("span",{class:"snag-dk-permaurl",children:ln(e)})]})}function ht({snags:e,round:n,fallbackCursor:t,openId:o,onOpen:s,onStatus:a,onReply:i,onEdit:u,onDeleteComment:g,onDeleteThread:l,onShowAnyway:_,onAnnounce:y,loadShot:c}){const h=e.findIndex(f=>f.id===o),$=h>=0,b=$?h:Math.min(t,e.length),m=$?e[h]:n.find(f=>f.id===o),w=o?we.get(o)??"":"",[v,P]=z(w),[k,C]=z(w.length>0),E=I(null);H(()=>{k&&E.current?.focus()},[k]);const D=f=>{P(f),o&&(f?we.set(o,f):we.delete(o))};if(!m)return null;const R=m.comments[0],j=n.filter(f=>f.route===m.route).findIndex(f=>f.id===m.id)+1;return r("div",{class:"snag-dk-detail",children:[r("div",{class:"snag-dk-detailhd",children:[r("button",{type:"button",class:"snag-dk-link",onClick:()=>s(null),"aria-label":p("dock.back.aria"),children:[r("span",{"aria-hidden":"true",children:"\u2190"})," ",p("dock.back")]}),r("span",{class:"snag-dk-dim",children:p("dock.position",{n:$?O(b+1):"\u2013",total:O(e.length)})}),r("span",{class:"snag-dk-nav",children:[r("button",{type:"button",class:"snag-dk-link",disabled:b<=0,"aria-label":p("dock.prev"),onClick:()=>s(e[b-1].id),children:"\u2191"}),r("button",{type:"button",class:"snag-dk-link",disabled:$?b>=e.length-1:b>=e.length,"aria-label":p("dock.next"),onClick:()=>s(e[$?b+1:b].id),children:"\u2193"})]})]}),r("div",{class:"snag-dk-card",children:[r("div",{class:"snag-dk-meta",children:[r("span",{class:"snag-dk-num",style:{background:me(m.status),color:en(m.status)},children:j}),r("strong",{children:R?.author.name??p("author.unknown")}),r("span",{class:"snag-dk-dim",children:m.key}),r(pt,{snag:m})]}),r("div",{class:"snag-dk-cardbody",children:on(R?.body??"")}),r(gt,{snag:m}),R&&r(an,{body:R.body,onEdit:f=>u(R.id,f),deleteLabel:p("comment.delete"),onDelete:()=>l(m.id)})]}),r("label",{class:"snag-dk-field",children:[r("span",{class:"snag-dk-dim",children:p("field.status")}),r("select",{class:"snag-dk-select",style:{borderColor:me(m.status)},value:m.status,onChange:f=>{const A=f.target.value;a(m.id,A),y?.(p("announce.status",{key:m.key,status:ke(A)}))},children:ve.map(f=>r("option",{value:f,children:ke(f)},f))})]}),r(ut,{snag:m,...c?{loadShot:c}:{}}),m.anchorReasons?.includes("hidden")&&r("p",{class:"snag-dk-moved-note",children:[p("detail.hidden")," ",r("button",{type:"button",class:"snag-dk-link",onClick:()=>_?.(m),children:p("detail.hidden.show")})]}),m.anchorState!=="anchored"&&r("p",{class:"snag-dk-moved-note",children:[p(`detail.${m.anchorState}`,{label:m.anchor.label}),m.anchorReasons?.includes("budget-exceeded")&&` ${p("detail.unavailable")}`]}),m.anchorState!=="anchored"&&r(nt,{anchor:m.anchor}),m.comments.length>1&&r("ul",{class:"snag-dk-replies-list",children:m.comments.slice(1).map(f=>r("li",{children:[r("strong",{children:f.author.name}),on(f.body??""),r(an,{body:f.body,onEdit:A=>u(f.id,A),deleteLabel:p("reply.delete"),onDelete:()=>g(f.id)})]},f.id))}),k?r("div",{class:"snag-dk-replybox",children:[r("textarea",{ref:E,class:"snag-text",rows:2,enterkeyhint:"enter","aria-label":p("reply.aria"),placeholder:p("reply.placeholder"),value:v,onInput:f=>D(f.target.value),onKeyDown:f=>{f.key==="Enter"&&(f.metaKey||f.ctrlKey)&&(f.preventDefault(),v.trim()&&(i(m.id,v.trim()),D(""),C(!1))),f.key==="Escape"&&(f.stopPropagation(),f.target.blur())}}),r("div",{class:"snag-actions",children:[r("button",{type:"button",class:"snag-cancel",onClick:()=>{D(""),C(!1)},children:p("action.cancel")}),r("button",{type:"button",class:"snag-send",disabled:!v.trim(),onClick:()=>{i(m.id,v.trim()),D(""),C(!1)},children:p("reply.send")})]})]}):r("button",{type:"button",class:"snag-dk-addreply",onClick:()=>C(!0),children:p("reply.add")})]})}function ft(e){const n=e.openId?e.snags.find(b=>b.id===e.openId):null,t=I(null),o=e.clusterFilter?e.snags.filter(b=>e.clusterFilter.includes(b.id)):e.snags,s=Qn(o.filter(b=>Yn(b,e.filter,e.seenAt)),e.filter,e.route,e.seenAt),a=Jn(s,e.filter.sort),i=e.filter.sort==="page"?rt(a,e.route):[{route:"",here:!1,snags:a}],u=i.flatMap(b=>b.snags),g=I(0),l=u.findIndex(b=>b.id===e.openId);l>=0&&(g.current=l);const _=I(null),[y,c]=z(null);e.openId?(_.current={id:e.openId,absent:l===-1},y&&c(null)):_.current?.absent&&y!==_.current.id&&(c(_.current.id),_.current=null),H(()=>{t.current?.focus()},[e.openId]),H(()=>{if(!(window.matchMedia?.("(pointer: coarse)").matches??!1))return;const b=t.current;return b?Ln(b):void 0},[]);const h=I({snag:n,onStatus:e.onStatus});h.current={snag:n,onStatus:e.onStatus},H(()=>{const b=m=>{const{snag:w,onStatus:v}=h.current;if(!w||m.metaKey||m.ctrlKey||m.altKey||m.composedPath().some(C=>{const E=C;if(!E?.tagName)return!1;const D=E.tagName.toLowerCase();return D==="textarea"||D==="select"?!0:D==="input"?!/^(button|submit|checkbox|radio)$/i.test(E.type):E.isContentEditable?!0:/^(textbox|searchbox|combobox)$/.test(E.getAttribute?.("role")??"")}))return;const k=Number(m.key);if(k>=1&&k<=ve.length){m.preventDefault(),v(w.id,ve[k-1]);return}(m.key==="r"||m.key==="R")&&(m.preventDefault(),v(w.id,w.status==="resolved"?"open":"resolved"))};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[]);const $=window.matchMedia?.("(pointer: coarse)").matches??!1;return r("aside",{ref:t,class:"snag-dk",role:"complementary","aria-label":p("dock.aria"),tabIndex:-1,onKeyDown:b=>{b.key==="Escape"&&(b.stopPropagation(),e.openId?e.onOpen(null):e.onClose())},children:[$&&r("div",{class:"snag-dk-scrim","aria-hidden":"true",onClick:e.onClose}),$&&r("div",{class:"snag-dk-grab","aria-hidden":"true",onPointerDown:b=>{const m=b.clientY,w=b.currentTarget;try{w.setPointerCapture(b.pointerId)}catch{}w.onpointermove=v=>{v.clientY-m>56&&(w.onpointermove=null,e.onClose())},w.onpointerup=()=>w.onpointermove=null},children:r("span",{})}),r("header",{class:"snag-dk-hd",children:[r("strong",{children:p(n?"dock.title.detail":"dock.title.list")}),r("button",{type:"button",class:"snag-dk-link",onClick:e.onClose,"aria-label":p("dock.close"),children:"\u2715"})]}),n?r(ht,{...e,snags:u,round:e.snags,fallbackCursor:g.current},n.id):r(it,{...e,groups:i,hiddenNote:y,onHiddenShow:b=>{c(null),e.onOpen(b)}})]})}const dn=360,_t=` .snag-dk{position:fixed;inset-block:0;inset-inline-end:0;width:${dn}px;max-width:100vw;z-index:${Rn.dock};background:${d.bg};color:${d.fg};display:flex;flex-direction:column;font:400 13px/1.45 ${d.font};box-shadow:${d.shadow};border-inline-start:1px solid ${d.border};pointer-events:auto;overscroll-behavior:contain}.snag-dk-filters{padding:8px 12px 6px;border-block-end:1px solid ${d.border};display:grid;gap:6px}.snag-dk-search{width:100%;box-sizing:border-box;font-size:12px;padding:5px 8px}.snag-dk-chiphead{display:flex;justify-content:space-between;align-items:center;padding-inline-end:8px}.snag-dk-chips{display:grid;grid-template-columns:1fr 1fr;gap:4px}.snag-dk-chip{font:500 11px/1.2 ${d.font};color:${d.fg};padding:5px 8px;border-radius:6px;border:1px solid ${d.border};background:none;cursor:pointer;text-align:start;display:flex;justify-content:space-between;align-items:center;gap:4px}.snag-dk-chip[aria-pressed="true"]{font-weight:600}.snag-dk-chip-stray{color:${d.muted};cursor:default}.snag-dk-menus{display:flex;gap:10px;position:relative}.snag-dk-menuwrap{position:relative}.snag-dk-menugroup{display:flex;flex-direction:column;gap:1px;padding-bottom:6px;margin-bottom:6px;border-bottom:1px solid ${d.border}}.snag-dk-menugroup-last{padding-bottom:0;margin-bottom:0;border-bottom:0}.snag-dk-menutitle{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:${d.muted};padding:2px 8px 4px}.snag-dk-menubg{position:absolute;inset:-200px -20px -2000px;background:transparent;z-index:2}.snag-dk-menu{position:absolute;inset-block-start:100%;inset-inline-start:0;z-index:3;min-width:150px;background:${d.bg};border:1px solid ${d.border};border-radius:6px;box-shadow:${d.shadow};display:grid;padding:4px}.snag-dk-menu button{font:400 12px/1.3 ${d.font};color:${d.fg};background:none;border:0;text-align:start;padding:5px 8px;border-radius:4px;cursor:pointer;display:flex;gap:4px}.snag-dk-menu button:hover{background:color-mix(in srgb,${d.fg} 8%,transparent)}.snag-dk-menus-up{position:relative}.snag-dk-menu-up{inset-block-start:auto;inset-block-end:100%;margin-block-end:4px}.snag-dk-menu-form{padding:8px;gap:6px;min-width:224px}.snag-dk-menu-form label:not(.snag-dk-pageonly){display:grid;gap:2px;font:600 10px/1.4 ${d.font};letter-spacing:.05em;text-transform:uppercase;color:${d.muted}}.snag-dk-menu-form select{font:400 12px/1.3 ${d.font};color:${d.fg};background:${d.bg};border:1px solid ${d.border};border-radius:4px;padding:4px}.snag-dk-pageonly{display:flex;align-items:center;gap:6px;font-size:12px;color:${d.fg};cursor:pointer}.snag-dk-permaline{margin:6px 0 0;font-size:11px;color:${d.muted};overflow-wrap:anywhere}.snag-dk-permalabel{font-weight:600}.snag-dk-permaurl{user-select:all}.snag-dk:focus{outline:none}@media (pointer:coarse){.snag-dk{inset-block-start:auto;inset-inline-start:0;width:auto;height:82vh;border-radius:14px 14px 0 0;box-sizing:border-box;padding-bottom:max(var(${x.tbH},68px),var(${x.kb},0px));padding-inline:env(safe-area-inset-left) env(safe-area-inset-right)}.snag-dk-scrim{position:fixed;inset:0;background:#0005;touch-action:none;z-index:-1}.snag-dk-grab{display:flex;justify-content:center;padding:10px 0 4px;touch-action:none}.snag-dk-grab span{width:36px;height:4px;border-radius:2px;background:${d.border}}.snag-dk-item{min-height:56px}.snag-dk-link{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}.snag-dk-select{min-height:44px}.snag-dk-chip{min-height:44px}.snag-dk-search{min-height:44px}}@media (pointer:fine){.snag-dk-scrim,.snag-dk-grab{display:none}}.snag-dk-hd{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid ${d.border};flex:0 0 auto}.snag-dk-scroll{overflow-y:auto;flex:1 1 auto}.snag-dk-list{list-style:none;margin:0;padding:0}.snag-dk-grouphd{position:sticky;top:0;z-index:1;margin:0;display:flex;align-items:center;gap:8px;padding:7px 14px;font:600 11px/1.45 ${d.font};letter-spacing:.02em;background:${d.sunken};border-bottom:1px solid ${d.border}}.snag-dk-route{color:${d.fg};overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;direction:ltr;unicode-bidi:isolate}.snag-dk-grouphd .snag-dk-dim{margin-inline-start:auto;font-weight:400;flex:0 0 auto}.snag-dk-goto{flex:0 0 auto;color:${d.muted};font-size:13px;line-height:1}.snag-dk-dev{flex:0 0 auto;color:${d.muted};display:flex;align-items:center}.snag-dk-item:hover .snag-dk-goto,.snag-dk-item:focus-visible .snag-dk-goto{color:${d.accent}}.snag-dk-item{display:flex;gap:10px;align-items:flex-start;width:100%;text-align:start;background:transparent;border:0;border-bottom:1px solid ${d.border};color:inherit;font:inherit;padding:11px 14px;cursor:pointer;transition:background ${d.motion}}.snag-dk-item:hover{background:${d.hover}}.snag-dk-item:focus-visible{outline:2px solid ${d.focus};outline-offset:-2px}.snag-dk-dot{flex:0 0 7px;width:7px;height:7px;border-radius:50%;margin-block-start:8px;background:transparent}.snag-dk-dot--on{background:${d.accent}}.snag-dk-newpill{display:block;width:100%;box-sizing:border-box;text-align:start;background:${d.sunken};border:0;border-block-end:1px solid ${d.border};color:${d.accent};font:600 12px/1.45 ${d.font};padding:8px 14px;cursor:pointer;flex:0 0 auto}.snag-dk-newpill:hover{background:${d.hover}}.snag-dk-newpill:focus-visible{outline:2px solid ${d.focus};outline-offset:-2px}.snag-dk-num{flex:0 0 22px;height:22px;border-radius:50% 50% 50% 2px;font-weight:600;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box}.snag-dk-num--orphaned{border:2px solid currentColor;box-shadow:inset 0 0 0 2px currentColor}.snag-dk-num--approximate{border:2px dashed currentColor}.snag-dk-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}.snag-dk-body,.snag-dk-sub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.snag-dk-sub{font-size:11px}.snag-dk-dim{color:${d.muted}}.snag-dk-moved{color:${d.anchorOrphan};font-weight:600}.snag-dk-replies{background:${d.surface};border-radius:999px;padding:1px 7px;font-size:11px;flex:0 0 auto}.snag-dk-empty{padding:28px 16px;text-align:center;flex:1 1 auto}.snag-dk-empty p{margin:0 0 4px}.snag-dk-notice{margin:0;padding:11px 14px;font-size:12px;color:${d.muted};border-bottom:1px solid ${d.border};flex:0 0 auto}.snag-dk-foot{display:flex;gap:6px;padding:10px 14px;border-top:1px solid ${d.border};flex:0 0 auto}.snag-dk-link{background:transparent;border:0;color:${d.accent};font:inherit;cursor:pointer;padding:4px 6px;border-radius:calc(${d.radius} - 2px);transition:background ${d.motion}}.snag-dk-link:hover:not(:disabled){background:${d.hover}}.snag-dk-link:disabled{color:${d.disabled};cursor:not-allowed}.snag-dk-link:focus-visible{outline:2px solid ${d.focus};outline-offset:1px}.snag-dk-detail{padding:12px 14px;overflow-y:auto;flex:1 1 auto;display:flex;flex-direction:column;gap:12px}.snag-dk-detailhd{display:flex;align-items:center;justify-content:space-between;gap:8px}.snag-dk-nav{display:flex;gap:2px}.snag-dk-card{background:${d.surface};border-radius:${d.radius};padding:11px}.snag-dk-meta{display:flex;justify-content:space-between;gap:8px;font-size:12px;margin-bottom:6px}.snag-md{overflow-wrap:anywhere}.snag-md>*{margin:0}.snag-md>*+*{margin-block-start:6px}.snag-md p{white-space:pre-wrap}.snag-md ul,.snag-md ol{padding-inline-start:20px}.snag-md li+li{margin-block-start:2px}.snag-md code{background:${d.sunken};border-radius:3px;padding:1px 4px;font-size:.92em;font-family:ui-monospace,monospace}.snag-md pre{background:${d.sunken};border-radius:${d.radius};padding:8px 10px;overflow-x:auto}.snag-md pre code{background:none;padding:0;font-size:.92em}.snag-md a{color:${d.accent}}.snag-dk-field{display:flex;flex-direction:column;gap:4px;font-size:12px}.snag-dk-select{background:${d.surface};color:inherit;border:2px solid;border-radius:${d.radius};padding:7px 9px;font:inherit;min-height:34px}.snag-dk-done{color:${d.muted};text-decoration:line-through}.snag-dk-meta .snag-dk-num{margin-inline-end:2px}.snag-dk-cap{background:${d.sunken};border-radius:${d.radius};padding:9px 11px;display:flex;flex-direction:column;gap:1px;font-size:12px;overflow-wrap:anywhere}.snag-dk-cap p{margin:0}.snag-dk-shot{padding:0;border:1px solid ${d.border};border-radius:calc(${d.radius} - 2px);background:none;cursor:zoom-in;overflow:hidden;line-height:0;align-self:flex-start;margin-block-end:6px}.snag-dk-shot canvas{display:block;max-width:100%}.snag-dk-lightbox{position:fixed;inset:0;z-index:1;background:#000c;display:flex;align-items:center;justify-content:center;padding:24px;cursor:zoom-out}.snag-dk-lightbox canvas{max-width:100%;max-height:100%;object-fit:contain;box-shadow:${d.shadow};background:${d.bg}}.snag-dk-lightclose{position:absolute;inset-block-start:12px;inset-inline-end:16px;color:#fff}.snag-dk-caplabel{font-weight:600;font-size:11px;letter-spacing:.02em;margin-bottom:3px!important}.snag-dk-capwhy{color:${d.muted};font-size:11px;margin-top:5px!important}.snag-dk-moved-note{margin:0;padding:8px 10px;font-size:12px;background:${d.sunken};border-inline-start:3px solid ${d.anchorOrphan};border-radius:${d.radius}}.snag-dk-anchor{font-size:12px;border:1px solid ${d.border};border-radius:${d.radius};padding:6px 10px;background:${d.sunken}}.snag-dk-anchor summary{cursor:pointer;color:${d.muted};font-weight:600;list-style:revert}.snag-dk-anchor dl{margin:8px 0 2px;display:grid;gap:6px}.snag-dk-anchor dt{color:${d.muted};font-size:11px;letter-spacing:.03em;text-transform:uppercase}.snag-dk-anchor dd{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere;user-select:text}.snag-dk-replies-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.snag-dk-replies-list li{background:${d.sunken};border-radius:${d.radius};padding:9px;overflow-wrap:anywhere}.snag-dk-acts{display:flex;gap:2px;margin-top:6px}.snag-dk-act{background:transparent;border:0;color:${d.muted};font:inherit;font-size:11px;cursor:pointer;padding:3px 6px;border-radius:calc(${d.radius} - 3px);transition:background ${d.motion},color ${d.motion}}.snag-dk-more{font-size:14px;line-height:1;letter-spacing:1px}.snag-dk-act:hover{background:${d.hover};color:inherit}.snag-dk-act:focus-visible{outline:2px solid ${d.focus};outline-offset:1px}.snag-dk-act--danger:hover{color:${d.anchorOrphan}}.snag-dk-menu .snag-dk-act--danger{color:${d.fg}}.snag-dk-menu .snag-dk-act--danger:hover{color:${d.anchorOrphan}}.snag-dk-armed{color:${d.anchorOrphan};font-weight:600}.snag-dk-clear{margin-inline-start:auto}.snag-dk-menu .snag-dk-clear{margin-inline-start:0}.snag-dk-editbox{display:flex;flex-direction:column;gap:8px;margin-top:8px}.snag-dk-addreply{background:transparent;border:1px dashed ${d.border};color:${d.muted};border-radius:${d.radius};padding:9px;font:inherit;cursor:pointer;text-align:start;transition:border-color ${d.motion},color ${d.motion}}.snag-dk-addreply:hover{border-color:${d.accent};color:inherit}.snag-dk-replybox{display:flex;flex-direction:column;gap:8px}`;function mt(e,n,t){const o=e.ownerDocument??document;tn(e,"form",zn),tn(e,"dock",_t);const s=o.createElement("div");(t??e).appendChild(s);const a=o.defaultView?.matchMedia?.("(pointer: coarse)").matches??!1,i=g=>{const l=e.host;g&&!a?l.style.setProperty(x.dockW,`${dn}px`):l.style.removeProperty(x.dockW)};i(!0);const u=g=>{Ie(r(ft,{...g}),s)};return u(n),{update:u,close(){i(!1),Ie(null,s),s.remove()}}}const cn=24;function un(e,n){const t=e.innerHeight,o=n.querySelector(".snag-dk");if(!o)return{top:0,bottom:t};const s=o.getBoundingClientRect();return s.height>=t-1?{top:0,bottom:t}:{top:0,bottom:Math.max(0,s.top)}}function kt(e,n,t){const o=t.anchor.rect;if(!o)return;const s=t.anchor.offset??{fy:.5},a=o.y+o.h*s.fy,i=un(e,n),u=a-e.scrollY;if(u>=i.top+cn&&u<=i.bottom-cn)return;const g=e.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;e.scrollTo({top:Math.max(0,a-(i.top+i.bottom)/2),behavior:g?"auto":"smooth"})}export{mt as openDock,kt as scrollToSnag,un as visibleStrip};
5
+ `)))):o++}return L("div",{class:"snag-md"},t)}const jn={"detail.details":"Anchor details","detail.hidden":"This element isn't visible right now \u2014 it may be inside a closed menu, tab, or accordion.","detail.orphaned":"The element this was pinned to has moved or gone \u2014 it was {label}.","detail.approximate":"The page changed since this was written, so the pin is close rather than exact \u2014 it points at {label}.","detail.unavailable":"Some of the matching steps couldn't load, so this was judged with the basic ones only.","detail.filedat":"Filed at {query}.","detail.openquery":"Open with original query","capture.agent":"{browser} \xB7 {os}","capture.agent.noos":"{browser}","capture.device":"{device} \xB7 {w}\xD7{h} @{dpr}x","capture.device.at1x":"{device} \xB7 {w}\xD7{h}"},Fn={"disclosure.title":"Before your first comment","disclosure.always":"Each comment carries the page address, viewport size and browser make.","disclosure.crumbs.on":"Recent console messages and network results ride along, recognisable secrets redacted first.","disclosure.crumbs.off":"Console and network capture is off here.","disclosure.screenshot.off":"Screenshots are off for this project.","disclosure.screenshot.on":"{product} never reads what you type. Screenshots are pictures of the page, so anything visible on screen is in the picture \u2014 mark sensitive regions with {maskAttr} and they are blurred before the screenshot leaves your browser.","disclosure.retention":"Everything stays in this browser until someone exports it \u2014 the privacy notes list what can still leak.","disclosure.retention.server":"Your comment, the page address and the details above are sent to {host} when you post \u2014 the privacy notes list what can still leak.","disclosure.ack":"Got it","composer.aria":"New comment","composer.parent":"Pin the parent","composer.child":"Pin the first child","composer.shot":"Add a screenshot","composer.name":"Your name","composer.email":"Email, so we can reply","composer.email.bad":"Check the address \u2014 or leave it blank.","composer.chars":"{n} characters left","composer.body":"Comment","composer.body.placeholder":"What's the {item}?","action.cancel":"Cancel","action.post":"Post comment","composer.discard.sure":"Sure? Discard this comment","action.discard":"Discard?"},Bn={"shot.open":"See the screenshot","shot.aria":"Screenshot","shot.close":"Close","announce.status":"Comment {key} set to {status}.","search.placeholder":"Search {n} comments\u2026","search.aria":"Search comments","round.label":"Round","round.closed":"(closed)","filter.status":"Status","filter.clear":"Clear","filter.selectall":"Select all","sort.button":"Sort","sort.newest":"Newest first","sort.oldest":"Oldest first","sort.page":"By page","filter.button":"Filter","filter.button.n":"Filter \xB7 {n}","filter.by":"Comments by","filter.by.anyone":"Anyone","filter.pages":"Pages","filter.pages.all":"All pages","filter.pageonly":"Show comments on this page only","filter.new":"See new activity \xB7 {n}","filter.new.on":"Showing new activity \u2014 show all","filter.new.none":"You\u2019re caught up \u2014 show all","filter.read":"Marked as","filter.read.all":"Anyone\u2019s, read or not","filter.read.unread":"Unread","filter.read.read":"Read","dock.unread":"Unread","badge.anchored":"","badge.approximate":"~","badge.orphaned":"moved","badge.hidden":"hidden","capture.label":"Comment left on","capture.page":"{route}","device.Mobile":"Mobile","device.Desktop":"Desktop","dock.aria":"All comments","dock.title.list":"All comments","dock.title.detail":"Comment","dock.close":"Close all comments","dock.empty":"No comments yet. Press +, then click anything on the page.","dock.empty.filter":"Nothing matches that filter.","dock.empty.orphans":"Every comment here lost its element \u2014 but what each one pointed at is still recorded.","dock.empty.page":"Nothing on this page. {n} comments on {m} other pages.","dock.row.empty":"(no comment)","dock.replies":"{n} replies","dock.goto":"Go to {route}","dock.cluster":"{n} comments in this cluster","dock.cluster.clear":"Show all","dock.hiddenrow":"That comment is now hidden by your filter","dock.hiddenrow.show":"Show","dock.back":"All","dock.back.aria":"Back to all comments","dock.position":"{n} of {total}","dock.prev":"Previous comment","dock.next":"Next comment","dock.clear":"Clear all","dock.clear.aria":"Delete every comment in this review","comment.edit":"Edit this comment","comment.delete":"Delete this comment and its pin","reply.delete":"Delete this reply","detail.hidden.show":"Show anyway","field.status":"Status","permalink.copy":"Copy link","permalink.copied":"Copied","reply.add":"Add reply","reply.aria":"Reply","reply.placeholder":"Reply\u2026","reply.send":"Reply","action.more":"More actions","action.edit":"Edit","action.delete":"Delete","action.save":"Save","action.sure":"Sure?","export.button":"Export","export.md":"Markdown","export.json":"JSON"},qn={...Ze,...jn,...Fn,...Bn},p=Xe(qn),Kn=[/^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$/],Wn=[...Ue.query,...Ue.fragment];function Vn(e,n=[]){return Wn.includes(e)||n.includes(e)?!0:Kn.some(t=>t.test(e))}const ae=["open","progress","review","resolved"];function Gn(e,n){const t=e.includes(n)?e.filter(o=>o!==n):[...e,n];return t.length>=ae.length?[]:t}function Yn(e,n,t){if(n.statuses.length>0&&ae.includes(e.status)&&!n.statuses.includes(e.status)||n.by&&e.createdBy.id!==n.by||n.page&&e.route!==n.page)return!1;if(n.read!=="all"&&t){const o=se(e,t);if(n.read==="unread"&&!o||n.read==="read"&&o)return!1}return!0}function se(e,n){const t=n.get(e.id)??0;return Date.parse(e.updatedAt)>t}function Qn(e,n,t,o){let s=e;n.pageOnly&&(s=s.filter(i=>i.route===t)),n.newOnly&&o&&(s=s.filter(i=>se(i,o)));const a=n.q?.trim().toLowerCase();return a&&(s=s.filter(i=>i.comments.some(u=>(u.body??"").toLowerCase().includes(a)||u.author.name.toLowerCase().includes(a))||i.createdBy.name.toLowerCase().includes(a))),s}function Jn(e,n){if(n==="page")return e;const t=(s,a)=>Date.parse(s.createdAt)-Date.parse(a.createdAt),o=[...e].sort(t);return n==="oldest"?o:o.reverse()}function Xn(e){const n=new Map;for(const t of e)n.set(t.status,(n.get(t.status)??0)+1);return{all:e.length,byStatus:n}}function Zn(e){return(e.read!=="all"?1:0)+(e.by?1:0)+(e.page?1:0)}const ve=Object.keys(oe);function rn({label:e,title:n,cls:t,role:o,onConfirm:s}){const{armed:a,press:i}=On(s);return r("button",{type:"button",...o===void 0?{}:{role:o},class:`${t}${a?" snag-dk-armed":""}`,"aria-label":a?`${p("action.sure")} ${n}`:n,title:n,onClick:i,children:a?p("action.sure"):e})}function et({snag:e}){const n=e.context?.derived?.device;if(!n)return null;const t=p(`device.${n}`);return r("span",{class:"snag-dk-dev",title:t,"aria-label":t,role:"img",children:n==="Mobile"?r("svg",{width:"11",height:"14",viewBox:"0 0 11 14",fill:"none","aria-hidden":"true",children:[r("rect",{x:".75",y:".75",width:"9.5",height:"12.5",rx:"1.75",stroke:"currentColor","stroke-width":"1.5"}),r("path",{d:"M4.5 11h2",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"})]}):r("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[r("rect",{x:".75",y:"1.75",width:"12.5",height:"8.5",rx:"1.75",stroke:"currentColor","stroke-width":"1.5"}),r("path",{d:"M5 12.75h4",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"})]})})}function nt({anchor:e}){const n=[];if(e.testid&&n.push(["testid",e.testid]),e.domid&&n.push(["id",e.domid]),e.css&&n.push(["css",e.css]),e.hostPath?.length&&n.push(["shadow host",e.hostPath.join(" >> ")]),e.role&&n.push(["role",e.role]),e.accessibleName&&n.push(["name",e.accessibleName]),e.text?.exact&&n.push(["text",e.text.exact]),e.path?.length&&n.push(["path",e.path.join(" > ")]),e.rect){const t=e.rect;n.push(["rect",`${Math.round(t.x)}, ${Math.round(t.y)} \u2014 ${Math.round(t.w)} x ${Math.round(t.h)}`])}return e.breakpoint&&n.push(["breakpoint",`${e.breakpoint} at capture \xB7 you are at ${typeof window>"u"?"?":window.innerWidth}px`]),r("details",{class:"snag-dk-anchor",children:[r("summary",{children:p("detail.details")}),r("dl",{children:n.map(([t,o])=>r("div",{children:[r("dt",{children:t}),r("dd",{children:o})]},t))})]})}function an({body:e,onEdit:n,deleteLabel:t,onDelete:o}){const s=e??"",[a,i]=z(!1),[u,g]=z(!1),[l,_]=z(s),y=I(null),c=h=>{h.key!=="Escape"||!u||(h.stopPropagation(),g(!1))};return H(()=>{a&&y.current?.focus()},[a]),a?r("div",{class:"snag-dk-editbox",children:[r("textarea",{ref:y,class:"snag-text",rows:3,"aria-label":p("comment.edit"),value:l,onInput:h=>_(h.target.value),onKeyDown:h=>{h.key==="Enter"&&(h.metaKey||h.ctrlKey)&&(h.preventDefault(),l.trim()&&(n(l.trim()),i(!1))),h.key==="Escape"&&(h.stopPropagation(),_(s),i(!1))}}),r("div",{class:"snag-actions",children:[r("button",{type:"button",class:"snag-cancel",onClick:()=>{_(s),i(!1)},children:p("action.cancel")}),r("button",{type:"button",class:"snag-send",disabled:!l.trim()||l.trim()===s,onClick:()=>{n(l.trim()),i(!1)},children:p("action.save")})]})]}):r("div",{class:"snag-dk-acts snag-dk-menus",onKeyDown:c,children:[u&&r("div",{class:"snag-dk-menubg","aria-hidden":"true",onClick:()=>g(!1)}),r("span",{class:"snag-dk-menuwrap",children:[r("button",{type:"button",class:"snag-dk-act snag-dk-more","aria-label":p("action.more"),"aria-expanded":u,"aria-haspopup":"menu",title:p("action.more"),onClick:()=>g(!u),children:"\u22EF"}),u&&r("div",{class:"snag-dk-menu",role:"menu",children:[r("button",{type:"button",role:"menuitem",title:p("comment.edit"),"aria-label":p("comment.edit"),onClick:()=>{g(!1),_(s),i(!0)},children:p("action.edit")}),r(rn,{label:p("action.delete"),title:t,cls:"snag-dk-act--danger",role:"menuitem",onConfirm:o})]})]})]})}function tt({snag:e}){const n=e.anchorReasons?.includes("hidden")??!1;return r("span",{class:"snag-dk-dim snag-dk-where",children:[n&&r(N,{children:[r("span",{class:"snag-dk-moved",children:p("badge.hidden")})," "]}),e.anchorState!=="anchored"&&r(N,{children:[r("span",{class:"snag-dk-moved",children:p(`badge.${e.anchorState}`)})," "]}),e.anchor.label]})}function ot(e){const n=new Map,t=new Map;for(const o of e){const s=(n.get(o.route)??0)+1;n.set(o.route,s),t.set(o.id,s)}return t}function rt(e,n){const t=new Map;for(const o of e){const s=t.get(o.route);s?s.push(o):t.set(o.route,[o])}return[...t.entries()].map(([o,s])=>({route:o,here:o===n,snags:s})).sort((o,s)=>o.route.localeCompare(s.route))}function at({snag:e,n,here:t,unread:o,onOpen:s,onHover:a}){const i=g=>a(t?g:null),u=t?"":p("dock.goto",{route:e.route});return r("li",{children:r("button",{type:"button",class:"snag-dk-item",onClick:()=>s(e.id),onPointerEnter:()=>i(e.id),onPointerLeave:()=>i(null),onFocus:()=>i(e.id),onBlur:()=>i(null),children:[r("span",{class:`snag-dk-dot${o?" snag-dk-dot--on":""}`,role:"img","aria-label":o?p("dock.unread"):""}),r("span",{class:`snag-dk-num${e.anchorState==="anchored"?"":` snag-dk-num--${e.anchorState}`}`,style:{background:me(e.status),color:en(e.status)},children:n}),r("span",{class:"snag-dk-main",children:[r("span",{class:`snag-dk-body${e.status==="resolved"?" snag-dk-done":""}`,children:e.comments[0]?.body??p("dock.row.empty")}),r("span",{class:"snag-dk-sub",children:r(tt,{snag:e})})]}),r(et,{snag:e}),e.comments.length>1&&r("span",{class:"snag-dk-replies",role:"img","aria-label":p("dock.replies",{n:O(e.comments.length-1)}),children:O(e.comments.length-1)}),!t&&r("span",{class:"snag-dk-goto",role:"img",title:u,"aria-label":u,children:"\u2197"})]})})}const sn=e=>d[`status${e[0].toUpperCase()}${e.slice(1)}`]??d.muted;function st({round:e,filter:n,onFilter:t,rounds:o,activeRound:s,onRound:a,onClearAll:i,seenAt:u}){const g=!!o&&o.length>1&&!!a,l=e.length>0,[_,y]=z(null),c=Xn(e),h=k=>{const C={...n};for(const[E,D]of Object.entries(k))D===void 0?delete C[E]:C[E]=D;t(C)},$=n.statuses.length>0,b=Zn(n),m=[...new Map(e.map(k=>[k.createdBy.id,k.createdBy.name]))],w=[...new Set(e.map(k=>k.route))].sort(),v=[...c.byStatus.keys()].filter(k=>!ae.includes(k)),P=r("div",{class:"snag-dk-menugroup",children:[r("div",{class:"snag-dk-chiphead",children:[r("span",{class:"snag-dk-menutitle",children:p("filter.status")}),r("button",{type:"button",class:"snag-dk-link",onClick:()=>h({statuses:[]}),children:p($?"filter.selectall":"filter.clear")})]}),r("div",{class:"snag-dk-chips",role:"group","aria-label":p("filter.status"),children:[ae.map(k=>{const C=n.statuses.includes(k);return r("button",{type:"button",class:"snag-dk-chip","aria-pressed":C,style:`border-color:color-mix(in srgb, ${sn(k)} 60%, transparent);background:color-mix(in srgb, ${sn(k)} ${C?28:10}%, transparent)`,onClick:()=>h({statuses:Gn(n.statuses,k)}),children:[ke(k)," ",r("span",{class:"snag-dk-dim",children:O(c.byStatus.get(k)??0)})]})}),v.map(k=>r("span",{class:"snag-dk-chip snag-dk-chip-stray",children:[k," ",r("span",{class:"snag-dk-dim",children:O(c.byStatus.get(k)??0)})]}))]})]});return r("div",{class:"snag-dk-filters",children:[l&&r("input",{class:"snag-input snag-dk-search",type:"search","aria-label":p("search.aria"),placeholder:p("search.placeholder",{n:O(e.length)}),value:n.q??"",onInput:k=>h({q:k.currentTarget.value||void 0})}),r("div",{class:"snag-dk-menus",onKeyDown:k=>{k.key!=="Escape"||!_||(k.stopPropagation(),y(null))},children:[_&&r("div",{class:"snag-dk-menubg","aria-hidden":"true",onClick:()=>y(null)}),r("span",{class:"snag-dk-menuwrap",children:[r("button",{type:"button",class:"snag-dk-link","aria-expanded":_==="filter",onClick:()=>y(_==="filter"?null:"filter"),children:b>0?p("filter.button.n",{n:O(b)}):p("filter.button")}),_==="filter"&&r("div",{class:"snag-dk-menu snag-dk-menu-form",role:"group","aria-label":p("filter.button"),children:[(g||l)&&r("div",{class:"snag-dk-menugroup",children:[!g&&r("span",{class:"snag-dk-menutitle",children:p("round.label")}),g&&r("label",{class:"snag-dk-round",children:[r("span",{class:"snag-dk-menutitle",children:p("round.label")}),r("select",{class:"snag-input",value:String(s??""),onChange:k=>a(Number(k.currentTarget.value)),children:o.map(k=>r("option",{value:String(k.number),children:[k.name,k.closed?` ${p("round.closed")}`:""]},k.number))})]}),l&&r(rn,{label:p("dock.clear"),title:p("dock.clear.aria"),cls:"snag-dk-link snag-dk-clear",onConfirm:i})]}),l&&P,l&&r("div",{class:"snag-dk-menugroup",role:"radiogroup","aria-label":p("sort.button"),children:[r("span",{class:"snag-dk-menutitle","aria-hidden":"true",children:p("sort.button")}),[["newest","sort.newest"],["oldest","sort.oldest"],["page","sort.page"]].map(([k,C])=>r("button",{type:"button",role:"radio","aria-checked":n.sort===k,onClick:()=>h({sort:k}),children:[r("span",{class:"snag-dk-tick","aria-hidden":"true",children:n.sort===k?"\u2713":"\xA0"}),p(C)]}))]}),l&&r("div",{class:"snag-dk-menugroup snag-dk-menugroup-last",children:[u&&r("label",{children:[p("filter.read"),r("select",{value:n.read,onChange:k=>h({read:k.currentTarget.value}),children:[r("option",{value:"all",children:p("filter.read.all")}),r("option",{value:"unread",children:p("filter.read.unread")}),r("option",{value:"read",children:p("filter.read.read")})]})]}),r("label",{children:[p("filter.by"),r("select",{value:n.by??"",onChange:k=>h({by:k.currentTarget.value||void 0}),children:[r("option",{value:"",children:p("filter.by.anyone")}),m.map(([k,C])=>r("option",{value:k,children:C}))]})]}),r("label",{children:[p("filter.pages"),r("select",{value:n.page??"",onChange:k=>h({page:k.currentTarget.value||void 0}),children:[r("option",{value:"",children:p("filter.pages.all")}),w.map(k=>r("option",{value:k,children:k}))]})]}),r("label",{class:"snag-dk-pageonly",children:[r("input",{type:"checkbox",checked:n.pageOnly,onChange:k=>h({pageOnly:k.currentTarget.checked})})," ",p("filter.pageonly")]})]})]})]})]})]})}function it({snags:e,groups:n,route:t,onOpen:o,onHover:s,onExport:a,onClearAll:i,clusterFilter:u,onClusterClear:g,filter:l,onFilter:_,hiddenNote:y,onHiddenShow:c,rounds:h,activeRound:$,onRound:b,seenAt:m}){const w=ot(e),v=n.flatMap(f=>f.snags),P=l.statuses.length>0||!!l.by||!!l.page||!!l.q?.trim()||l.pageOnly||l.newOnly||l.read!=="all",k=m?e.filter(f=>se(f,m)).length:0,C=I(null),[E,D]=z(!1),R=f=>{f.key!=="Escape"||!E||(f.stopPropagation(),D(!1))},j=I(null);return H(()=>{const f=C.current,A=j.current;!f||!A||(f.scrollTop+=A.getBoundingClientRect().top-f.getBoundingClientRect().top)},[t,n.length]),r(N,{children:[(e.length>0||h&&h.length>1&&b)&&r(st,{round:e,filter:l,onFilter:_,onClearAll:i,...m===void 0?{}:{seenAt:m},...h===void 0?{}:{rounds:h},...$===void 0?{}:{activeRound:$},...b===void 0?{}:{onRound:b}}),m&&(k>0||l.newOnly)&&r("button",{type:"button",class:"snag-dk-newpill","aria-pressed":l.newOnly,onClick:()=>_({...l,newOnly:!l.newOnly}),children:l.newOnly?p(k===0?"filter.new.none":"filter.new.on"):p("filter.new",{n:O(k)})}),e.length===0?r("div",{class:"snag-dk-empty",children:r("p",{children:p("dock.empty")})}):v.length===0&&P?r("div",{class:"snag-dk-empty",children:l.pageOnly&&e.some(f=>f.route!==t)?r("p",{children:p("dock.empty.page",{n:O(e.filter(f=>f.route!==t).length),m:O(new Set(e.filter(f=>f.route!==t).map(f=>f.route)).size)})}):r("p",{children:p("dock.empty.filter")})}):r(N,{children:[y&&r("p",{class:"snag-dk-notice",children:[p("dock.hiddenrow")," ",r("button",{type:"button",class:"snag-dk-link",onClick:()=>c(y),children:p("dock.hiddenrow.show")})]}),u&&r("p",{class:"snag-dk-notice",children:[p("dock.cluster",{n:u.length})," ",r("button",{type:"button",class:"snag-dk-link",onClick:()=>g?.(),children:p("dock.cluster.clear")})]}),e.every(f=>f.anchorState==="orphaned")&&r("p",{class:"snag-dk-notice",children:p("dock.empty.orphans")}),r("div",{class:"snag-dk-scroll",ref:C,children:n.map(f=>r("section",{class:"snag-dk-group",ref:f.here?j:null,children:[f.route!==""&&r("h3",{class:"snag-dk-grouphd",children:[r("span",{class:"snag-dk-route",children:f.route}),r("span",{class:"snag-dk-dim",children:O(f.snags.length)})]}),r("ul",{class:"snag-dk-list",children:f.snags.map(A=>r(at,{snag:A,n:w.get(A.id),here:f.here,unread:!!m&&se(A,m),onOpen:o,onHover:s},A.id))})]},f.route))})]}),r("div",{class:"snag-dk-foot",children:r("div",{class:"snag-dk-menus snag-dk-menus-up",onKeyDown:R,children:[E&&r("div",{class:"snag-dk-menubg","aria-hidden":"true",onClick:()=>D(!1)}),r("span",{class:"snag-dk-menuwrap",children:[r("button",{type:"button",class:"snag-dk-link","aria-expanded":E,"aria-haspopup":"menu",onClick:()=>D(!E),children:p("export.button")}),E&&r("div",{class:"snag-dk-menu snag-dk-menu-up",role:"menu",children:["md","json"].map(f=>r("button",{type:"button",role:"menuitem",onClick:()=>{D(!1),a(f)},children:p(f==="md"?"export.md":"export.json")}))})]})]})})]})}const we=new Map;function lt(e){const n=[];try{for(const[t,o]of new URL(e).searchParams)Vn(t)||n.push(o&&o!=="[redacted]"?`${t}=${o}`:t)}catch{return null}return n.length?`?${n.join("&")}`:null}function dt({att:e,load:n}){const t=I(null),[o,s]=z(!1),[a,i]=z(null);return H(()=>{let u=!1;return n(e).then(async g=>{if(!g||u)return;const l=await createImageBitmap(g);u?l.close():i(l)}).catch(()=>{}),()=>{u=!0}},[e.id,e.url]),H(()=>{const u=t.current;if(!u||!a)return;const g=142,l=g/a.width;u.width=g,u.height=Math.min(96,Math.round(a.height*l)),u.getContext("2d").drawImage(a,0,0,a.width,Math.round(u.height/l),0,0,u.width,u.height)},[a]),a?r(N,{children:[r("button",{type:"button",class:"snag-dk-shot",onClick:()=>s(!0),"aria-label":p("shot.open"),children:r("canvas",{ref:t})}),o&&r(ct,{bmp:a,onClose:()=>s(!1)})]}):null}function ct({bmp:e,onClose:n}){const t=I(null);return H(()=>{const o=t.current;o&&(o.width=e.width,o.height=e.height,o.getContext("2d").drawImage(e,0,0))},[e]),r("div",{class:"snag-dk-lightbox",role:"dialog","aria-modal":"true","aria-label":p("shot.aria"),tabIndex:-1,ref:o=>o?.focus(),onKeyDown:o=>{o.key==="Escape"&&(o.stopPropagation(),n())},onClick:n,children:[r("canvas",{ref:t}),r("button",{type:"button",class:"snag-dk-link snag-dk-lightclose",onClick:n,children:p("shot.close")})]})}function ut({snag:e,loadShot:n}){const t=e.context;if(!t)return null;const o=e.attachments?.find(u=>u.kind==="screenshot"),s=t.derived,a=t.viewport,i=a?Math.round(a.dpr*100)/100:1;return r("div",{class:"snag-dk-cap",children:[o&&n&&r(dt,{att:o,load:n}),r("p",{class:"snag-dk-caplabel",children:p("capture.label")}),t.page?.route!==void 0&&r("p",{children:p("capture.page",{route:t.page.route})}),s&&a&&r(N,{children:[r("p",{children:s.os?p("capture.agent",{browser:s.browser,os:s.os}):p("capture.agent.noos",{browser:s.browser})}),r("p",{children:i===1?p("capture.device.at1x",{device:s.device,w:a.w,h:a.h}):p("capture.device",{device:s.device,w:a.w,h:a.h,dpr:i})})]}),t.capture?.reasons?.map(u=>r("p",{class:"snag-dk-capwhy",children:u},u)),t.capture?.blindSpots?.map(u=>r("p",{class:"snag-dk-capwhy",children:u},u)),(()=>{const u=lt(t.url);return u?r("p",{class:"snag-dk-capwhy",children:[p("detail.filedat",{query:u})," ",r("a",{class:"snag-dk-openq",href:t.url,target:"_blank",rel:"noreferrer",children:p("detail.openquery")})]}):null})()]})}function ln(e){const n=e.context?.url??e.route;return`${n}${n.includes("?")?"&":"?"}${$n("t")}=${e.key}`}function pt({snag:e}){const[n,t]=z(!1),o=ln(e);return navigator.clipboard?r("button",{type:"button",class:"snag-dk-link",onClick:()=>void navigator.clipboard.writeText(o).then(()=>{t(!0),setTimeout(()=>t(!1),1500)},()=>{}),children:p(n?"permalink.copied":"permalink.copy")}):null}function gt({snag:e}){return navigator.clipboard?null:r("p",{class:"snag-dk-permaline",children:[r("span",{class:"snag-dk-permalabel",children:p("permalink.copy")})," ",r("span",{class:"snag-dk-permaurl",children:ln(e)})]})}function ht({snags:e,round:n,fallbackCursor:t,openId:o,onOpen:s,onStatus:a,onReply:i,onEdit:u,onDeleteComment:g,onDeleteThread:l,onShowAnyway:_,onAnnounce:y,loadShot:c}){const h=e.findIndex(f=>f.id===o),$=h>=0,b=$?h:Math.min(t,e.length),m=$?e[h]:n.find(f=>f.id===o),w=o?we.get(o)??"":"",[v,P]=z(w),[k,C]=z(w.length>0),E=I(null);H(()=>{k&&E.current?.focus()},[k]);const D=f=>{P(f),o&&(f?we.set(o,f):we.delete(o))};if(!m)return null;const R=m.comments[0],j=n.filter(f=>f.route===m.route).findIndex(f=>f.id===m.id)+1;return r("div",{class:"snag-dk-detail",children:[r("div",{class:"snag-dk-detailhd",children:[r("button",{type:"button",class:"snag-dk-link",onClick:()=>s(null),"aria-label":p("dock.back.aria"),children:[r("span",{"aria-hidden":"true",children:"\u2190"})," ",p("dock.back")]}),r("span",{class:"snag-dk-dim",children:p("dock.position",{n:$?O(b+1):"\u2013",total:O(e.length)})}),r("span",{class:"snag-dk-nav",children:[r("button",{type:"button",class:"snag-dk-link",disabled:b<=0,"aria-label":p("dock.prev"),onClick:()=>s(e[b-1].id),children:"\u2191"}),r("button",{type:"button",class:"snag-dk-link",disabled:$?b>=e.length-1:b>=e.length,"aria-label":p("dock.next"),onClick:()=>s(e[$?b+1:b].id),children:"\u2193"})]})]}),r("div",{class:"snag-dk-card",children:[r("div",{class:"snag-dk-meta",children:[r("span",{class:"snag-dk-num",style:{background:me(m.status),color:en(m.status)},children:j}),r("strong",{children:R?.author.name??p("author.unknown")}),r("span",{class:"snag-dk-dim",children:m.key}),r(pt,{snag:m})]}),r("div",{class:"snag-dk-cardbody",children:on(R?.body??"")}),r(gt,{snag:m}),R&&r(an,{body:R.body,onEdit:f=>u(R.id,f),deleteLabel:p("comment.delete"),onDelete:()=>l(m.id)})]}),r("label",{class:"snag-dk-field",children:[r("span",{class:"snag-dk-dim",children:p("field.status")}),r("select",{class:"snag-dk-select",style:{borderColor:me(m.status)},value:m.status,onChange:f=>{const A=f.target.value;a(m.id,A),y?.(p("announce.status",{key:m.key,status:ke(A)}))},children:ve.map(f=>r("option",{value:f,children:ke(f)},f))})]}),r(ut,{snag:m,...c?{loadShot:c}:{}}),m.anchorReasons?.includes("hidden")&&r("p",{class:"snag-dk-moved-note",children:[p("detail.hidden")," ",r("button",{type:"button",class:"snag-dk-link",onClick:()=>_?.(m),children:p("detail.hidden.show")})]}),m.anchorState!=="anchored"&&r("p",{class:"snag-dk-moved-note",children:[p(`detail.${m.anchorState}`,{label:m.anchor.label}),m.anchorReasons?.includes("budget-exceeded")&&` ${p("detail.unavailable")}`]}),m.anchorState!=="anchored"&&r(nt,{anchor:m.anchor}),m.comments.length>1&&r("ul",{class:"snag-dk-replies-list",children:m.comments.slice(1).map(f=>r("li",{children:[r("strong",{children:f.author.name}),on(f.body??""),r(an,{body:f.body,onEdit:A=>u(f.id,A),deleteLabel:p("reply.delete"),onDelete:()=>g(f.id)})]},f.id))}),k?r("div",{class:"snag-dk-replybox",children:[r("textarea",{ref:E,class:"snag-text",rows:2,enterkeyhint:"enter","aria-label":p("reply.aria"),placeholder:p("reply.placeholder"),value:v,onInput:f=>D(f.target.value),onKeyDown:f=>{f.key==="Enter"&&(f.metaKey||f.ctrlKey)&&(f.preventDefault(),v.trim()&&(i(m.id,v.trim()),D(""),C(!1))),f.key==="Escape"&&(f.stopPropagation(),f.target.blur())}}),r("div",{class:"snag-actions",children:[r("button",{type:"button",class:"snag-cancel",onClick:()=>{D(""),C(!1)},children:p("action.cancel")}),r("button",{type:"button",class:"snag-send",disabled:!v.trim(),onClick:()=>{i(m.id,v.trim()),D(""),C(!1)},children:p("reply.send")})]})]}):r("button",{type:"button",class:"snag-dk-addreply",onClick:()=>C(!0),children:p("reply.add")})]})}function ft(e){const n=e.openId?e.snags.find(b=>b.id===e.openId):null,t=I(null),o=e.clusterFilter?e.snags.filter(b=>e.clusterFilter.includes(b.id)):e.snags,s=Qn(o.filter(b=>Yn(b,e.filter,e.seenAt)),e.filter,e.route,e.seenAt),a=Jn(s,e.filter.sort),i=e.filter.sort==="page"?rt(a,e.route):[{route:"",here:!1,snags:a}],u=i.flatMap(b=>b.snags),g=I(0),l=u.findIndex(b=>b.id===e.openId);l>=0&&(g.current=l);const _=I(null),[y,c]=z(null);e.openId?(_.current={id:e.openId,absent:l===-1},y&&c(null)):_.current?.absent&&y!==_.current.id&&(c(_.current.id),_.current=null),H(()=>{t.current?.focus()},[e.openId]),H(()=>{if(!(window.matchMedia?.("(pointer: coarse)").matches??!1))return;const b=t.current;return b?Ln(b):void 0},[]);const h=I({snag:n,onStatus:e.onStatus});h.current={snag:n,onStatus:e.onStatus},H(()=>{const b=m=>{const{snag:w,onStatus:v}=h.current;if(!w||m.metaKey||m.ctrlKey||m.altKey||m.composedPath().some(C=>{const E=C;if(!E?.tagName)return!1;const D=E.tagName.toLowerCase();return D==="textarea"||D==="select"?!0:D==="input"?!/^(button|submit|checkbox|radio)$/i.test(E.type):E.isContentEditable?!0:/^(textbox|searchbox|combobox)$/.test(E.getAttribute?.("role")??"")}))return;const k=Number(m.key);if(k>=1&&k<=ve.length){m.preventDefault(),v(w.id,ve[k-1]);return}(m.key==="r"||m.key==="R")&&(m.preventDefault(),v(w.id,w.status==="resolved"?"open":"resolved"))};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[]);const $=window.matchMedia?.("(pointer: coarse)").matches??!1;return r("aside",{ref:t,class:"snag-dk",role:"complementary","aria-label":p("dock.aria"),tabIndex:-1,onKeyDown:b=>{b.key==="Escape"&&(b.stopPropagation(),e.openId?e.onOpen(null):e.onClose())},children:[$&&r("div",{class:"snag-dk-scrim","aria-hidden":"true",onClick:e.onClose}),$&&r("div",{class:"snag-dk-grab","aria-hidden":"true",onPointerDown:b=>{const m=b.clientY,w=b.currentTarget;try{w.setPointerCapture(b.pointerId)}catch{}w.onpointermove=v=>{v.clientY-m>56&&(w.onpointermove=null,e.onClose())},w.onpointerup=()=>w.onpointermove=null},children:r("span",{})}),r("header",{class:"snag-dk-hd",children:[r("strong",{children:p(n?"dock.title.detail":"dock.title.list")}),r("button",{type:"button",class:"snag-dk-link",onClick:e.onClose,"aria-label":p("dock.close"),children:"\u2715"})]}),n?r(ht,{...e,snags:u,round:e.snags,fallbackCursor:g.current},n.id):r(it,{...e,groups:i,hiddenNote:y,onHiddenShow:b=>{c(null),e.onOpen(b)}})]})}const dn=360,_t=` .snag-dk{position:fixed;inset-block:0;inset-inline-end:0;width:${dn}px;max-width:100vw;z-index:${Rn.dock};background:${d.bg};color:${d.fg};display:flex;flex-direction:column;font:400 13px/1.45 ${d.font};box-shadow:${d.shadow};border-inline-start:1px solid ${d.border};pointer-events:auto;overscroll-behavior:contain}.snag-dk-filters{padding:8px 12px 6px;border-block-end:1px solid ${d.border};display:grid;gap:6px}.snag-dk-search{width:100%;box-sizing:border-box;font-size:12px;padding:5px 8px}.snag-dk-chiphead{display:flex;justify-content:space-between;align-items:center;padding-inline-end:8px}.snag-dk-chips{display:grid;grid-template-columns:1fr 1fr;gap:4px}.snag-dk-chip{font:500 11px/1.2 ${d.font};color:${d.fg};padding:5px 8px;border-radius:6px;border:1px solid ${d.border};background:none;cursor:pointer;text-align:start;display:flex;justify-content:space-between;align-items:center;gap:4px}.snag-dk-chip[aria-pressed="true"]{font-weight:600}.snag-dk-chip-stray{color:${d.muted};cursor:default}.snag-dk-menus{display:flex;gap:10px;position:relative}.snag-dk-menuwrap{position:relative}.snag-dk-menugroup{display:flex;flex-direction:column;gap:1px;padding-bottom:6px;margin-bottom:6px;border-bottom:1px solid ${d.border}}.snag-dk-menugroup-last{padding-bottom:0;margin-bottom:0;border-bottom:0}.snag-dk-menutitle{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:${d.muted};padding:2px 8px 4px}.snag-dk-menubg{position:absolute;inset:-200px -20px -2000px;background:transparent;z-index:2}.snag-dk-menu{position:absolute;inset-block-start:100%;inset-inline-start:0;z-index:3;min-width:150px;background:${d.bg};border:1px solid ${d.border};border-radius:6px;box-shadow:${d.shadow};display:grid;padding:4px}.snag-dk-menu button{font:400 12px/1.3 ${d.font};color:${d.fg};background:none;border:0;text-align:start;padding:5px 8px;border-radius:4px;cursor:pointer;display:flex;gap:4px}.snag-dk-menu button:hover{background:color-mix(in srgb,${d.fg} 8%,transparent)}.snag-dk-menus-up{position:relative}.snag-dk-menu-up{inset-block-start:auto;inset-block-end:100%;margin-block-end:4px}.snag-dk-menu-form{padding:8px;gap:6px;min-width:224px}.snag-dk-menu-form label:not(.snag-dk-pageonly){display:grid;gap:2px;font:600 10px/1.4 ${d.font};letter-spacing:.05em;text-transform:uppercase;color:${d.muted}}.snag-dk-menu-form select{font:400 12px/1.3 ${d.font};color:${d.fg};background:${d.bg};border:1px solid ${d.border};border-radius:4px;padding:4px}.snag-dk-pageonly{display:flex;align-items:center;gap:6px;font-size:12px;color:${d.fg};cursor:pointer}.snag-dk-permaline{margin:6px 0 0;font-size:11px;color:${d.muted};overflow-wrap:anywhere}.snag-dk-permalabel{font-weight:600}.snag-dk-permaurl{user-select:all}.snag-dk:focus{outline:none}@media (pointer:coarse){.snag-dk{inset-block-start:auto;inset-inline-start:0;width:auto;height:82vh;border-radius:14px 14px 0 0;box-sizing:border-box;padding-bottom:max(var(${x.tbH},68px),var(${x.kb},0px));padding-inline:env(safe-area-inset-left) env(safe-area-inset-right)}.snag-dk-scrim{position:fixed;inset:0;background:#0005;touch-action:none;z-index:-1}.snag-dk-grab{display:flex;justify-content:center;padding:10px 0 4px;touch-action:none}.snag-dk-grab span{width:36px;height:4px;border-radius:2px;background:${d.border}}.snag-dk-item{min-height:56px}.snag-dk-link{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}.snag-dk-select{min-height:44px}.snag-dk-chip{min-height:44px}.snag-dk-search{min-height:44px}}@media (pointer:fine){.snag-dk-scrim,.snag-dk-grab{display:none}}.snag-dk-hd{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid ${d.border};flex:0 0 auto}.snag-dk-scroll{overflow-y:auto;flex:1 1 auto}.snag-dk-list{list-style:none;margin:0;padding:0}.snag-dk-grouphd{position:sticky;top:0;z-index:1;margin:0;display:flex;align-items:center;gap:8px;padding:7px 14px;font:600 11px/1.45 ${d.font};letter-spacing:.02em;background:${d.sunken};border-bottom:1px solid ${d.border}}.snag-dk-route{color:${d.fg};overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;direction:ltr;unicode-bidi:isolate}.snag-dk-grouphd .snag-dk-dim{margin-inline-start:auto;font-weight:400;flex:0 0 auto}.snag-dk-goto{flex:0 0 auto;color:${d.muted};font-size:13px;line-height:1}.snag-dk-dev{flex:0 0 auto;color:${d.muted};display:flex;align-items:center}.snag-dk-item:hover .snag-dk-goto,.snag-dk-item:focus-visible .snag-dk-goto{color:${d.accent}}.snag-dk-item{display:flex;gap:10px;align-items:flex-start;width:100%;text-align:start;background:transparent;border:0;border-bottom:1px solid ${d.border};color:inherit;font:inherit;padding:11px 14px;cursor:pointer;transition:background ${d.motion}}.snag-dk-item:hover{background:${d.hover}}.snag-dk-item:focus-visible{outline:2px solid ${d.focus};outline-offset:-2px}.snag-dk-dot{flex:0 0 7px;width:7px;height:7px;border-radius:50%;margin-block-start:8px;background:transparent}.snag-dk-dot--on{background:${d.accent}}.snag-dk-newpill{display:block;width:100%;box-sizing:border-box;text-align:start;background:${d.sunken};border:0;border-block-end:1px solid ${d.border};color:${d.accent};font:600 12px/1.45 ${d.font};padding:8px 14px;cursor:pointer;flex:0 0 auto}.snag-dk-newpill:hover{background:${d.hover}}.snag-dk-newpill:focus-visible{outline:2px solid ${d.focus};outline-offset:-2px}.snag-dk-num{flex:0 0 22px;height:22px;border-radius:50% 50% 50% 2px;font-weight:600;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box}.snag-dk-num--orphaned{border:2px solid currentColor;box-shadow:inset 0 0 0 2px currentColor}.snag-dk-num--approximate{border:2px dashed currentColor}.snag-dk-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}.snag-dk-body,.snag-dk-sub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.snag-dk-sub{font-size:11px}.snag-dk-dim{color:${d.muted}}.snag-dk-moved{color:${d.anchorOrphan};font-weight:600}.snag-dk-replies{background:${d.surface};border-radius:999px;padding:1px 7px;font-size:11px;flex:0 0 auto}.snag-dk-empty{padding:28px 16px;text-align:center;flex:1 1 auto}.snag-dk-empty p{margin:0 0 4px}.snag-dk-notice{margin:0;padding:11px 14px;font-size:12px;color:${d.muted};border-bottom:1px solid ${d.border};flex:0 0 auto}.snag-dk-foot{display:flex;gap:6px;padding:10px 14px;border-top:1px solid ${d.border};flex:0 0 auto}.snag-dk-link{background:transparent;border:0;color:${d.accent};font:inherit;cursor:pointer;padding:4px 6px;border-radius:calc(${d.radius} - 2px);transition:background ${d.motion}}.snag-dk-link:hover:not(:disabled){background:${d.hover}}.snag-dk-link:disabled{color:${d.disabled};cursor:not-allowed}.snag-dk-link:focus-visible{outline:2px solid ${d.focus};outline-offset:1px}.snag-dk-detail{padding:12px 14px;overflow-y:auto;flex:1 1 auto;display:flex;flex-direction:column;gap:12px}.snag-dk-detailhd{display:flex;align-items:center;justify-content:space-between;gap:8px}.snag-dk-nav{display:flex;gap:2px}.snag-dk-card{background:${d.surface};border-radius:${d.radius};padding:11px}.snag-dk-meta{display:flex;justify-content:space-between;gap:8px;font-size:12px;margin-bottom:6px}.snag-md{overflow-wrap:anywhere}.snag-md>*{margin:0}.snag-md>*+*{margin-block-start:6px}.snag-md p{white-space:pre-wrap}.snag-md ul,.snag-md ol{padding-inline-start:20px}.snag-md li+li{margin-block-start:2px}.snag-md code{background:${d.sunken};border-radius:3px;padding:1px 4px;font-size:.92em;font-family:ui-monospace,monospace}.snag-md pre{background:${d.sunken};border-radius:${d.radius};padding:8px 10px;overflow-x:auto}.snag-md pre code{background:none;padding:0;font-size:.92em}.snag-md a{color:${d.accent}}.snag-dk-field{display:flex;flex-direction:column;gap:4px;font-size:12px}.snag-dk-select{background:${d.surface};color:inherit;border:2px solid;border-radius:${d.radius};padding:7px 9px;font:inherit;min-height:34px}.snag-dk-done{color:${d.muted};text-decoration:line-through}.snag-dk-meta .snag-dk-num{margin-inline-end:2px}.snag-dk-cap{background:${d.sunken};border-radius:${d.radius};padding:9px 11px;display:flex;flex-direction:column;gap:1px;font-size:12px;overflow-wrap:anywhere}.snag-dk-cap p{margin:0}.snag-dk-shot{padding:0;border:1px solid ${d.border};border-radius:calc(${d.radius} - 2px);background:none;cursor:zoom-in;overflow:hidden;line-height:0;align-self:flex-start;margin-block-end:6px}.snag-dk-shot canvas{display:block;max-width:100%}.snag-dk-lightbox{position:fixed;inset:0;z-index:1;background:#000c;display:flex;align-items:center;justify-content:center;padding:24px;cursor:zoom-out}.snag-dk-lightbox canvas{max-width:100%;max-height:100%;object-fit:contain;box-shadow:${d.shadow};background:${d.bg}}.snag-dk-lightclose{position:absolute;inset-block-start:12px;inset-inline-end:16px;color:#fff}.snag-dk-caplabel{font-weight:600;font-size:11px;letter-spacing:.02em;margin-bottom:3px!important}.snag-dk-capwhy{color:${d.muted};font-size:11px;margin-top:5px!important}.snag-dk-moved-note{margin:0;padding:8px 10px;font-size:12px;background:${d.sunken};border-inline-start:3px solid ${d.anchorOrphan};border-radius:${d.radius}}.snag-dk-anchor{font-size:12px;border:1px solid ${d.border};border-radius:${d.radius};padding:6px 10px;background:${d.sunken}}.snag-dk-anchor summary{cursor:pointer;color:${d.muted};font-weight:600;list-style:revert}.snag-dk-anchor dl{margin:8px 0 2px;display:grid;gap:6px}.snag-dk-anchor dt{color:${d.muted};font-size:11px;letter-spacing:.03em;text-transform:uppercase}.snag-dk-anchor dd{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere;user-select:text}.snag-dk-replies-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.snag-dk-replies-list li{background:${d.sunken};border-radius:${d.radius};padding:9px;overflow-wrap:anywhere}.snag-dk-acts{display:flex;gap:2px;margin-top:6px}.snag-dk-act{background:transparent;border:0;color:${d.muted};font:inherit;font-size:11px;cursor:pointer;padding:3px 6px;border-radius:calc(${d.radius} - 3px);transition:background ${d.motion},color ${d.motion}}.snag-dk-more{font-size:14px;line-height:1;letter-spacing:1px}.snag-dk-act:hover{background:${d.hover};color:inherit}.snag-dk-act:focus-visible{outline:2px solid ${d.focus};outline-offset:1px}.snag-dk-act--danger:hover{color:${d.anchorOrphan}}.snag-dk-menu .snag-dk-act--danger{color:${d.fg}}.snag-dk-menu .snag-dk-act--danger:hover{color:${d.anchorOrphan}}.snag-dk-armed{color:${d.anchorOrphan};font-weight:600}.snag-dk-clear{margin-inline-start:auto}.snag-dk-menu .snag-dk-clear{margin-inline-start:0}.snag-dk-editbox{display:flex;flex-direction:column;gap:8px;margin-top:8px}.snag-dk-addreply{background:transparent;border:1px dashed ${d.border};color:${d.muted};border-radius:${d.radius};padding:9px;font:inherit;cursor:pointer;text-align:start;transition:border-color ${d.motion},color ${d.motion}}.snag-dk-addreply:hover{border-color:${d.accent};color:inherit}.snag-dk-replybox{display:flex;flex-direction:column;gap:8px}`;function mt(e,n,t){const o=e.ownerDocument??document;tn(e,"form",zn),tn(e,"dock",_t);const s=o.createElement("div");(t??e).appendChild(s);const a=o.defaultView?.matchMedia?.("(pointer: coarse)").matches??!1,i=g=>{const l=e.host;g&&!a?l.style.setProperty(x.dockW,`${dn}px`):l.style.removeProperty(x.dockW)};i(!0);const u=g=>{Ie(r(ft,{...g}),s)};return u(n),{update:u,close(){i(!1),Ie(null,s),s.remove()}}}const cn=24;function un(e,n){const t=e.innerHeight,o=n.querySelector(".snag-dk");if(!o)return{top:0,bottom:t};const s=o.getBoundingClientRect();return s.height>=t-1?{top:0,bottom:t}:{top:0,bottom:Math.max(0,s.top)}}function kt(e,n,t){const o=t.anchor.rect;if(!o)return;const s=t.anchor.offset??{fy:.5},a=o.y+o.h*s.fy,i=un(e,n),u=a-e.scrollY;if(u>=i.top+cn&&u<=i.bottom-cn)return;const g=e.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;e.scrollTo({top:Math.max(0,a-(i.top+i.bottom)/2),behavior:g?"auto":"smooth"})}export{mt as openDock,kt as scrollToSnag,un as visibleStrip};