@pixelmatters/markup 1.34.3 → 1.34.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,9 +37,9 @@ CDN drop-in, no build step. Paste this just before `</body>`:
37
37
  ```html
38
38
  <script type="module">
39
39
  // Pin the exact version; esm.sh resolves it from npm
40
- import { init } from 'https://esm.sh/@pixelmatters/markup@1.34.3'
40
+ import { init } from 'https://esm.sh/@pixelmatters/markup@1.34.4'
41
41
  // or
42
- // import { init } from 'https://esm.run/@pixelmatters/markup@1.34.3'
42
+ // import { init } from 'https://esm.run/@pixelmatters/markup@1.34.4'
43
43
 
44
44
  init({
45
45
  apiUrl: 'https://your-deployment.convex.site',
@@ -50,14 +50,14 @@ CDN drop-in, no build step. Paste this just before `</body>`:
50
50
  </script>
51
51
  ```
52
52
 
53
- > **Why pin the version?** CDN URLs without a version (`@pixelmatters/markup`) resolve to whatever's `latest` on npm, so a future major release will break your page with no warning. Always pin (`@pixelmatters/markup@1.34.3`).
53
+ > **Why pin the version?** CDN URLs without a version (`@pixelmatters/markup`) resolve to whatever's `latest` on npm, so a future major release will break your page with no warning. Always pin (`@pixelmatters/markup@1.34.4`).
54
54
 
55
55
  If your platform doesn't allow inline JS (some CMS / page-builder editors), use the auto-init form instead. Point a `<script src=…>` at the bundle and pass config via `data-*` attributes:
56
56
 
57
57
  ```html
58
58
  <script
59
59
  type="module"
60
- src="https://esm.sh/@pixelmatters/markup@1.34.3"
60
+ src="https://esm.sh/@pixelmatters/markup@1.34.4"
61
61
  data-markup-widget="true"
62
62
  data-api-url="https://your-deployment.convex.site"
63
63
  data-api-key="markup_..."
@@ -525,7 +525,7 @@ For a `<script>` tag drop-in (no bundler), use the inline ESM form and **pin the
525
525
 
526
526
  ```html
527
527
  <script type="module">
528
- import { init } from 'https://esm.sh/@pixelmatters/markup@1.34.3'
528
+ import { init } from 'https://esm.sh/@pixelmatters/markup@1.34.4'
529
529
 
530
530
  init({
531
531
  apiUrl: '...',
@@ -541,7 +541,7 @@ If inline JS is disallowed (some CMS / page-builder editors), use the auto-init
541
541
  ```html
542
542
  <script
543
543
  type="module"
544
- src="https://esm.sh/@pixelmatters/markup@1.34.3"
544
+ src="https://esm.sh/@pixelmatters/markup@1.34.4"
545
545
  data-markup-widget="true"
546
546
  data-api-url="..."
547
547
  data-api-key="..."
package/dist/widget.js CHANGED
@@ -8,5 +8,5 @@ var e=1e4,t=null,n=[],r=null,i=`init`,a,o=s();function s(){return typeof crypto<
8
8
  `),`## Comments`,...r].join(`
9
9
 
10
10
  `)}function mu(e){return JSON.stringify(e).replace(hu,e=>`\\u${e.charCodeAt(0).toString(16).padStart(4,`0`)}`)}var hu=/[\u0080-\u009f\u2028\u2029]/g,gu=/\r\n|\r|\n|\u0085|\u2028|\u2029/;function _u(e){return e.split(gu).map(e=>`> ${e}`).join(`
11
- `)}function vu(e){return sc(e).map(e=>e.type===`mention`?`@${e.name}`:e.value).join(``)}function yu(e){return class extends B{shouldComponentUpdate(e){for(let t in e)if(e[t]!==this.props[t])return!0;for(let t in this.props)if(!(t in e))return!0;return!1}render(t){return ee(e,t)}}}var bu=[],xu=[`\u{1F44D}`,`\u2764\uFE0F`,`\u{1F389}`,`\u{1F62E}`,`\u{1F604}`,`\u2753`],Su=Nn({none:{"toggle-thread-menu":()=>({kind:`thread-menu`,confirmDelete:!1}),"toggle-comment-menu":(e,t)=>({kind:`comment-menu`,commentId:t.commentId,direction:t.direction,confirmDelete:!1}),"toggle-reaction-picker":(e,t)=>({kind:`reaction-picker`,commentId:t.commentId,direction:t.direction}),"start-edit":(e,t)=>({kind:`editing`,commentId:t.commentId})},"thread-menu":{"toggle-thread-menu":()=>({kind:`none`}),"arm-thread-delete":e=>({...e,confirmDelete:!0}),dismiss:()=>({kind:`none`})},"comment-menu":{"toggle-comment-menu":(e,t)=>e.commentId===t.commentId?{kind:`none`}:e,"arm-comment-delete":e=>({...e,confirmDelete:!0}),"start-edit":(e,t)=>({kind:`editing`,commentId:t.commentId}),dismiss:()=>({kind:`none`})},"reaction-picker":{"toggle-reaction-picker":(e,t)=>e.commentId===t.commentId?{kind:`none`}:e,dismiss:()=>({kind:`none`})},editing:{dismiss:()=>({kind:`none`})}}),Cu=80,wu=2400;function Tu(e){return Vt(()=>e.filter(e=>!e.deleted),[e])}function Eu(e){let[t]=K(()=>({current:e}));return t.current=e,t}function Du({thread:e,anchorMemory:t,layoutTick:n,focusCommentId:r,authorName:i,authorPromptMode:a,currentClientId:o,viewerUserId:s,isVerified:c,isIdentityResolving:l,isSigningIn:u,canDelete:d,canModerate:p,isPending:m,error:h,isHidden:g=!1,isLeaving:_=!1,members:v=bu,onAuthor:y,onSignIn:b,onSignOut:x,onClose:S,onReply:C,onEditComment:w,onDeleteComment:T,onToggleReaction:E,onResolve:D,onDelete:O}){let k=Y(null),A=Y(null),j=Y(null),[M,N]=K(!1),P=Y(null),[F,I]=In(Su,{kind:`none`}),L=Un(F.kind===`none`||F.kind===`editing`?null:F,120),R=L?.value??null,ee=L?.isLeaving??!1,te=R?.kind===`thread-menu`?R:null,z=R!=null&&R.kind!==`thread-menu`?R.commentId:null,B=Eu(e),{isFloating:ne,isDragging:re,onHeaderPointerDown:ie,freeze:ae}=jl(k,_,n,()=>t.get(B.current._id)??bs(B.current));Fc(k,!_);let oe=e.resolvedAt!=null,V=Tu(e.comments),se=V.length===1,ce=V.at(-1),le=e.screenshotUrl?e.thumbnailUrl??e.screenshotUrl:void 0;q(()=>{if(F.kind===`none`||F.kind===`editing`)return;function e(e){let t=P.current;t&&!e.composedPath().includes(t)&&I({type:`dismiss`})}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[F.kind,I]);let ue=F.kind===`editing`?F.commentId:null,de=ue!=null&&!V.some(e=>e._id===ue);q(()=>{de&&I({type:`dismiss`})},[de,I]);let fe=Y(null),pe=ce?.createdAt??0;q(()=>{fe.current??=pe},[pe]);let me=e=>!e.fromDashboard&&o!=null&&e.authorClientId===o,he=Y({onEditComment:w,onDeleteComment:T,onToggleReaction:E});he.current={onEditComment:w,onDeleteComment:T,onToggleReaction:E};let[ge]=K(()=>({listRef:A,overlayElRef:P,send:I,onOpenScreenshot:()=>{N(!0),j.current?.showModal()},onEdit:(e,t)=>he.current.onEditComment(e,t),onDelete:e=>he.current.onDeleteComment(e),onReact:(e,t)=>he.current.onToggleReaction(e,t)}));Xl(A,F.kind!==`none`&&F.kind!==`editing`);let[_e,ve]=K(!1),ye=X(()=>{let e=A.current;e&&ve(e.scrollHeight-e.scrollTop-e.clientHeight>Cu)},[]),be=X(e=>{let t=A.current;t?.scrollTo({top:t.scrollHeight,behavior:Vn()?`auto`:e})},[]),[xe,Se]=K(null);q(()=>{if(!xe)return;let e=setTimeout(()=>Se(null),wu);return()=>clearTimeout(e)},[xe]),J(()=>{let e=k.current;if(e&&typeof e.showPopover==`function`)try{_?(ae(),e.matches(`:popover-open`)&&e.hidePopover()):e.matches(`:popover-open`)||e.showPopover()}catch{}},[_,ae]);let Ce=ce?._id,we=ce!=null&&me(ce),Te=Y(!r),Ee=Y(!0);J(()=>{let e=A.current;e&&(Ee.current?(Ee.current=!1,Te.current&&(e.scrollTop=e.scrollHeight)):we?be(`smooth`):e.scrollHeight-e.scrollTop-e.clientHeight<Cu&&(e.scrollTop=e.scrollHeight),ye())},[Ce,we,be,ye]),J(()=>{let e=A.current;if(!e||!r)return;let t=e.querySelector(`[data-comment-id="${CSS.escape(r)}"]`);if(!t)e.scrollTop=e.scrollHeight;else{let n=t.getBoundingClientRect().top-e.getBoundingClientRect().top;e.scrollTop+=n-Math.max(0,(e.clientHeight-t.offsetHeight)/2),Se(r)}ye()},[r,ye]);let De=Y(_);return De.current=_,J(()=>{let e=k.current;if(!e)return;function t(e){e.newState===`closed`&&!De.current&&S()}return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[S]),$(`div`,{ref:k,id:_?void 0:`markup-thread-popover`,class:Q(`markup-popover`,ne&&`is-floating`,re&&`is-dragging`,g&&`is-hud-hidden`,_&&`is-leaving`),popover:`auto`,role:`dialog`,"aria-label":`Markup thread`,"aria-hidden":g||void 0,inert:_||void 0,children:[$(`header`,{class:`markup-popover-header`,onPointerDown:ie,children:[$(`span`,{class:`markup-popover-title`,title:e.url,children:se?`1 comment`:`${V.length} comments`}),$(`div`,{class:`markup-popover-header-actions`,children:[$(`div`,{class:`markup-thread-menu`,ref:e=>{F.kind===`thread-menu`&&(P.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,te!=null&&`is-open`),title:`More options`,onClick:()=>I({type:`toggle-thread-menu`}),children:$(yo,{size:16})}),te?$(`div`,{class:Q(`markup-thread-menu-list`,ee&&`is-leaving`),inert:ee||void 0,children:[$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{let e=lt(B.current.url,B.current._id);e&&(navigator.clipboard.writeText(e).catch(()=>{}),f(`thread_copied`,{format:`link`})),I({type:`dismiss`})},children:`Copy link`}),c?$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{navigator.clipboard.writeText(pu(B.current)).catch(()=>{}),f(`thread_copied`,{format:`agent`}),I({type:`dismiss`})},children:`Copy for agent`}):null,d?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,te.confirmDelete&&`is-danger`),disabled:m,onClick:()=>{F.kind===`thread-menu`&&(F.confirmDelete?(I({type:`dismiss`}),O()):I({type:`arm-thread-delete`}))},children:te.confirmDelete?`Confirm delete`:`Delete thread\u2026`}):null]}):null]}),p?$(`button`,{type:`button`,class:`markup-icon-btn`,title:`Mark as resolved`,disabled:m,onClick:D,children:$(bo,{size:16})}):null,$(`button`,{type:`button`,class:`markup-icon-btn`,title:Ya(`Close thread`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:S,children:$(ho,{size:16})})]})]}),$(`div`,{class:`markup-comments-frame`,children:[$(`ol`,{ref:A,class:`markup-comments markup-scroll-fade`,"aria-label":`Comments`,tabIndex:-1,onScroll:ye,children:V.map((e,t)=>{let n=F.kind===`editing`&&F.commentId===e._id,r=z===e._id;return $(Ou,{comment:e,isFirst:t===0,isOnly:se,isOwn:me(e),isResolved:oe,isNew:fe.current!=null&&e.createdAt>fe.current,isHighlighted:xe===e._id,isEditing:n,isPending:n&&m,menu:r&&R?.kind===`comment-menu`?R:null,picker:r&&R?.kind===`reaction-picker`?R:null,isOverlayLeaving:r&&ee,screenshotSrc:t===0?le:void 0,members:n?v:bu,viewerUserId:s,actions:ge},e._id)})}),_e?$(`button`,{type:`button`,class:`markup-jump-latest`,"aria-label":`Jump to latest comment`,title:`Jump to latest comment`,onClick:e=>{be(`smooth`),e.detail===0&&A.current?.focus({preventScroll:!0})},children:$(go,{size:16})}):null]}),e.screenshotUrl?$(`dialog`,{ref:j,class:`markup-lightbox`,onClick:()=>j.current?.close(),onClose:()=>N(!1),children:[$(`button`,{type:`button`,class:`markup-lightbox-close markup-icon-btn`,"aria-label":`Close screenshot`,title:Ya(`Close screenshot`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:e=>{e.stopPropagation(),j.current?.close()},children:$(ho,{size:16})}),M?$(`img`,{class:`markup-lightbox-img`,src:e.screenshotUrl,alt:`Screenshot`,onClick:e=>e.stopPropagation()}):null]}):null,a==null?$(`div`,{class:`markup-popover-body`,children:[$(`p`,{class:`markup-popover-byline`,children:[`replying as `,$(`span`,{class:`markup-popover-name`,children:i}),p?$(`span`,{class:`markup-comment-badge`,children:`team`}):null]}),$(Cl,{label:`Reply`,placeholder:`Write a reply\u2026`,submitLabel:`Reply`,initialFocus:!1,isPending:m,error:h,onSubmit:C,members:v,sendKey:`enter`})]}):$(Lc,{mode:a,isPending:m,isConnecting:l,isSigningIn:u,onSubmit:y,onCancel:S,onSignIn:b,onSignOut:x})]})}var Ou=yu(function({comment:e,isFirst:t,isOnly:n,isOwn:r,isResolved:i,isNew:a,isHighlighted:o,isEditing:s,isPending:c,menu:l,picker:u,isOverlayLeaving:d,screenshotSrc:f,members:p,viewerUserId:m,actions:h}){let{listRef:g,overlayElRef:_,send:v,onOpenScreenshot:y,onDelete:b,onReact:x}=h,S=r&&!i&&!e.deleted,C=S&&!t,w=(e,t)=>{let n=g.current?.getBoundingClientRect().bottom;return n!=null&&n-e.getBoundingClientRect().bottom<t?`up`:`down`};return $(`li`,{"data-comment-id":e._id,class:Q(`markup-comment`,a&&`is-new`,o&&`is-highlighted`),children:[$(Nu,{name:e.authorName,image:e.authorImage,tone:Fu(e.authorClientId??e.authorName)}),$(`div`,{class:`markup-comment-meta`,children:[$(`span`,{class:`markup-comment-author`,title:e.authorName.trim()||void 0,children:e.authorName.trim()||`Unnamed`}),e.authoredVia===`mcp`?$(`span`,{class:`markup-comment-badge is-agent`,role:`img`,"aria-label":`Written by an AI agent`,title:`Written by an AI agent`,children:$(Lo,{size:11})}):null,$(Yl,{class:`markup-comment-time`,at:e.createdAt}),e.editedAt==null?null:$(`time`,{class:`markup-comment-edited`,datetime:new Date(e.editedAt).toISOString(),onPointerEnter:Jl,children:`edited`}),$(`div`,{class:`markup-thread-actions`,children:[!i&&!s?$(Au,{comment:e,pickerOpen:u!=null,pickerLeaving:u!=null&&d,pickerDirection:u?.direction??`down`,pickerSide:n,pickerRef:e=>{u&&(_.current=e)},onPickerClick:t=>v({type:`toggle-reaction-picker`,commentId:e._id,direction:u||n?`down`:w(t.currentTarget,44)}),onPickerSelect:t=>{v({type:`dismiss`}),x(e._id,t)}}):null,S&&!s?$(`div`,{class:Q(`markup-thread-menu markup-comment-menu`,l&&`is-open`,l?.direction===`up`&&`is-up`,n&&`is-side`),ref:e=>{l&&(_.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,l&&`is-open`),title:`More options`,onClick:t=>v({type:`toggle-comment-menu`,commentId:e._id,direction:l||n?`down`:w(t.currentTarget,(C?2:1)*32+14)}),children:$(yo,{size:16})}),l?$(`div`,{class:Q(`markup-thread-menu-list`,d&&`is-leaving`),inert:d||void 0,children:[$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>v({type:`start-edit`,commentId:e._id}),children:`Edit`}),C?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,l.confirmDelete&&`is-danger`),onClick:()=>{if(!l.confirmDelete)return v({type:`arm-comment-delete`});v({type:`dismiss`}),b(e._id)},children:l.confirmDelete?`Confirm delete`:`Delete\u2026`}):null]}):null]}):null]})]}),s?$(ku,{comment:e,members:p,isPending:c,actions:h}):$(pl,{body:e.body,mentions:e.mentions,viewerUserId:m}),f?$(`button`,{type:`button`,class:`markup-comment-screenshot`,onClick:y,children:$(`img`,{src:f,alt:`Screenshot`})}):null,!s&&e.reactions.length>0?$(ju,{comment:e,isResolved:i,onToggle:t=>x(e._id,t)}):null]})});function ku({comment:e,members:t,isPending:n,actions:{send:r,onEdit:i}}){let[a,o]=K(e.body);return $(`form`,{class:`markup-comment-edit-form`,onSubmit:async t=>{t.preventDefault();let n=a.trim();if(!n||n===e.body){r({type:`dismiss`});return}try{await i(e._id,n),r({type:`dismiss`})}catch{}},children:[$(bl,{class:`markup-comment-edit-input`,label:`Edit comment`,value:a,onChange:o,onKeyDown:e=>{Rc(e,`mod-enter`,$a())&&(e.preventDefault(),e.target.closest(`form`)?.requestSubmit())},members:t,autoFocus:!0,disabled:n}),$(`div`,{class:`markup-comment-edit-actions`,children:[$(`button`,{type:`button`,class:`markup-btn markup-btn-ghost`,onClick:()=>r({type:`dismiss`}),disabled:n,children:`Cancel`}),$(`button`,{type:`submit`,class:`markup-btn markup-btn-primary`,disabled:n||a.trim().length===0,children:`Save`})]})]})}function Au({comment:e,pickerOpen:t,pickerLeaving:n,pickerDirection:r,pickerSide:i,pickerRef:a,onPickerClick:o,onPickerSelect:s}){return $(`div`,{class:Q(`markup-reaction-picker-wrap`,t&&`is-open`,t&&r===`up`&&`is-up`,i&&`is-side`),ref:a,children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,t&&`is-open`),title:`Add reaction`,"aria-label":`Add reaction`,onClick:o,children:$(Co,{size:16})}),t?$(`div`,{class:Q(`markup-reaction-picker`,n&&`is-leaving`),role:`menu`,inert:n||void 0,children:xu.map(t=>$(`button`,{type:`button`,role:`menuitem`,class:Q(`markup-reaction-picker-item`,(e.reactions.find(e=>e.emoji===t)?.mine??!1)&&`is-mine`),onClick:()=>s(t),children:t},t))}):null]})}function ju({comment:e,isResolved:t,onToggle:n}){return $(`div`,{class:`markup-reactions`,children:e.reactions.map(e=>{let r=Mu(e.reactors,e.mine,e.count,e.emoji);return $(`button`,{type:`button`,class:Q(`markup-reaction-chip`,e.mine&&`is-mine`),disabled:t,onClick:()=>n(e.emoji),"aria-pressed":e.mine,"aria-label":r,title:r,children:[$(`span`,{class:`markup-reaction-emoji`,"aria-hidden":!0,children:e.emoji}),$(`span`,{class:`markup-reaction-count`,children:e.count.toLocaleString()})]},e.emoji)})})}function Mu(e,t,n,r){let i=e.slice(),a=i.length+ +!!t,o=Math.max(0,n-a);return o>0&&i.push(`${o} other${o===1?``:`s`}`),t&&i.push(`you`),i.length===0?`${n} reacted with ${r}`:`${i.length===1?i[0]:`${i.slice(0,-1).join(`, `)} and ${i[i.length-1]}`} reacted with ${r}`}function Nu({name:e,image:t,tone:n}){let[r,i]=K(null);return $(`span`,{class:`markup-comment-avatar`,"data-tone":n,"aria-hidden":!0,children:t!=null&&r!==t?$(`img`,{class:`markup-avatar-img`,src:t,alt:``,loading:`lazy`,decoding:`async`,referrerpolicy:`no-referrer`,onError:()=>i(t)}):$(`span`,{class:`markup-avatar-initials`,children:Pu(e)})})}function Pu(e){return Sc(e)||`??`}function Fu(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return Math.abs(t)%5+1}function Iu(e){e.stopPropagation()}function Lu({isActive:e,onToggle:t,onHide:n,position:r=`bottom-right`,unreadCount:i,showInbox:a=!1,onOpenInbox:o,onInboxIntent:s,inboxOpen:c=!1,pinsVisible:l=!0,onTogglePins:u,identityButton:d,overflowButton:f,isLeaving:p=!1}){let m=a?i?.value??0:0,h=Y(0);m>0&&(h.current=m);let g=Y(null);J(()=>{let e=g.current;return e?kc(e):void 0},[]);let _=r===`bottom-left`?`markup-toolbar-left`:r===`bottom-center`?`markup-toolbar-center`:`markup-toolbar-right`;function v(e){if(e.preventDefault(),e.stopPropagation(),(e.metaKey||e.ctrlKey)&&n){n();return}t()}return $(`div`,{ref:g,class:Q(`markup-toolbar`,_,p&&`is-leaving`),role:`toolbar`,"aria-label":`Markup feedback toolbar`,"aria-hidden":p,inert:p?``:void 0,onPointerDown:Iu,onMouseDown:Iu,onPointerUp:Iu,onMouseUp:Iu,children:[$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`comment`,"data-armed":e?`true`:void 0,title:e?Ya(`Cancel placing markup`,[`Esc`]):Ya(`Leave a markup`,[`C`]),"aria-keyshortcuts":e?`Escape`:`C`,"aria-pressed":e,onClick:v,children:$(e?ho:wo,{size:16})}),a?$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`inbox`,"data-on":c?`true`:void 0,title:m>0?`Inbox, ${m.toLocaleString()} unread`:`Inbox`,"aria-pressed":c,onPointerEnter:s,onFocus:s,onClick:e=>{e.preventDefault(),e.stopPropagation(),o?.()},children:[$(To,{size:16}),$(`span`,{class:`markup-tb-badge`,"data-unread":m>0?`true`:`false`,"aria-hidden":`true`,children:h.current>9?`9+`:h.current})]}):null,u?$(z,{children:[$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}),$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`pins`,"aria-label":l?`Hide pins`:`Show pins`,"aria-pressed":!l,title:l?`Hide pins`:`Show pins`,onClick:e=>{e.preventDefault(),e.stopPropagation(),u()},children:$(l?Eo:Do,{size:16})})]}):null,d||f?$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}):null,d,f,f?null:$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`overflow`,"aria-label":`More options`,disabled:!0,children:$(Oo,{size:16})})]})}var Ru=[],zu=[{key:`toolbar`}],Bu=[],Vu=e=>gc(e.threadSnapshot.peek(),e.route.peek()).threads;function Hu(e,t,n,r,i){let a=Y({routeParams:n,byUrl:new Map}),o=Vt(()=>{let r=a.current,i=r.routeParams===n?r.byUrl:null,o=new Map;return a.current={routeParams:n,byUrl:o},new Map(e.map(e=>{let r=i?.get(e.url)??o.get(e.url)??$e(e.url,n);return o.set(e.url,r),[e._id,Js(e,t,r)]}))},[e,t,n]);return{pinLabels:o,scopedThreads:Vt(()=>r?e.filter(e=>e._id===i||o.get(e._id)?.otherLocation===void 0):e,[e,r,i,o])}}function Uu({store:e,apiUrl:t,apiKey:n,position:r=`bottom-right`,screenshots:i,dashboardUrl:a,routeParams:o=Ru,isAnalyticsEnabled:s=!0}){let{api:c,sendIdentity:l,patchThreads:u}=e,p=e.route.value,[m,h]=K(()=>et(o)),{threads:g,isLoaded:_}=gc(e.threadSnapshot.value,p),v=e.identity.value;d(v.kind);let y=Vt(()=>nr(t,n),[t,n]),[b]=K(()=>new AbortController);q(()=>()=>b.abort(),[b]);let[x,S]=K(r),[C,w]=K(!0),[T,E]=K(!1),[D,O]=K(!0),k=e.showResolved.value,[A,j]=K(null),M=X(()=>j(null),[]);J(()=>{e.isInboxOpen.value=A===`inbox`},[e,A]);let[N,P]=In(co,{kind:`idle`}),[F,I]=K([]),L=Y(!1);q(()=>{N.kind===`idle`||L.current||(L.current=!0,c.listMembers().then(e=>I(e.members)).catch(()=>{L.current=!1}))},[c,N.kind]);let R=Rn(),ee=Rn(),te=Rn(),{run:B}=R,{run:ne}=ee,{run:re}=te,ie=te.isPending,[ae,oe]=In(to,{kind:`visible`}),V=ae.kind!==`visible`,se=Y(V);se.current=V;let ce=X(e=>{se.current||f(`hud_hidden`,{trigger:e}),oe({type:`hide-with-toast`})},[oe]),[le]=K(()=>un(0)),[ue]=K(()=>new Map);q(()=>()=>ue.clear(),[ue]);let de=Y(null),fe=Ue(v),pe=v.kind===`verified`,me=v.kind===`unresolved`||v.kind===`recovering`,he=He(v),ge=Be(v),_e=e.commentAccess.value,{accessRefusal:ve,isPending:ye,error:be,reactionError:xe,resetErrors:Se,handleSubmitNew:Ce,handleDelete:we,handleResolve:Te,handleReply:Ee,handleEditComment:De,handleDeleteComment:Oe,handleToggleReaction:ke}=fc({api:c,identity:v,mode:N,route:p,canComment:Gn(_e,v.kind),patchThreads:u,sendMode:P}),Ae=be??R.error??xe,H=Kn({access:_e,identityKind:v.kind,hasAuthorName:fe!=null,refusal:ve}),je=(N.kind===`composing-new`||N.kind===`thread`)&&H!=null&&H!==`not-a-member`;q(()=>{je&&y()},[je,y]),q(()=>e.onThreadsResubscribed(Se),[e,Se]);let Me=Y(!1);q(()=>{if(Me.current||!_)return;let t=rt();t!==null&&(Vu(e).some(e=>e._id===t)&&P({type:`open-thread`,threadId:t,commentId:it()??void 0}),st()),Me.current=!0},[e,_,P]),q(()=>ur(()=>{e.route.value=Qe(o),h(et(o))}),[e,o]),q(()=>{function e(e){e.key===`.`&&(e.metaKey||e.ctrlKey)&&(e.altKey||e.shiftKey||(e.preventDefault(),se.current||f(`hud_hidden`,{trigger:`shortcut`}),oe({type:`toggle`})))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[oe]),q(()=>{V&&j(null)},[V]),q(()=>{if(ae.kind!==`hidden-with-toast`)return;let e=window.setTimeout(()=>oe({type:`dismiss-toast`}),5e3);return()=>window.clearTimeout(e)},[ae.kind,oe]);let Ne=Y(!1),Pe=X(()=>{Ne.current&&(N.kind===`placing`||N.kind===`composing-new`)&&(Ne.current=!1,f(`comment_abandoned`,{stage:N.kind===`placing`?`placing`:`composing`}))},[N.kind]),Fe=X(e=>{Se(),Pe(),f(`comment_started`,{trigger:e}),Ne.current=!0,P({type:`start-placing`})},[Se,P,Pe]);q(()=>{function e(e){e.key===`c`&&(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||N.kind===`idle`&&(V||ao()||(e.preventDefault(),Fe(`shortcut`))))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[N.kind,V,Fe]);let Ie=X(()=>{Pe(),P({type:`cancel`}),Se()},[Se,P,Pe]),Le=Y(0),Re=X((e,t,n)=>{let r=t+window.scrollX,a=n+window.scrollY,o=++Le.current,s=i?.enabled!==!1&&D;if(f(`pin_placed`,{hasSelector:e.anchorSelector!=null,hasSourceAttribute:e.anchorSource!=null,isCapturing:s,prompt:H??`composer`}),P({type:`place`,coords:e,pageX:r,pageY:a,isCapturing:s,captureToken:o}),!s)return;let c=de.current!=null&&de.current.getRootNode()instanceof ShadowRoot?de.current.getRootNode().host:null,l={strictScrub:i?.strictScrub,redactSelector:i?.redactSelector};requestAnimationFrame(()=>setTimeout(()=>{ka(c,{x:t,y:n},l).then(e=>{P({type:`capture-done`,captureToken:o,result:e}),f(`screenshot_captured`,{ok:e!=null})})},0))},[i,D,H,P]),ze=X((e,t)=>{l({type:`author-set`,name:e,email:t})},[l]),Ve=R.isPending,We=X(async()=>{f(`sign_in_started`),await B(async()=>{try{let e=no(await yr({apiUrl:t,apiKey:n,cookieSupport:y(),signal:b.signal}));if(!e)throw Error(`Sign-in did not return a verified token`);l({type:`signed-in`,identity:e}),f(`sign_in_completed`,{identity:`verified`})}catch(e){throw f(`sign_in_failed`,{reason:gr(e)}),e}})},[t,n,y,b,B,l]),Ge=X(t=>{if(e.markRead(t),Vu(e).some(e=>e._id===t.threadId))Pe(),P({type:`open-thread`,threadId:t.threadId,commentId:t.commentId});else{let e=lt(t.threadUrl,t.threadId,t.commentId);e&&(window.location.href=e)}},[e,P,Pe]),[Ke,qe]=K(null);q(()=>{if(Ke===null)return;let e=window.setTimeout(()=>qe(null),5e3);return()=>window.clearTimeout(e)},[Ke]);let Je=X(async()=>await ne(async()=>(await c.forgetMe(),Pe(),P({type:`cancel`}),l({type:`forget-me`}),qe(`forgotten`),!0))===!0,[c,ne,l,P,Pe]),Ye=X(async()=>{await re(async()=>{await c.signOut(),Pe(),P({type:`cancel`}),l({type:`signed-out`}),qe(`signed-out`)})},[c,re,l,P,Pe]),Xe=X(()=>ce(`menu`),[ce]),Ze=X(e=>{e!==x&&f(`setting_changed`,{setting:`position`,value:e}),S(e)},[x]),$e=X(()=>{f(`setting_changed`,{setting:`auto_capture`,value:!D}),O(!D)},[D]),tt=X(()=>{f(`setting_changed`,{setting:`url_scope`,value:!T}),E(!T)},[T]),nt=X(()=>{f(`setting_changed`,{setting:`show_resolved`,value:!k}),e.showResolved.value=!k},[e,k]),at=N.kind===`thread`?g.find(e=>e._id===N.threadId)??null:null,ot=he!=null&&he===at?.authorClientId,ct=e.canModerate.value,ut=ot||ct,dt=N.kind===`thread`?N.threadId:null,{pinLabels:ft,scopedThreads:pt}=Hu(g,m,o,T,dt),mt=C&&N.kind!==`placing`?g.length-pt.length:0,ht=N.kind!==`placing`&&!V&&C,gt=Hn(!V||N.kind===`placing`||N.kind===`composing-new`?zu:Bu,e=>e.key,160),_t=[];ae.kind===`hidden-with-toast`&&_t.push({key:`hud-hidden`,body:$(z,{children:[`Markup hidden \u2014 press `,$(`kbd`,{class:`markup-kbd`,children:Ja().mod}),$(`kbd`,{class:`markup-kbd`,children:`.`}),` or refresh to bring it back.`]})}),Ke===`forgotten`&&_t.push({key:`forget-me`,body:`Forgotten on this site \u2014 your name and email were cleared.`}),Ke===`signed-out`&&_t.push({key:`signed-out`,body:`Signed out \u2014 commenting anonymously again.`});let vt=Hn(_t,e=>e.key,220),yt=Hn(N.kind===`thread`&&at?[at]:mc,e=>e._id,160),U=Un(N.kind===`composing-new`?N:null,160),bt=Un(A,140),xt=X((e,t)=>{Pe(),f(`thread_opened`,{commentCount:t}),P({type:`open-thread`,threadId:e})},[P,Pe]),St=N.kind===`thread`&&at==null;return q(()=>{St&&Ie()},[St,Ie]),$(`div`,{class:`markup-root`,ref:de,style:lo,children:[$(ac,{threads:g,scopedThreads:pt,pinLabels:ft,viewerDetail:m,routeParams:o,shouldShowPins:ht,activeThreadId:dt,composer:U?{pageX:U.value.pageX,pageY:U.value.pageY,isLeaving:U.isLeaving,isCapturing:U.value.isScreenshotCapturing}:null,isPopoverOpen:U!=null||yt.length>0,isPopoverTracked:U!=null||yt.length>0&&!V,layoutTick:le,anchorMemory:ue,onOpenThread:xt}),N.kind===`placing`?$(cu,{onPlace:Re,onCancel:Ie}):null,yt.map(({key:e,value:t,isLeaving:n})=>$(Du,{thread:t,anchorMemory:ue,layoutTick:le,focusCommentId:N.kind===`thread`&&N.threadId===t._id?N.commentId:void 0,isLeaving:n,authorName:fe,authorPromptMode:H,currentClientId:he??null,viewerUserId:ge,isVerified:pe,isIdentityResolving:me,isSigningIn:Ve,canDelete:ut,canModerate:ct,isPending:ye,error:Ae,isHidden:V,members:F,onAuthor:ze,onSignIn:We,onSignOut:Ye,onClose:Ie,onReply:Ee,onEditComment:De,onDeleteComment:Oe,onToggleReaction:ke,onDelete:we,onResolve:Te},e)),U?$(Il,{isLeaving:U.isLeaving,pageX:U.value.pageX,pageY:U.value.pageY,layoutTick:le,authorName:fe,authorPromptMode:H,canModerate:ct,isIdentityResolving:me,isSigningIn:Ve,isPending:ye,error:Ae,screenshot:U.value.screenshot,isScreenshotCapturing:U.value.isScreenshotCapturing,screenshotFailed:U.value.screenshotFailed,screenshotRedactedCount:U.value.screenshotRedactedCount,screenshotRedactedSelectors:U.value.screenshotRedactedSelectors,members:F,onAuthor:ze,onSignIn:We,onSignOut:Ye,onSubmit:Ce,onClose:Ie}):null,gt.map(n=>$(Lu,{isLeaving:n.isLeaving,isActive:N.kind===`placing`,onToggle:()=>N.kind===`placing`?Ie():Fe(`toolbar`),onHide:()=>ce(`toolbar`),position:x,showInbox:pe,unreadCount:e.unreadCount,inboxOpen:A===`inbox`,onOpenInbox:()=>{let t=A===`inbox`?null:`inbox`;j(t),t&&(f(`notifications_opened`,{unreadCount:e.unreadCount.peek()}),e.refreshNotifications())},onInboxIntent:e.prefetchNotifications,pinsVisible:C,onTogglePins:()=>{f(`setting_changed`,{setting:`pins`,value:!C}),w(!C)},identityButton:$(Mc,{identity:v,position:x,isSigningIn:Ve,isSigningOut:ie,dashboardUrl:a,commentAccess:_e,onSignIn:We,onSignInIntent:y,onSignOut:Ye,onForgetMe:Je}),overflowButton:$(au,{position:x,onSetPosition:Ze,autoCapture:D&&i?.enabled!==!1,autoCaptureLocked:i?.enabled===!1,onToggleAutoCapture:$e,isUrlScoped:T,hiddenByUrlScope:mt,onToggleUrlScope:tt,showResolved:k,onToggleShowResolved:nt,onHideForSession:Xe,isAnalyticsEnabled:s,identity:v,apiUrl:t,commentAccess:_e,isForgettingMe:ee.isPending,forgetMeError:ee.error,onForgetMe:Je,version:`1.34.3`,dashboardUrl:a})},n.key)),bt?.value===`inbox`&&pe?$(su,{kind:`inbox`,label:`Inbox`,position:x,ignoreToolbarKind:`inbox`,isLeaving:bt.isLeaving,onClose:M,children:$(Ql,{state:e.inbox.value,viewerUserId:ge,isMarkingAll:e.isMarkingAllRead.value,onItemClick:e=>{M(),Ge(e)},onMarkAllRead:e.markAllRead})}):null,vt.map(e=>$(vc,{position:x,isLeaving:e.isLeaving,children:e.value.body},e.key))]})}var Wu=Nn({idle:{fetch:()=>({kind:`loading`})},loading:{loaded:(e,t)=>({kind:`ready`,items:t.items}),failed:(e,t)=>({kind:`failed`,error:t.error}),reset:()=>({kind:`idle`})},failed:{fetch:()=>({kind:`loading`}),loaded:(e,t)=>({kind:`ready`,items:t.items}),reset:()=>({kind:`idle`})},ready:{loaded:(e,t)=>({kind:`ready`,items:t.items}),failed:(e,t)=>({...e,error:t.error}),patch:(e,t)=>({...e,items:t.update(e.items)}),reset:()=>({kind:`idle`})}}),Gu=Nn({idle:{issued:(e,t)=>({kind:`active`,token:t.token,expiresAt:t.expiresAt,mintedAs:t.mintedAs})},active:{issued:(e,t)=>({kind:`active`,token:t.token,expiresAt:t.expiresAt,mintedAs:t.mintedAs})}}),Ku=`anon`;function qu(e){return e.kind===`verified`?e.identity.clientId:Ku}function Ju(e){return e.kind===`verified`&&e.identity.tokenExpiresAt>Date.now()?e.identity.clientId:Ku}function Yu(e,t){return e.kind===`active`&&e.mintedAs===t}var Xu=18e5,Zu=6e4,Qu=6e4;function $u(e){let t=!1,n=null;async function r(){let i;try{i=await e.mint()}catch(e){if(t)return;e?.name!==`TypeError`&&H(e,{context:`subscription-token-refresh`}),n=setTimeout(r,Qu);return}if(t)return;let a=Math.max(Zu,i.expiresAt-Date.now()-Xu);n=setTimeout(r,a);try{e.onIssued(i)}catch(e){H(e,{context:`subscription-token-issued`})}}return r(),()=>{t=!0,n&&clearTimeout(n)}}var ed=`1.38.0`,td=100,nd=1e3,rd=3e3,id=16e3,ad=6,od=3e5,sd=6e4,cd=5,ld=20,ud=6e4,dd=0,fd=/^(SubscriptionsWorkerFullError|TooManyConcurrentRequests|CommitterFullError|AwsTooManyRequestsException|ExecuteFullError|SystemTimeoutError|ExpiredInQueue|VectorIndexTooLarge|SearchIndexTooLarge|TooManyWritesInTimePeriod)/,pd=`AAAAAAAAAAA=`,md=new Set([`$integer`,`$float`,`$bytes`]),hd=34,gd=36,_d=Object.prototype.hasOwnProperty,vd=class{#e;#t=Ad();#n=new Map;#r=0;#i=0;#a={querySet:0,identity:0,ts:pd};#o;#s=null;#c=null;#l=!1;#u=!1;#d=0;#f=`InitialConnect`;#p=0;#m=0;#h=0;#g=0;#_=0;#v=new Set;#y;#b;#x=null;#S=new Map;constructor(e){this.#e=`${e.replace(/^http/,`ws`)}/api/${ed}/sync`,window.addEventListener(`online`,this.#w),window.addEventListener(`pagehide`,this.#E),window.addEventListener(`pageshow`,this.#D),document.addEventListener(`securitypolicyviolation`,this.#C),document.addEventListener(`visibilitychange`,this.#T),this.#A()}onUpdate(e,t,n){let r=this.#r++,i={udfPath:e,args:t,onValue:n};return this.#n.set(r,i),this.#F(r,yd(r,i)),this.#k(),()=>{this.#v.delete(r),this.#n.delete(r)&&(this.#S.delete(r)||this.#F(r,{type:`Remove`,queryId:r}))}}close(){this.#u=!0,clearTimeout(this.#y),clearTimeout(this.#b),window.removeEventListener(`online`,this.#w),window.removeEventListener(`pagehide`,this.#E),window.removeEventListener(`pageshow`,this.#D),document.removeEventListener(`securitypolicyviolation`,this.#C),document.removeEventListener(`visibilitychange`,this.#T),this.#H()}#C=e=>{e.disposition!==`report`&&(e.blockedURI===this.#e||e.blockedURI===new URL(this.#e).origin)&&(H(Error(`Convex sync: blocked by ${e.effectiveDirective}`),{context:`sync-connect`}),this.close())};#w=()=>{this.#m=0,this.#y!==void 0&&(clearTimeout(this.#y),this.#A())};#T=()=>{document.visibilityState===`visible`&&this.#k()};#E=e=>{e.persisted&&(clearTimeout(this.#y),this.#y=void 0,clearTimeout(this.#b),this.#f??=`BackForwardCache`,this.#H(!0))};#D=e=>{!e.persisted||this.#s||(clearTimeout(this.#y),this.#p=0,this.#m=0,this.#A())};get#O(){return this.#m>=ad}#k(){this.#y!==void 0&&this.#O&&(clearTimeout(this.#y),this.#A())}#A(){if(this.#y=void 0,this.#u)return;let e;try{e=new WebSocket(this.#e)}catch(e){H(e,{context:`sync-connect`}),this.close();return}this.#m+=1;let t=new AbortController;this.#s=e,this.#c=t,this.#V();let n=(n,r)=>e.addEventListener(n,t=>{this.#s===e&&r(t)},{signal:t.signal});n(`open`,()=>{this.#l=!0,this.#m=0,this.#v=new Set(this.#n.keys()),this.#V(),this.#L({type:`Connect`,sessionId:this.#t,connectionCount:this.#d,lastCloseReason:this.#f,maxObservedTimestamp:this.#o,clientTs:Date.now()}),this.#a={querySet:0,identity:0,ts:pd},this.#i=1,this.#S.clear(),this.#L({type:`ModifyQuerySet`,baseVersion:0,newVersion:1,modifications:[...this.#n].map(([e,t])=>yd(e,t))}),this.#d+=1,this.#f=null}),n(`message`,e=>{this.#V();try{this.#j(e.data)}catch(e){this.#N(e)}}),n(`close`,e=>{this.#f??=e.reason||`closed with code ${e.code}`,this.#s=null,this.#l=!1,this.#x=null,this.#B(this.#z(fd.test(e.reason)?rd:nd))})}#j(e){let t=JSON.parse(e);if(t.type!==`Ping`){if(t.type===`TransitionChunk`){let e=this.#M(t);if(e===null)return;let n=JSON.parse(e);if(n.type!==`Transition`)throw Error(`Convex sync: chunks were not a Transition`);this.#P(n,e);return}this.#x=null,t.type===`Transition`&&this.#P(t,e),t.type===`FatalError`&&(H(Error(`Convex sync: ${t.error}`),{context:`sync-fatal`}),this.close())}}#M(e){let t=this.#x??={transitionId:e.transitionId,totalParts:e.totalParts,parts:[]};if(t.transitionId!==e.transitionId||t.totalParts!==e.totalParts||t.parts.length!==e.partNumber||e.partNumber>=e.totalParts)throw Error(`Convex sync: TransitionChunk out of sequence`);return t.parts.push(e.chunk),t.parts.length<t.totalParts?null:(this.#x=null,t.parts.join(``))}#N(e){let t=Date.now();if(t-this.#_>=ud&&(this.#h=0),this.#_=t,this.#h+=1,this.#g+=1,this.#h===1&&H(e,{context:`sync-message`}),this.#h>=cd||this.#g>=ld){H(Error(`Convex sync: stopped after ${this.#g} protocol errors`),{context:`sync-message`}),this.close();return}this.#f=`ClientError`,this.#H(),this.#B(Math.min(nd*2**(this.#h-1),id))}#P(e,t){let n=this.#a,r=e.startVersion;if(r.querySet!==n.querySet||r.identity!==n.identity||Sd(r.ts)!==Sd(n.ts))throw Error(`Convex sync: Transition does not start where the last one ended`);this.#a=e.endVersion,(this.#o===void 0||Sd(e.endVersion.ts)>Sd(this.#o))&&(this.#o=e.endVersion.ts);let i=Cd(t);for(let t of e.modifications){if(this.#u)return;this.#v.delete(t.queryId);let e=this.#n.get(t.queryId);if(e&&t.type!==`QueryRemoved`&&(t.journal!==void 0&&(e.journal=t.journal),t.type===`QueryUpdated`))try{let n=wd(t.value??null,e.value,i);e.value=n,e.onValue(n)}catch(e){H(e,{context:`sync-callback`})}}this.#v.size===0&&(this.#p=0)}#F(e,t){this.#l&&(this.#S.set(e,t),this.#S.size===1&&queueMicrotask(this.#I))}#I=()=>{let e=[...this.#S.values()];if(this.#S.clear(),!this.#l||e.length===0)return;let t=this.#i++;this.#L({type:`ModifyQuerySet`,baseVersion:t,newVersion:this.#i,modifications:e})};#L(e){try{this.#s?.send(JSON.stringify(e))}catch{this.#R(`FailedToSendMessage`)}}#R(e,t=!1){this.#u||(this.#f=e,this.#H(t),this.#B(this.#z(td)))}#z(e){let t=Math.min(e*2**this.#p,id);return this.#p+=1,t}#B(e){if(clearTimeout(this.#y),clearTimeout(this.#b),this.#u)return;let t=this.#O?od:e;this.#y=setTimeout(()=>this.#A(),t*(.5+Math.random()))}#V(){clearTimeout(this.#b),this.#b=setTimeout(()=>this.#R(`InactiveServer`,!0),sd)}#H(e=!1){let t=this.#s;this.#s=null,this.#l=!1,this.#x=null,t&&(this.#c?.abort(),t.readyState===dd&&!e?t.addEventListener(`open`,()=>t.close()):t.close())}};function yd(e,t){return{type:`Add`,queryId:e,udfPath:t.udfPath,args:[Object.fromEntries(Object.entries(t.args).sort(([e],[t])=>e<t?-1:1))],journal:t.journal}}function bd(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return new DataView(n.buffer)}function xd(e,t){let n=bd(e);if(n.byteLength!==8)throw Error(`Convex sync: malformed ${t}`);return n}function Sd(e){return xd(e,`timestamp`).getBigUint64(0,!0)}function Cd(e){for(let t=e.indexOf(`$`);t!==-1;t=e.indexOf(`$`,t+1))if(e.charCodeAt(t-1)===hd)return!0;return e.includes(`\\u0024`)}function wd(e,t,n=!0){if(typeof e!=`object`||!e||t===void 0&&!n)return e;if(Array.isArray(e)){let r=Array.isArray(t)?t:void 0,i=r?.length===e.length,a;for(let t=0;t<e.length;t+=1){let o=e[t],s=r?.[t],c=r&&Dd(o);r&&c!==void 0&&c!==Dd(s)&&(a??=Od(r),s=a.get(c),i=!1);let l=wd(o,s,n);l!==o&&(e[t]=l),i&&=Object.is(l,s)}return i?r:e}let r=e,i=Ed(t)?t:void 0,a=i!==void 0,o=0;for(let e in r){if(!_d.call(r,e))continue;if(n&&e.charCodeAt(0)===gd){if(o===0&&md.has(e)&&kd(r)===1)return Td(e,r[e]);throw Error(`Convex sync: field ${e} starts with $`)}o+=1;let t=r[e],s=i&&_d.call(i,e)?i[e]:void 0,c=wd(t,s,n);c!==t&&(r[e]=c),a&&=Object.is(c,s)}return i&&a&&kd(i)===o?i:r}function Td(e,t){if(typeof t!=`string`)throw Error(`Convex sync: malformed ${e}`);if(e===`$integer`)return xd(t,e).getBigInt64(0,!0);if(e===`$float`){let n=xd(t,e).getFloat64(0,!0);if(Number.isFinite(n)&&!Object.is(n,-0))throw Error(`Convex sync: malformed $float`);return n}return bd(t).buffer}function Ed(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof ArrayBuffer)}function Dd(e){if(!Ed(e)||!_d.call(e,`_id`))return;let t=e._id;return typeof t==`string`?t:void 0}function Od(e){let t=new Map;for(let n of e){let e=Dd(n);e!==void 0&&!t.has(e)&&t.set(e,n)}return t}function kd(e){let t=0;for(let n in e)_d.call(e,n)&&(t+=1);return t}function Ad(){return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}async function jd(e){try{let t={method:`POST`,headers:{"content-type":`application/json`,"x-markup-api-key":e.apiKey},signal:Qn(Zn,e.signal)};if(e.mode===`cookies`)t.credentials=`include`,t.body=`{}`;else{if(!e.refreshToken)return null;t.body=JSON.stringify({refreshToken:e.refreshToken})}let n=await fetch(`${e.apiUrl.replace(/\/+$/,``)}/widget/refresh`,t);if(!n.ok)return null;let r=await n.json();return r.mode===`cookies`?typeof r.accessTokenExpiresAt!=`number`||typeof r.refreshTokenExpiresAt!=`number`?null:{mode:`cookies`,accessTokenExpiresAt:r.accessTokenExpiresAt,refreshTokenExpiresAt:r.refreshTokenExpiresAt}:typeof r.accessToken!=`string`||typeof r.accessTokenExpiresAt!=`number`||typeof r.refreshToken!=`string`||typeof r.refreshTokenExpiresAt!=`number`?null:{mode:`localStorage`,accessToken:r.accessToken,accessTokenExpiresAt:r.accessTokenExpiresAt,refreshToken:r.refreshToken,refreshTokenExpiresAt:r.refreshTokenExpiresAt}}catch(e){let t=e?.name;return t!==`AbortError`&&t!==`TypeError`&&t!==`TimeoutError`&&H(e,{context:`refresh-token`}),null}}var Md=6e4,Nd=500,Pd=new WeakSet;function Fd(e){if((e.storage!==`localStorage`||e.refreshToken!=null)&&(e.storage===`cookies`||e.storage===`localStorage`))return e.refreshTokenExpiresAt}function Id(e){let t=Date.now();return e.tokenExpiresAt<=t&&!Pd.has(e)&&(Fd(e)??0)>t}function Ld(e,{apiUrl:t,apiKey:n,onRefreshed:r,onFailure:i}){if(e.kind!==`verified`)return;let a=e.identity,{storage:o,refreshToken:s}=a,c=Fd(a);if(c==null)return;let l=Date.now();if(c<=l){i();return}let u=Id(a)?0:Math.max(Nd,a.tokenExpiresAt-Md-l),d=new AbortController,f=window.setTimeout(async()=>{let e=await jd({apiUrl:t,apiKey:n,mode:o,refreshToken:s,signal:d.signal});if(d.signal.aborted)return;if(!e){i();return}let c=e.mode===`cookies`?{...a,tokenExpiresAt:e.accessTokenExpiresAt,refreshTokenExpiresAt:e.refreshTokenExpiresAt}:{...a,token:e.accessToken,tokenExpiresAt:e.accessTokenExpiresAt,refreshToken:e.refreshToken,refreshTokenExpiresAt:e.refreshTokenExpiresAt};Pd.add(c),r(c)},u);return()=>{window.clearTimeout(f),d.abort()}}var Rd=`widget/queries:subscribeThreadsForRoute`,zd=`widget/queries:subscribeProjectSettings`,Bd=`widget/queries:subscribeUnreadCountForProject`,Vd=3e4,Hd=300,Ud=2**31-1,Wd=5e3;function Gd(e){return bn(()=>{try{return e()}catch(e){H(e,{context:`live-store`})}})}function Kd({apiUrl:e,apiKey:t,initialIdentity:n,initialRoute:r,seed:i=null,createClient:a=e=>new vd(e)}){let o=e.replace(/\.convex\.site(\/.*)?$/,`.convex.cloud`);if(!/^https?:\/\//.test(o))throw Error(`Invalid apiUrl: ${e}`);let{state:s,send:c}=Fn(io,n.state),l=hn(()=>s.value.kind),u=hn(()=>He(s.value)),d=$n({apiUrl:e,apiKey:t,...Ve(()=>s.peek()),onUnauthorized:()=>{c({type:`unauthorized`})}}),f=un(r),p=un(!1),m=un(hc(r)),h=un(Wn),g=un(!1),_=un(0),{state:v,send:y}=Fn(Wu,{kind:`idle`}),b=un(!1),x=un(!1),S=0,{state:C,send:w}=Fn(Gu,{kind:`idle`}),T=hn(()=>{let e=C.value;return e.kind===`active`?e.token:null}),E=un(null),D=hn(()=>Yu(C.value,qu(s.value))),O=hn(()=>l.value===`verified`&&D.value&&g.value),k=un(0),A=hn(()=>(k.value,Ju(s.value))),j=hn(()=>{let e=s.value;return e.kind===`verified`&&Id(e.identity)?!1:Yu(C.value,A.value)}),M=new Set;function N(){let e=S;y({type:`fetch`}),d.listNotifications().then(t=>{S===e&&y({type:`loaded`,items:t.notifications})}).catch(t=>{P=null,S===e&&y({type:`failed`,error:t instanceof Error?t.message:`Failed to load.`})})}let P=null,F=()=>`${S}:${_.peek()}`,I=e=>P?.key===e&&Date.now()-P.at<Wd&&v.peek().kind!==`failed`;function L(e){S+=1,y({type:`patch`,update:e})}let R=un(null),ee=un(!1),te=!1,z=n.state.kind===`unresolved`?i?.takeAnonIdentity()??null:null;function B(e,t){return e?e.catch(e=>{if(te)throw e;return t()}):t()}let ne=[Gd(()=>{let e=s.value;if(e.kind!==`unresolved`&&e.kind!==`recovering`)return;let t=e.kind===`recovering`?e.preserved:n.preserved,r=!1,i=null,a=1e3;ee.value=!0;let o=()=>{ee.value=!1},l=setTimeout(o,Hd);function u(){let e=z;z=null,B(e,()=>d.mintAnonIdentity()).then(({clientId:e,token:n})=>{if(r)return;let i={clientId:e,anonToken:n,name:t.name,email:t.email};c({type:`mint-success`,identity:i})}).catch(()=>{r||(o(),i=setTimeout(u,Math.min(a,Vd)),a=Math.min(a*2,Vd))})}return u(),()=>{r=!0,i&&clearTimeout(i),clearTimeout(l),o()}}),Gd(()=>Ld(s.value,{apiUrl:e,apiKey:t,onRefreshed:e=>c({type:`signed-in`,identity:e}),onFailure:()=>c({type:`unauthorized`})})),Gd(()=>{k.value;let e=s.value;if(e.kind!==`verified`)return;let t=e.identity.tokenExpiresAt-Date.now();if(t<=0)return;let n=setTimeout(()=>{k.value+=1},Math.min(t,Ud));return()=>clearTimeout(n)}),Gd(()=>{let e=A.value,t=i?.takeSubscriptionToken(e)??null;return $u({mint:()=>{let e=t;return t=null,B(e,()=>d.getSubscriptionToken())},onIssued:t=>w({type:`issued`,token:t.token,expiresAt:t.expiresAt,mintedAs:e})})}),Gd(()=>{T.value===null||R.peek()||(R.value=a(o))}),Gd(()=>{let e=C.value;if(e.kind!==`active`)return;let t=E.peek(),n=t!=null&&(t.mintedAs===`anon`||t.mintedAs===e.mintedAs)?t.expiresAt-Xu-Date.now():0,r=()=>{E.value=e};if(n<=0){r();return}let i=setTimeout(r,Math.min(n,Ud));return()=>clearTimeout(i)}),Gd(()=>{let e=f.value,t=E.value?.token,n=u.value,r=p.value;m.peek().route!==e&&(m.value=hc(e));let i=R.value;if(t&&i&&!(n===void 0&&ee.value)){for(let e of M)e();return i.onUpdate(Rd,{subscriptionToken:t,route:e,viewerClientId:n,includeResolved:r},t=>{t!==void 0&&t!==m.peek().threads&&(m.value={route:e,threads:t,isLoaded:!0})})}}),Gd(()=>{let e=T.value;g.value=!1;let t=R.value;if(e&&t&&j.value)return t.onUpdate(zd,{subscriptionToken:e},e=>{let t=e;h.value=t?.commentAccess===`members`?`members`:Wn,g.value=t?.canModerate===!0})}),Gd(()=>{if(l.value!==`verified`||!D.value){_.value=0;return}let e=T.value,t=R.value;if(e&&t)return t.onUpdate(Bd,{subscriptionToken:e},e=>{e!==void 0&&(_.value=e.count,x.peek()&&N())})}),Gd(()=>{l.value,u.value,S+=1,y({type:`reset`})})];return{api:d,identity:s,sendIdentity:c,route:f,showResolved:p,threadSnapshot:m,commentAccess:h,canModerate:O,unreadCount:_,inbox:v,isMarkingAllRead:b,isInboxOpen:x,refreshNotifications(){let e=I(F());P=null,e||N()},prefetchNotifications(){let e=F();I(e)||(P={key:e,at:Date.now()},N())},patchThreads(e,t){m.value=_c(m.peek(),e,t)},markRead(e){e.readAt??(_.value=Math.max(0,_.peek()-1),L(t=>t.map(t=>t._id===e._id?{...t,readAt:Date.now()}:t)),d.markNotificationRead(e._id).catch(()=>{}))},markAllRead(){b.value=!0,_.value=0,L(e=>e.map(e=>e.readAt==null?{...e,readAt:Date.now()}:e)),d.markAllNotificationsRead().catch(()=>{}).finally(()=>{b.value=!1})},onThreadsResubscribed(e){return M.add(e),()=>M.delete(e)},dispose(){te=!0,i?.abort();for(let e of ne.reverse())e();M.clear(),R.peek()?.close()}}}function qd(e){function t(t){t.target===e&&(t.stopImmediatePropagation(),o(!0))}function n(t){if(t.target===e){t.stopImmediatePropagation();return}t.relatedTarget===e&&(t.stopImmediatePropagation(),t.target?.dispatchEvent(new FocusEvent(`focusout`,{bubbles:!0,composed:!0,relatedTarget:null})))}function r(t){t.target===e?t.stopImmediatePropagation():document.activeElement!==e&&!i(t)&&o(!1)}function i(t){if(t.type!==`wheel`)return!1;let{clientX:n,clientY:r}=t;return document.elementFromPoint(n,r)===e}function a(e){e.stopPropagation()}function o(e){let t=e?`addEventListener`:`removeEventListener`;for(let e of Jd)window[t](e,r,Yd)}let s=()=>o(!0),c={capture:!0};window.addEventListener(`focusin`,t,c),window.addEventListener(`focusout`,n,c),e.addEventListener(`pointerdown`,a),e.addEventListener(`pointerover`,s,Yd);let l=Zd(e);return()=>{o(!1),window.removeEventListener(`focusin`,t,c),window.removeEventListener(`focusout`,n,c),e.removeEventListener(`pointerdown`,a),e.removeEventListener(`pointerover`,s,Yd),l()}}var Jd=[`wheel`,`touchmove`],Yd={capture:!0,passive:!0},Xd=[`aria-hidden`,`inert`];function Zd(e){let t=()=>{for(let t of Xd)e.hasAttribute(t)&&e.removeAttribute(t)},n=new MutationObserver(t);return n.observe(e,{attributes:!0,attributeFilter:Xd}),t(),()=>n.disconnect()}function Qd(e,t,n=null){e.style.position=`fixed`,e.style.inset=`0`,e.style.zIndex=`2147483647`,e.style.pointerEvents=`none`,St(e,t.theme??`auto`);let r=Dt(),i=qd(e),a=e.attachShadow({mode:`open`});mt(a);let o=document.createElement(`div`);o.className=`markup-shadow-root`,a.appendChild(o),Ae({apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.34.3`}),c(t.analytics===!1?null:{apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.34.3`}),f(`widget_loaded`,{entry:u()});let{theme:s,analytics:l,...d}=t,p=null,m=setTimeout(()=>{try{let e=Kd({apiUrl:t.apiUrl,apiKey:t.apiKey,initialIdentity:Le(),initialRoute:Qe(t.routeParams??[]),seed:n});p=e,xe($(Se,{onError:e=>H(e,{context:`render`}),children:()=>$(Uu,{...d,isAnalyticsEnabled:t.analytics!==!1,store:e})}),o)}catch(e){H(e,{context:`mount`})}},0);return()=>{clearTimeout(m),r(),i(),Ae(null),c(null),xe(null,o),p?.dispose()}}var $d=3e4;function ef({apiUrl:e,apiKey:t}){if(!/^https?:\/\//.test(e))return null;let{state:n}=Le(),r=new AbortController,i={signal:r.signal},a=$n({apiUrl:e,apiKey:t,...Ve(()=>n)}),o=Ju(n),s=tf(a.getSubscriptionToken(i)),c=n.kind===`unresolved`?tf(a.mintAnonIdentity(i)):null,l=setTimeout(u,$d);function u(){clearTimeout(l),s=null,c=null,r.abort()}return{takeSubscriptionToken(e){let t=e===o?s:null;return s=null,t},takeAnonIdentity(){let e=c;return c=null,e},abort:u}}function tf(e){return e.catch(()=>{}),e}var nf=2e3,rf=null,af=null,of=null,sf=null,cf=null,lf=null,uf=!1;function df(e){if(!e.apiUrl||!e.apiKey)return console.warn(`[markup] init() requires both apiUrl and apiKey, so the widget was not mounted`),()=>{};e.fab!=null&&!uf&&(uf=!0,console.warn("[markup] the `fab` option is ignored and will be removed in the next major. The toolbar replaced the floating action button. Remove it from your config."));let t=_(e);if(lf&&t===cf&&(of!==null||af?.isConnected===!0))return lf;mf(),cf=t;let n=ff();lf=n;let r=ef(e);sf=r;let i=()=>{if(of=null,!document.body)return;let t=document.createElement(`div`);t.id=`markup-widget`,document.body.appendChild(t),af=t,rf=Qd(t,e,r)},a=()=>{of=pf(i)};return document.readyState===`loading`||!document.body?(of=()=>document.removeEventListener(`DOMContentLoaded`,a),document.addEventListener(`DOMContentLoaded`,a,{once:!0})):a(),n}function ff(){let e=()=>{lf===e&&mf()};return e}function pf(e){if(typeof requestIdleCallback==`function`){let t=requestIdleCallback(e,{timeout:nf});return()=>cancelIdleCallback(t)}let t=setTimeout(e,0);return()=>clearTimeout(t)}function mf(){of&&=(of(),null),rf&&=(rf(),null),sf?.abort(),sf=null,af?.parentNode&&af.parentNode.removeChild(af),af=null,cf=null,lf=null}if(typeof document<`u`){let e=document.currentScript??document.querySelector(`script[data-markup-widget="true"]`),t=e?.dataset.apiUrl,n=e?.dataset.apiKey;if(t&&n){let r=e?.dataset.position,i=e?.dataset.theme,a=e?.dataset.fab,o=e?.dataset.dashboardUrl,s=e?.dataset.analytics!==`false`,c=e?.dataset.routeParams?.split(`,`).map(e=>e.trim()).filter(e=>e!==``),u=()=>{l(`script`),df({apiUrl:t,apiKey:n,position:r,theme:i,fab:a,dashboardUrl:o,analytics:s,routeParams:c})};document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,u,{once:!0}):u()}}export{mf as destroy,df as init,l as n,_ as t};
11
+ `)}function vu(e){return sc(e).map(e=>e.type===`mention`?`@${e.name}`:e.value).join(``)}function yu(e){return class extends B{shouldComponentUpdate(e){for(let t in e)if(e[t]!==this.props[t])return!0;for(let t in this.props)if(!(t in e))return!0;return!1}render(t){return ee(e,t)}}}var bu=[],xu=[`\u{1F44D}`,`\u2764\uFE0F`,`\u{1F389}`,`\u{1F62E}`,`\u{1F604}`,`\u2753`],Su=Nn({none:{"toggle-thread-menu":()=>({kind:`thread-menu`,confirmDelete:!1}),"toggle-comment-menu":(e,t)=>({kind:`comment-menu`,commentId:t.commentId,direction:t.direction,confirmDelete:!1}),"toggle-reaction-picker":(e,t)=>({kind:`reaction-picker`,commentId:t.commentId,direction:t.direction}),"start-edit":(e,t)=>({kind:`editing`,commentId:t.commentId})},"thread-menu":{"toggle-thread-menu":()=>({kind:`none`}),"arm-thread-delete":e=>({...e,confirmDelete:!0}),dismiss:()=>({kind:`none`})},"comment-menu":{"toggle-comment-menu":(e,t)=>e.commentId===t.commentId?{kind:`none`}:e,"arm-comment-delete":e=>({...e,confirmDelete:!0}),"start-edit":(e,t)=>({kind:`editing`,commentId:t.commentId}),dismiss:()=>({kind:`none`})},"reaction-picker":{"toggle-reaction-picker":(e,t)=>e.commentId===t.commentId?{kind:`none`}:e,dismiss:()=>({kind:`none`})},editing:{dismiss:()=>({kind:`none`})}}),Cu=80,wu=2400;function Tu(e){return Vt(()=>e.filter(e=>!e.deleted),[e])}function Eu(e){let[t]=K(()=>({current:e}));return t.current=e,t}function Du({thread:e,anchorMemory:t,layoutTick:n,focusCommentId:r,authorName:i,authorPromptMode:a,currentClientId:o,viewerUserId:s,isVerified:c,isIdentityResolving:l,isSigningIn:u,canDelete:d,canModerate:p,isPending:m,error:h,isHidden:g=!1,isLeaving:_=!1,members:v=bu,onAuthor:y,onSignIn:b,onSignOut:x,onClose:S,onReply:C,onEditComment:w,onDeleteComment:T,onToggleReaction:E,onResolve:D,onDelete:O}){let k=Y(null),A=Y(null),j=Y(null),[M,N]=K(!1),P=Y(null),[F,I]=In(Su,{kind:`none`}),L=Un(F.kind===`none`||F.kind===`editing`?null:F,120),R=L?.value??null,ee=L?.isLeaving??!1,te=R?.kind===`thread-menu`?R:null,z=R!=null&&R.kind!==`thread-menu`?R.commentId:null,B=Eu(e),{isFloating:ne,isDragging:re,onHeaderPointerDown:ie,freeze:ae}=jl(k,_,n,()=>t.get(B.current._id)??bs(B.current));Fc(k,!_);let oe=e.resolvedAt!=null,V=Tu(e.comments),se=V.length===1,ce=V.at(-1),le=e.screenshotUrl?e.thumbnailUrl??e.screenshotUrl:void 0;q(()=>{if(F.kind===`none`||F.kind===`editing`)return;function e(e){let t=P.current;t&&!e.composedPath().includes(t)&&I({type:`dismiss`})}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[F.kind,I]);let ue=F.kind===`editing`?F.commentId:null,de=ue!=null&&!V.some(e=>e._id===ue);q(()=>{de&&I({type:`dismiss`})},[de,I]);let fe=Y(null),pe=ce?.createdAt??0;q(()=>{fe.current??=pe},[pe]);let me=e=>!e.fromDashboard&&o!=null&&e.authorClientId===o,he=Y({onEditComment:w,onDeleteComment:T,onToggleReaction:E});he.current={onEditComment:w,onDeleteComment:T,onToggleReaction:E};let[ge]=K(()=>({listRef:A,overlayElRef:P,send:I,onOpenScreenshot:()=>{N(!0),j.current?.showModal()},onEdit:(e,t)=>he.current.onEditComment(e,t),onDelete:e=>he.current.onDeleteComment(e),onReact:(e,t)=>he.current.onToggleReaction(e,t)}));Xl(A,F.kind!==`none`&&F.kind!==`editing`);let[_e,ve]=K(!1),ye=X(()=>{let e=A.current;e&&ve(e.scrollHeight-e.scrollTop-e.clientHeight>Cu)},[]),be=X(e=>{let t=A.current;t?.scrollTo({top:t.scrollHeight,behavior:Vn()?`auto`:e})},[]),[xe,Se]=K(null);q(()=>{if(!xe)return;let e=setTimeout(()=>Se(null),wu);return()=>clearTimeout(e)},[xe]),J(()=>{let e=k.current;if(e&&typeof e.showPopover==`function`)try{_?(ae(),e.matches(`:popover-open`)&&e.hidePopover()):e.matches(`:popover-open`)||e.showPopover()}catch{}},[_,ae]);let Ce=ce?._id,we=ce!=null&&me(ce),Te=Y(!r),Ee=Y(!0);J(()=>{let e=A.current;e&&(Ee.current?(Ee.current=!1,Te.current&&(e.scrollTop=e.scrollHeight)):we?be(`smooth`):e.scrollHeight-e.scrollTop-e.clientHeight<Cu&&(e.scrollTop=e.scrollHeight),ye())},[Ce,we,be,ye]),J(()=>{let e=A.current;if(!e||!r)return;let t=e.querySelector(`[data-comment-id="${CSS.escape(r)}"]`);if(!t)e.scrollTop=e.scrollHeight;else{let n=t.getBoundingClientRect().top-e.getBoundingClientRect().top;e.scrollTop+=n-Math.max(0,(e.clientHeight-t.offsetHeight)/2),Se(r)}ye()},[r,ye]);let De=Y(_);return De.current=_,J(()=>{let e=k.current;if(!e)return;function t(e){e.newState===`closed`&&!De.current&&S()}return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[S]),$(`div`,{ref:k,id:_?void 0:`markup-thread-popover`,class:Q(`markup-popover`,ne&&`is-floating`,re&&`is-dragging`,g&&`is-hud-hidden`,_&&`is-leaving`),popover:`auto`,role:`dialog`,"aria-label":`Markup thread`,"aria-hidden":g||void 0,inert:_||void 0,children:[$(`header`,{class:`markup-popover-header`,onPointerDown:ie,children:[$(`span`,{class:`markup-popover-title`,title:e.url,children:se?`1 comment`:`${V.length} comments`}),$(`div`,{class:`markup-popover-header-actions`,children:[$(`div`,{class:`markup-thread-menu`,ref:e=>{F.kind===`thread-menu`&&(P.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,te!=null&&`is-open`),title:`More options`,onClick:()=>I({type:`toggle-thread-menu`}),children:$(yo,{size:16})}),te?$(`div`,{class:Q(`markup-thread-menu-list`,ee&&`is-leaving`),inert:ee||void 0,children:[$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{let e=lt(B.current.url,B.current._id);e&&(navigator.clipboard.writeText(e).catch(()=>{}),f(`thread_copied`,{format:`link`})),I({type:`dismiss`})},children:`Copy link`}),c?$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{navigator.clipboard.writeText(pu(B.current)).catch(()=>{}),f(`thread_copied`,{format:`agent`}),I({type:`dismiss`})},children:`Copy for agent`}):null,d?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,te.confirmDelete&&`is-danger`),disabled:m,onClick:()=>{F.kind===`thread-menu`&&(F.confirmDelete?(I({type:`dismiss`}),O()):I({type:`arm-thread-delete`}))},children:te.confirmDelete?`Confirm delete`:`Delete thread\u2026`}):null]}):null]}),p?$(`button`,{type:`button`,class:`markup-icon-btn`,title:`Mark as resolved`,disabled:m,onClick:D,children:$(bo,{size:16})}):null,$(`button`,{type:`button`,class:`markup-icon-btn`,title:Ya(`Close thread`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:S,children:$(ho,{size:16})})]})]}),$(`div`,{class:`markup-comments-frame`,children:[$(`ol`,{ref:A,class:`markup-comments markup-scroll-fade`,"aria-label":`Comments`,tabIndex:-1,onScroll:ye,children:V.map((e,t)=>{let n=F.kind===`editing`&&F.commentId===e._id,r=z===e._id;return $(Ou,{comment:e,isFirst:t===0,isOnly:se,isOwn:me(e),isResolved:oe,isNew:fe.current!=null&&e.createdAt>fe.current,isHighlighted:xe===e._id,isEditing:n,isPending:n&&m,menu:r&&R?.kind===`comment-menu`?R:null,picker:r&&R?.kind===`reaction-picker`?R:null,isOverlayLeaving:r&&ee,screenshotSrc:t===0?le:void 0,members:n?v:bu,viewerUserId:s,actions:ge},e._id)})}),_e?$(`button`,{type:`button`,class:`markup-jump-latest`,"aria-label":`Jump to latest comment`,title:`Jump to latest comment`,onClick:e=>{be(`smooth`),e.detail===0&&A.current?.focus({preventScroll:!0})},children:$(go,{size:16})}):null]}),e.screenshotUrl?$(`dialog`,{ref:j,class:`markup-lightbox`,onClick:()=>j.current?.close(),onClose:()=>N(!1),children:[$(`button`,{type:`button`,class:`markup-lightbox-close markup-icon-btn`,"aria-label":`Close screenshot`,title:Ya(`Close screenshot`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:e=>{e.stopPropagation(),j.current?.close()},children:$(ho,{size:16})}),M?$(`img`,{class:`markup-lightbox-img`,src:e.screenshotUrl,alt:`Screenshot`,onClick:e=>e.stopPropagation()}):null]}):null,a==null?$(`div`,{class:`markup-popover-body`,children:[$(`p`,{class:`markup-popover-byline`,children:[`replying as `,$(`span`,{class:`markup-popover-name`,children:i}),p?$(`span`,{class:`markup-comment-badge`,children:`team`}):null]}),$(Cl,{label:`Reply`,placeholder:`Write a reply\u2026`,submitLabel:`Reply`,initialFocus:!1,isPending:m,error:h,onSubmit:C,members:v,sendKey:`enter`})]}):$(Lc,{mode:a,isPending:m,isConnecting:l,isSigningIn:u,onSubmit:y,onCancel:S,onSignIn:b,onSignOut:x})]})}var Ou=yu(function({comment:e,isFirst:t,isOnly:n,isOwn:r,isResolved:i,isNew:a,isHighlighted:o,isEditing:s,isPending:c,menu:l,picker:u,isOverlayLeaving:d,screenshotSrc:f,members:p,viewerUserId:m,actions:h}){let{listRef:g,overlayElRef:_,send:v,onOpenScreenshot:y,onDelete:b,onReact:x}=h,S=r&&!i&&!e.deleted,C=S&&!t,w=(e,t)=>{let n=g.current?.getBoundingClientRect().bottom;return n!=null&&n-e.getBoundingClientRect().bottom<t?`up`:`down`};return $(`li`,{"data-comment-id":e._id,class:Q(`markup-comment`,a&&`is-new`,o&&`is-highlighted`),children:[$(Nu,{name:e.authorName,image:e.authorImage,tone:Fu(e.authorClientId??e.authorName)}),$(`div`,{class:`markup-comment-meta`,children:[$(`span`,{class:`markup-comment-author`,title:e.authorName.trim()||void 0,children:e.authorName.trim()||`Unnamed`}),e.authoredVia===`mcp`?$(`span`,{class:`markup-comment-badge is-agent`,role:`img`,"aria-label":`Written by an AI agent`,title:`Written by an AI agent`,children:$(Lo,{size:11})}):null,$(Yl,{class:`markup-comment-time`,at:e.createdAt}),e.editedAt==null?null:$(`time`,{class:`markup-comment-edited`,datetime:new Date(e.editedAt).toISOString(),onPointerEnter:Jl,children:`edited`}),$(`div`,{class:`markup-thread-actions`,children:[!i&&!s?$(Au,{comment:e,pickerOpen:u!=null,pickerLeaving:u!=null&&d,pickerDirection:u?.direction??`down`,pickerSide:n,pickerRef:e=>{u&&(_.current=e)},onPickerClick:t=>v({type:`toggle-reaction-picker`,commentId:e._id,direction:u||n?`down`:w(t.currentTarget,44)}),onPickerSelect:t=>{v({type:`dismiss`}),x(e._id,t)}}):null,S&&!s?$(`div`,{class:Q(`markup-thread-menu markup-comment-menu`,l&&`is-open`,l?.direction===`up`&&`is-up`,n&&`is-side`),ref:e=>{l&&(_.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,l&&`is-open`),title:`More options`,onClick:t=>v({type:`toggle-comment-menu`,commentId:e._id,direction:l||n?`down`:w(t.currentTarget,(C?2:1)*32+14)}),children:$(yo,{size:16})}),l?$(`div`,{class:Q(`markup-thread-menu-list`,d&&`is-leaving`),inert:d||void 0,children:[$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>v({type:`start-edit`,commentId:e._id}),children:`Edit`}),C?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,l.confirmDelete&&`is-danger`),onClick:()=>{if(!l.confirmDelete)return v({type:`arm-comment-delete`});v({type:`dismiss`}),b(e._id)},children:l.confirmDelete?`Confirm delete`:`Delete\u2026`}):null]}):null]}):null]})]}),s?$(ku,{comment:e,members:p,isPending:c,actions:h}):$(pl,{body:e.body,mentions:e.mentions,viewerUserId:m}),f?$(`button`,{type:`button`,class:`markup-comment-screenshot`,onClick:y,children:$(`img`,{src:f,alt:`Screenshot`})}):null,!s&&e.reactions.length>0?$(ju,{comment:e,isResolved:i,onToggle:t=>x(e._id,t)}):null]})});function ku({comment:e,members:t,isPending:n,actions:{send:r,onEdit:i}}){let[a,o]=K(e.body);return $(`form`,{class:`markup-comment-edit-form`,onSubmit:async t=>{t.preventDefault();let n=a.trim();if(!n||n===e.body){r({type:`dismiss`});return}try{await i(e._id,n),r({type:`dismiss`})}catch{}},children:[$(bl,{class:`markup-comment-edit-input`,label:`Edit comment`,value:a,onChange:o,onKeyDown:e=>{Rc(e,`mod-enter`,$a())&&(e.preventDefault(),e.target.closest(`form`)?.requestSubmit())},members:t,autoFocus:!0,disabled:n}),$(`div`,{class:`markup-comment-edit-actions`,children:[$(`button`,{type:`button`,class:`markup-btn markup-btn-ghost`,onClick:()=>r({type:`dismiss`}),disabled:n,children:`Cancel`}),$(`button`,{type:`submit`,class:`markup-btn markup-btn-primary`,disabled:n||a.trim().length===0,children:`Save`})]})]})}function Au({comment:e,pickerOpen:t,pickerLeaving:n,pickerDirection:r,pickerSide:i,pickerRef:a,onPickerClick:o,onPickerSelect:s}){return $(`div`,{class:Q(`markup-reaction-picker-wrap`,t&&`is-open`,t&&r===`up`&&`is-up`,i&&`is-side`),ref:a,children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,t&&`is-open`),title:`Add reaction`,"aria-label":`Add reaction`,onClick:o,children:$(Co,{size:16})}),t?$(`div`,{class:Q(`markup-reaction-picker`,n&&`is-leaving`),role:`menu`,inert:n||void 0,children:xu.map(t=>$(`button`,{type:`button`,role:`menuitem`,class:Q(`markup-reaction-picker-item`,(e.reactions.find(e=>e.emoji===t)?.mine??!1)&&`is-mine`),onClick:()=>s(t),children:t},t))}):null]})}function ju({comment:e,isResolved:t,onToggle:n}){return $(`div`,{class:`markup-reactions`,children:e.reactions.map(e=>{let r=Mu(e.reactors,e.mine,e.count,e.emoji);return $(`button`,{type:`button`,class:Q(`markup-reaction-chip`,e.mine&&`is-mine`),disabled:t,onClick:()=>n(e.emoji),"aria-pressed":e.mine,"aria-label":r,title:r,children:[$(`span`,{class:`markup-reaction-emoji`,"aria-hidden":!0,children:e.emoji}),$(`span`,{class:`markup-reaction-count`,children:e.count.toLocaleString()})]},e.emoji)})})}function Mu(e,t,n,r){let i=e.slice(),a=i.length+ +!!t,o=Math.max(0,n-a);return o>0&&i.push(`${o} other${o===1?``:`s`}`),t&&i.push(`you`),i.length===0?`${n} reacted with ${r}`:`${i.length===1?i[0]:`${i.slice(0,-1).join(`, `)} and ${i[i.length-1]}`} reacted with ${r}`}function Nu({name:e,image:t,tone:n}){let[r,i]=K(null);return $(`span`,{class:`markup-comment-avatar`,"data-tone":n,"aria-hidden":!0,children:t!=null&&r!==t?$(`img`,{class:`markup-avatar-img`,src:t,alt:``,loading:`lazy`,decoding:`async`,referrerpolicy:`no-referrer`,onError:()=>i(t)}):$(`span`,{class:`markup-avatar-initials`,children:Pu(e)})})}function Pu(e){return Sc(e)||`??`}function Fu(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return Math.abs(t)%5+1}function Iu(e){e.stopPropagation()}function Lu({isActive:e,onToggle:t,onHide:n,position:r=`bottom-right`,unreadCount:i,showInbox:a=!1,onOpenInbox:o,onInboxIntent:s,inboxOpen:c=!1,pinsVisible:l=!0,onTogglePins:u,identityButton:d,overflowButton:f,isLeaving:p=!1}){let m=a?i?.value??0:0,h=Y(0);m>0&&(h.current=m);let g=Y(null);J(()=>{let e=g.current;return e?kc(e):void 0},[]);let _=r===`bottom-left`?`markup-toolbar-left`:r===`bottom-center`?`markup-toolbar-center`:`markup-toolbar-right`;function v(e){if(e.preventDefault(),e.stopPropagation(),(e.metaKey||e.ctrlKey)&&n){n();return}t()}return $(`div`,{ref:g,class:Q(`markup-toolbar`,_,p&&`is-leaving`),role:`toolbar`,"aria-label":`Markup feedback toolbar`,"aria-hidden":p,inert:p?``:void 0,onPointerDown:Iu,onMouseDown:Iu,onPointerUp:Iu,onMouseUp:Iu,children:[$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`comment`,"data-armed":e?`true`:void 0,title:e?Ya(`Cancel placing markup`,[`Esc`]):Ya(`Leave a markup`,[`C`]),"aria-keyshortcuts":e?`Escape`:`C`,"aria-pressed":e,onClick:v,children:$(e?ho:wo,{size:16})}),a?$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`inbox`,"data-on":c?`true`:void 0,title:m>0?`Inbox, ${m.toLocaleString()} unread`:`Inbox`,"aria-pressed":c,onPointerEnter:s,onFocus:s,onClick:e=>{e.preventDefault(),e.stopPropagation(),o?.()},children:[$(To,{size:16}),$(`span`,{class:`markup-tb-badge`,"data-unread":m>0?`true`:`false`,"aria-hidden":`true`,children:h.current>9?`9+`:h.current})]}):null,u?$(z,{children:[$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}),$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`pins`,"aria-label":l?`Hide pins`:`Show pins`,"aria-pressed":!l,title:l?`Hide pins`:`Show pins`,onClick:e=>{e.preventDefault(),e.stopPropagation(),u()},children:$(l?Eo:Do,{size:16})})]}):null,d||f?$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}):null,d,f,f?null:$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`overflow`,"aria-label":`More options`,disabled:!0,children:$(Oo,{size:16})})]})}var Ru=[],zu=[{key:`toolbar`}],Bu=[],Vu=e=>gc(e.threadSnapshot.peek(),e.route.peek()).threads;function Hu(e,t,n,r,i){let a=Y({routeParams:n,byUrl:new Map}),o=Vt(()=>{let r=a.current,i=r.routeParams===n?r.byUrl:null,o=new Map;return a.current={routeParams:n,byUrl:o},new Map(e.map(e=>{let r=i?.get(e.url)??o.get(e.url)??$e(e.url,n);return o.set(e.url,r),[e._id,Js(e,t,r)]}))},[e,t,n]);return{pinLabels:o,scopedThreads:Vt(()=>r?e.filter(e=>e._id===i||o.get(e._id)?.otherLocation===void 0):e,[e,r,i,o])}}function Uu({store:e,apiUrl:t,apiKey:n,position:r=`bottom-right`,screenshots:i,dashboardUrl:a,routeParams:o=Ru,isAnalyticsEnabled:s=!0}){let{api:c,sendIdentity:l,patchThreads:u}=e,p=e.route.value,[m,h]=K(()=>et(o)),{threads:g,isLoaded:_}=gc(e.threadSnapshot.value,p),v=e.identity.value;d(v.kind);let y=Vt(()=>nr(t,n),[t,n]),[b]=K(()=>new AbortController);q(()=>()=>b.abort(),[b]);let[x,S]=K(r),[C,w]=K(!0),[T,E]=K(!1),[D,O]=K(!0),k=e.showResolved.value,[A,j]=K(null),M=X(()=>j(null),[]);J(()=>{e.isInboxOpen.value=A===`inbox`},[e,A]);let[N,P]=In(co,{kind:`idle`}),[F,I]=K([]),L=Y(!1);q(()=>{N.kind===`idle`||L.current||(L.current=!0,c.listMembers().then(e=>I(e.members)).catch(()=>{L.current=!1}))},[c,N.kind]);let R=Rn(),ee=Rn(),te=Rn(),{run:B}=R,{run:ne}=ee,{run:re}=te,ie=te.isPending,[ae,oe]=In(to,{kind:`visible`}),V=ae.kind!==`visible`,se=Y(V);se.current=V;let ce=X(e=>{se.current||f(`hud_hidden`,{trigger:e}),oe({type:`hide-with-toast`})},[oe]),[le]=K(()=>un(0)),[ue]=K(()=>new Map);q(()=>()=>ue.clear(),[ue]);let de=Y(null),fe=Ue(v),pe=v.kind===`verified`,me=v.kind===`unresolved`||v.kind===`recovering`,he=He(v),ge=Be(v),_e=e.commentAccess.value,{accessRefusal:ve,isPending:ye,error:be,reactionError:xe,resetErrors:Se,handleSubmitNew:Ce,handleDelete:we,handleResolve:Te,handleReply:Ee,handleEditComment:De,handleDeleteComment:Oe,handleToggleReaction:ke}=fc({api:c,identity:v,mode:N,route:p,canComment:Gn(_e,v.kind),patchThreads:u,sendMode:P}),Ae=be??R.error??xe,H=Kn({access:_e,identityKind:v.kind,hasAuthorName:fe!=null,refusal:ve}),je=(N.kind===`composing-new`||N.kind===`thread`)&&H!=null&&H!==`not-a-member`;q(()=>{je&&y()},[je,y]),q(()=>e.onThreadsResubscribed(Se),[e,Se]);let Me=Y(!1);q(()=>{if(Me.current||!_)return;let t=rt();t!==null&&(Vu(e).some(e=>e._id===t)&&P({type:`open-thread`,threadId:t,commentId:it()??void 0}),st()),Me.current=!0},[e,_,P]),q(()=>ur(()=>{e.route.value=Qe(o),h(et(o))}),[e,o]),q(()=>{function e(e){e.key===`.`&&(e.metaKey||e.ctrlKey)&&(e.altKey||e.shiftKey||(e.preventDefault(),se.current||f(`hud_hidden`,{trigger:`shortcut`}),oe({type:`toggle`})))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[oe]),q(()=>{V&&j(null)},[V]),q(()=>{if(ae.kind!==`hidden-with-toast`)return;let e=window.setTimeout(()=>oe({type:`dismiss-toast`}),5e3);return()=>window.clearTimeout(e)},[ae.kind,oe]);let Ne=Y(!1),Pe=X(()=>{Ne.current&&(N.kind===`placing`||N.kind===`composing-new`)&&(Ne.current=!1,f(`comment_abandoned`,{stage:N.kind===`placing`?`placing`:`composing`}))},[N.kind]),Fe=X(e=>{Se(),Pe(),f(`comment_started`,{trigger:e}),Ne.current=!0,P({type:`start-placing`})},[Se,P,Pe]);q(()=>{function e(e){e.key===`c`&&(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||N.kind===`idle`&&(V||ao()||(e.preventDefault(),Fe(`shortcut`))))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[N.kind,V,Fe]);let Ie=X(()=>{Pe(),P({type:`cancel`}),Se()},[Se,P,Pe]),Le=Y(0),Re=X((e,t,n)=>{let r=t+window.scrollX,a=n+window.scrollY,o=++Le.current,s=i?.enabled!==!1&&D;if(f(`pin_placed`,{hasSelector:e.anchorSelector!=null,hasSourceAttribute:e.anchorSource!=null,isCapturing:s,prompt:H??`composer`}),P({type:`place`,coords:e,pageX:r,pageY:a,isCapturing:s,captureToken:o}),!s)return;let c=de.current!=null&&de.current.getRootNode()instanceof ShadowRoot?de.current.getRootNode().host:null,l={strictScrub:i?.strictScrub,redactSelector:i?.redactSelector};requestAnimationFrame(()=>setTimeout(()=>{ka(c,{x:t,y:n},l).then(e=>{P({type:`capture-done`,captureToken:o,result:e}),f(`screenshot_captured`,{ok:e!=null})})},0))},[i,D,H,P]),ze=X((e,t)=>{l({type:`author-set`,name:e,email:t})},[l]),Ve=R.isPending,We=X(async()=>{f(`sign_in_started`),await B(async()=>{try{let e=no(await yr({apiUrl:t,apiKey:n,cookieSupport:y(),signal:b.signal}));if(!e)throw Error(`Sign-in did not return a verified token`);l({type:`signed-in`,identity:e}),f(`sign_in_completed`,{identity:`verified`})}catch(e){throw f(`sign_in_failed`,{reason:gr(e)}),e}})},[t,n,y,b,B,l]),Ge=X(t=>{if(e.markRead(t),Vu(e).some(e=>e._id===t.threadId))Pe(),P({type:`open-thread`,threadId:t.threadId,commentId:t.commentId});else{let e=lt(t.threadUrl,t.threadId,t.commentId);e&&(window.location.href=e)}},[e,P,Pe]),[Ke,qe]=K(null);q(()=>{if(Ke===null)return;let e=window.setTimeout(()=>qe(null),5e3);return()=>window.clearTimeout(e)},[Ke]);let Je=X(async()=>await ne(async()=>(await c.forgetMe(),Pe(),P({type:`cancel`}),l({type:`forget-me`}),qe(`forgotten`),!0))===!0,[c,ne,l,P,Pe]),Ye=X(async()=>{await re(async()=>{await c.signOut(),Pe(),P({type:`cancel`}),l({type:`signed-out`}),qe(`signed-out`)})},[c,re,l,P,Pe]),Xe=X(()=>ce(`menu`),[ce]),Ze=X(e=>{e!==x&&f(`setting_changed`,{setting:`position`,value:e}),S(e)},[x]),$e=X(()=>{f(`setting_changed`,{setting:`auto_capture`,value:!D}),O(!D)},[D]),tt=X(()=>{f(`setting_changed`,{setting:`url_scope`,value:!T}),E(!T)},[T]),nt=X(()=>{f(`setting_changed`,{setting:`show_resolved`,value:!k}),e.showResolved.value=!k},[e,k]),at=N.kind===`thread`?g.find(e=>e._id===N.threadId)??null:null,ot=he!=null&&he===at?.authorClientId,ct=e.canModerate.value,ut=ot||ct,dt=N.kind===`thread`?N.threadId:null,{pinLabels:ft,scopedThreads:pt}=Hu(g,m,o,T,dt),mt=C&&N.kind!==`placing`?g.length-pt.length:0,ht=N.kind!==`placing`&&!V&&C,gt=Hn(!V||N.kind===`placing`||N.kind===`composing-new`?zu:Bu,e=>e.key,160),_t=[];ae.kind===`hidden-with-toast`&&_t.push({key:`hud-hidden`,body:$(z,{children:[`Markup hidden \u2014 press `,$(`kbd`,{class:`markup-kbd`,children:Ja().mod}),$(`kbd`,{class:`markup-kbd`,children:`.`}),` or refresh to bring it back.`]})}),Ke===`forgotten`&&_t.push({key:`forget-me`,body:`Forgotten on this site \u2014 your name and email were cleared.`}),Ke===`signed-out`&&_t.push({key:`signed-out`,body:`Signed out \u2014 commenting anonymously again.`});let vt=Hn(_t,e=>e.key,220),yt=Hn(N.kind===`thread`&&at?[at]:mc,e=>e._id,160),U=Un(N.kind===`composing-new`?N:null,160),bt=Un(A,140),xt=X((e,t)=>{Pe(),f(`thread_opened`,{commentCount:t}),P({type:`open-thread`,threadId:e})},[P,Pe]),St=N.kind===`thread`&&at==null;return q(()=>{St&&Ie()},[St,Ie]),$(`div`,{class:`markup-root`,ref:de,style:lo,children:[$(ac,{threads:g,scopedThreads:pt,pinLabels:ft,viewerDetail:m,routeParams:o,shouldShowPins:ht,activeThreadId:dt,composer:U?{pageX:U.value.pageX,pageY:U.value.pageY,isLeaving:U.isLeaving,isCapturing:U.value.isScreenshotCapturing}:null,isPopoverOpen:U!=null||yt.length>0,isPopoverTracked:U!=null||yt.length>0&&!V,layoutTick:le,anchorMemory:ue,onOpenThread:xt}),N.kind===`placing`?$(cu,{onPlace:Re,onCancel:Ie}):null,yt.map(({key:e,value:t,isLeaving:n})=>$(Du,{thread:t,anchorMemory:ue,layoutTick:le,focusCommentId:N.kind===`thread`&&N.threadId===t._id?N.commentId:void 0,isLeaving:n,authorName:fe,authorPromptMode:H,currentClientId:he??null,viewerUserId:ge,isVerified:pe,isIdentityResolving:me,isSigningIn:Ve,canDelete:ut,canModerate:ct,isPending:ye,error:Ae,isHidden:V,members:F,onAuthor:ze,onSignIn:We,onSignOut:Ye,onClose:Ie,onReply:Ee,onEditComment:De,onDeleteComment:Oe,onToggleReaction:ke,onDelete:we,onResolve:Te},e)),U?$(Il,{isLeaving:U.isLeaving,pageX:U.value.pageX,pageY:U.value.pageY,layoutTick:le,authorName:fe,authorPromptMode:H,canModerate:ct,isIdentityResolving:me,isSigningIn:Ve,isPending:ye,error:Ae,screenshot:U.value.screenshot,isScreenshotCapturing:U.value.isScreenshotCapturing,screenshotFailed:U.value.screenshotFailed,screenshotRedactedCount:U.value.screenshotRedactedCount,screenshotRedactedSelectors:U.value.screenshotRedactedSelectors,members:F,onAuthor:ze,onSignIn:We,onSignOut:Ye,onSubmit:Ce,onClose:Ie}):null,gt.map(n=>$(Lu,{isLeaving:n.isLeaving,isActive:N.kind===`placing`,onToggle:()=>N.kind===`placing`?Ie():Fe(`toolbar`),onHide:()=>ce(`toolbar`),position:x,showInbox:pe,unreadCount:e.unreadCount,inboxOpen:A===`inbox`,onOpenInbox:()=>{let t=A===`inbox`?null:`inbox`;j(t),t&&(f(`notifications_opened`,{unreadCount:e.unreadCount.peek()}),e.refreshNotifications())},onInboxIntent:e.prefetchNotifications,pinsVisible:C,onTogglePins:()=>{f(`setting_changed`,{setting:`pins`,value:!C}),w(!C)},identityButton:$(Mc,{identity:v,position:x,isSigningIn:Ve,isSigningOut:ie,dashboardUrl:a,commentAccess:_e,onSignIn:We,onSignInIntent:y,onSignOut:Ye,onForgetMe:Je}),overflowButton:$(au,{position:x,onSetPosition:Ze,autoCapture:D&&i?.enabled!==!1,autoCaptureLocked:i?.enabled===!1,onToggleAutoCapture:$e,isUrlScoped:T,hiddenByUrlScope:mt,onToggleUrlScope:tt,showResolved:k,onToggleShowResolved:nt,onHideForSession:Xe,isAnalyticsEnabled:s,identity:v,apiUrl:t,commentAccess:_e,isForgettingMe:ee.isPending,forgetMeError:ee.error,onForgetMe:Je,version:`1.34.4`,dashboardUrl:a})},n.key)),bt?.value===`inbox`&&pe?$(su,{kind:`inbox`,label:`Inbox`,position:x,ignoreToolbarKind:`inbox`,isLeaving:bt.isLeaving,onClose:M,children:$(Ql,{state:e.inbox.value,viewerUserId:ge,isMarkingAll:e.isMarkingAllRead.value,onItemClick:e=>{M(),Ge(e)},onMarkAllRead:e.markAllRead})}):null,vt.map(e=>$(vc,{position:x,isLeaving:e.isLeaving,children:e.value.body},e.key))]})}var Wu=Nn({idle:{fetch:()=>({kind:`loading`})},loading:{loaded:(e,t)=>({kind:`ready`,items:t.items}),failed:(e,t)=>({kind:`failed`,error:t.error}),reset:()=>({kind:`idle`})},failed:{fetch:()=>({kind:`loading`}),loaded:(e,t)=>({kind:`ready`,items:t.items}),reset:()=>({kind:`idle`})},ready:{loaded:(e,t)=>({kind:`ready`,items:t.items}),failed:(e,t)=>({...e,error:t.error}),patch:(e,t)=>({...e,items:t.update(e.items)}),reset:()=>({kind:`idle`})}}),Gu=Nn({idle:{issued:(e,t)=>({kind:`active`,token:t.token,expiresAt:t.expiresAt,mintedAs:t.mintedAs})},active:{issued:(e,t)=>({kind:`active`,token:t.token,expiresAt:t.expiresAt,mintedAs:t.mintedAs})}}),Ku=`anon`;function qu(e){return e.kind===`verified`?e.identity.clientId:Ku}function Ju(e){return e.kind===`verified`&&e.identity.tokenExpiresAt>Date.now()?e.identity.clientId:Ku}function Yu(e,t){return e.kind===`active`&&e.mintedAs===t}var Xu=18e5,Zu=6e4,Qu=6e4;function $u(e){let t=!1,n=null;async function r(){let i;try{i=await e.mint()}catch(e){if(t)return;e?.name!==`TypeError`&&H(e,{context:`subscription-token-refresh`}),n=setTimeout(r,Qu);return}if(t)return;let a=Math.max(Zu,i.expiresAt-Date.now()-Xu);n=setTimeout(r,a);try{e.onIssued(i)}catch(e){H(e,{context:`subscription-token-issued`})}}return r(),()=>{t=!0,n&&clearTimeout(n)}}var ed=`1.38.0`,td=100,nd=1e3,rd=3e3,id=16e3,ad=6,od=3e5,sd=6e4,cd=5,ld=20,ud=6e4,dd=0,fd=/^(SubscriptionsWorkerFullError|TooManyConcurrentRequests|CommitterFullError|AwsTooManyRequestsException|ExecuteFullError|SystemTimeoutError|ExpiredInQueue|VectorIndexTooLarge|SearchIndexTooLarge|TooManyWritesInTimePeriod)/,pd=`AAAAAAAAAAA=`,md=new Set([`$integer`,`$float`,`$bytes`]),hd=34,gd=36,_d=Object.prototype.hasOwnProperty,vd=class{#e;#t=Ad();#n=new Map;#r=0;#i=0;#a={querySet:0,identity:0,ts:pd};#o;#s=null;#c=null;#l=!1;#u=!1;#d=0;#f=`InitialConnect`;#p=0;#m=0;#h=0;#g=0;#_=0;#v=new Set;#y;#b;#x=null;#S=new Map;constructor(e){this.#e=`${e.replace(/^http/,`ws`)}/api/${ed}/sync`,window.addEventListener(`online`,this.#w),window.addEventListener(`pagehide`,this.#E),window.addEventListener(`pageshow`,this.#D),document.addEventListener(`securitypolicyviolation`,this.#C),document.addEventListener(`visibilitychange`,this.#T),this.#A()}onUpdate(e,t,n){let r=this.#r++,i={udfPath:e,args:t,onValue:n};return this.#n.set(r,i),this.#F(r,yd(r,i)),this.#k(),()=>{this.#v.delete(r),this.#n.delete(r)&&(this.#S.delete(r)||this.#F(r,{type:`Remove`,queryId:r}))}}close(){this.#u=!0,clearTimeout(this.#y),clearTimeout(this.#b),window.removeEventListener(`online`,this.#w),window.removeEventListener(`pagehide`,this.#E),window.removeEventListener(`pageshow`,this.#D),document.removeEventListener(`securitypolicyviolation`,this.#C),document.removeEventListener(`visibilitychange`,this.#T),this.#H()}#C=e=>{e.disposition!==`report`&&(e.blockedURI===this.#e||e.blockedURI===new URL(this.#e).origin)&&(H(Error(`Convex sync: blocked by ${e.effectiveDirective}`),{context:`sync-connect`}),this.close())};#w=()=>{this.#m=0,this.#y!==void 0&&(clearTimeout(this.#y),this.#A())};#T=()=>{document.visibilityState===`visible`&&this.#k()};#E=e=>{e.persisted&&(clearTimeout(this.#y),this.#y=void 0,clearTimeout(this.#b),this.#f??=`BackForwardCache`,this.#H(!0))};#D=e=>{!e.persisted||this.#s||(clearTimeout(this.#y),this.#p=0,this.#m=0,this.#A())};get#O(){return this.#m>=ad}#k(){this.#y!==void 0&&this.#O&&(clearTimeout(this.#y),this.#A())}#A(){if(this.#y=void 0,this.#u)return;let e;try{e=new WebSocket(this.#e)}catch(e){H(e,{context:`sync-connect`}),this.close();return}this.#m+=1;let t=new AbortController;this.#s=e,this.#c=t,this.#V();let n=(n,r)=>e.addEventListener(n,t=>{this.#s===e&&r(t)},{signal:t.signal});n(`open`,()=>{this.#l=!0,this.#m=0,this.#v=new Set(this.#n.keys()),this.#V(),this.#L({type:`Connect`,sessionId:this.#t,connectionCount:this.#d,lastCloseReason:this.#f,maxObservedTimestamp:this.#o,clientTs:Date.now()}),this.#a={querySet:0,identity:0,ts:pd},this.#i=1,this.#S.clear(),this.#L({type:`ModifyQuerySet`,baseVersion:0,newVersion:1,modifications:[...this.#n].map(([e,t])=>yd(e,t))}),this.#d+=1,this.#f=null}),n(`message`,e=>{this.#V();try{this.#j(e.data)}catch(e){this.#N(e)}}),n(`close`,e=>{this.#f??=e.reason||`closed with code ${e.code}`,this.#s=null,this.#l=!1,this.#x=null,this.#B(this.#z(fd.test(e.reason)?rd:nd))})}#j(e){let t=JSON.parse(e);if(t.type!==`Ping`){if(t.type===`TransitionChunk`){let e=this.#M(t);if(e===null)return;let n=JSON.parse(e);if(n.type!==`Transition`)throw Error(`Convex sync: chunks were not a Transition`);this.#P(n,e);return}this.#x=null,t.type===`Transition`&&this.#P(t,e),t.type===`FatalError`&&(H(Error(`Convex sync: ${t.error}`),{context:`sync-fatal`}),this.close())}}#M(e){let t=this.#x??={transitionId:e.transitionId,totalParts:e.totalParts,parts:[]};if(t.transitionId!==e.transitionId||t.totalParts!==e.totalParts||t.parts.length!==e.partNumber||e.partNumber>=e.totalParts)throw Error(`Convex sync: TransitionChunk out of sequence`);return t.parts.push(e.chunk),t.parts.length<t.totalParts?null:(this.#x=null,t.parts.join(``))}#N(e){let t=Date.now();if(t-this.#_>=ud&&(this.#h=0),this.#_=t,this.#h+=1,this.#g+=1,this.#h===1&&H(e,{context:`sync-message`}),this.#h>=cd||this.#g>=ld){H(Error(`Convex sync: stopped after ${this.#g} protocol errors`),{context:`sync-message`}),this.close();return}this.#f=`ClientError`,this.#H(),this.#B(Math.min(nd*2**(this.#h-1),id))}#P(e,t){let n=this.#a,r=e.startVersion;if(r.querySet!==n.querySet||r.identity!==n.identity||Sd(r.ts)!==Sd(n.ts))throw Error(`Convex sync: Transition does not start where the last one ended`);this.#a=e.endVersion,(this.#o===void 0||Sd(e.endVersion.ts)>Sd(this.#o))&&(this.#o=e.endVersion.ts);let i=Cd(t);for(let t of e.modifications){if(this.#u)return;this.#v.delete(t.queryId);let e=this.#n.get(t.queryId);if(e&&t.type!==`QueryRemoved`&&(t.journal!==void 0&&(e.journal=t.journal),t.type===`QueryUpdated`))try{let n=wd(t.value??null,e.value,i);e.value=n,e.onValue(n)}catch(e){H(e,{context:`sync-callback`})}}this.#v.size===0&&(this.#p=0)}#F(e,t){this.#l&&(this.#S.set(e,t),this.#S.size===1&&queueMicrotask(this.#I))}#I=()=>{let e=[...this.#S.values()];if(this.#S.clear(),!this.#l||e.length===0)return;let t=this.#i++;this.#L({type:`ModifyQuerySet`,baseVersion:t,newVersion:this.#i,modifications:e})};#L(e){try{this.#s?.send(JSON.stringify(e))}catch{this.#R(`FailedToSendMessage`)}}#R(e,t=!1){this.#u||(this.#f=e,this.#H(t),this.#B(this.#z(td)))}#z(e){let t=Math.min(e*2**this.#p,id);return this.#p+=1,t}#B(e){if(clearTimeout(this.#y),clearTimeout(this.#b),this.#u)return;let t=this.#O?od:e;this.#y=setTimeout(()=>this.#A(),t*(.5+Math.random()))}#V(){clearTimeout(this.#b),this.#b=setTimeout(()=>this.#R(`InactiveServer`,!0),sd)}#H(e=!1){let t=this.#s;this.#s=null,this.#l=!1,this.#x=null,t&&(this.#c?.abort(),t.readyState===dd&&!e?t.addEventListener(`open`,()=>t.close()):t.close())}};function yd(e,t){return{type:`Add`,queryId:e,udfPath:t.udfPath,args:[Object.fromEntries(Object.entries(t.args).sort(([e],[t])=>e<t?-1:1))],journal:t.journal}}function bd(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return new DataView(n.buffer)}function xd(e,t){let n=bd(e);if(n.byteLength!==8)throw Error(`Convex sync: malformed ${t}`);return n}function Sd(e){return xd(e,`timestamp`).getBigUint64(0,!0)}function Cd(e){for(let t=e.indexOf(`$`);t!==-1;t=e.indexOf(`$`,t+1))if(e.charCodeAt(t-1)===hd)return!0;return e.includes(`\\u0024`)}function wd(e,t,n=!0){if(typeof e!=`object`||!e||t===void 0&&!n)return e;if(Array.isArray(e)){let r=Array.isArray(t)?t:void 0,i=r?.length===e.length,a;for(let t=0;t<e.length;t+=1){let o=e[t],s=r?.[t],c=r&&Dd(o);r&&c!==void 0&&c!==Dd(s)&&(a??=Od(r),s=a.get(c),i=!1);let l=wd(o,s,n);l!==o&&(e[t]=l),i&&=Object.is(l,s)}return i?r:e}let r=e,i=Ed(t)?t:void 0,a=i!==void 0,o=0;for(let e in r){if(!_d.call(r,e))continue;if(n&&e.charCodeAt(0)===gd){if(o===0&&md.has(e)&&kd(r)===1)return Td(e,r[e]);throw Error(`Convex sync: field ${e} starts with $`)}o+=1;let t=r[e],s=i&&_d.call(i,e)?i[e]:void 0,c=wd(t,s,n);c!==t&&(r[e]=c),a&&=Object.is(c,s)}return i&&a&&kd(i)===o?i:r}function Td(e,t){if(typeof t!=`string`)throw Error(`Convex sync: malformed ${e}`);if(e===`$integer`)return xd(t,e).getBigInt64(0,!0);if(e===`$float`){let n=xd(t,e).getFloat64(0,!0);if(Number.isFinite(n)&&!Object.is(n,-0))throw Error(`Convex sync: malformed $float`);return n}return bd(t).buffer}function Ed(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof ArrayBuffer)}function Dd(e){if(!Ed(e)||!_d.call(e,`_id`))return;let t=e._id;return typeof t==`string`?t:void 0}function Od(e){let t=new Map;for(let n of e){let e=Dd(n);e!==void 0&&!t.has(e)&&t.set(e,n)}return t}function kd(e){let t=0;for(let n in e)_d.call(e,n)&&(t+=1);return t}function Ad(){return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}async function jd(e){try{let t={method:`POST`,headers:{"content-type":`application/json`,"x-markup-api-key":e.apiKey},signal:Qn(Zn,e.signal)};if(e.mode===`cookies`)t.credentials=`include`,t.body=`{}`;else{if(!e.refreshToken)return null;t.body=JSON.stringify({refreshToken:e.refreshToken})}let n=await fetch(`${e.apiUrl.replace(/\/+$/,``)}/widget/refresh`,t);if(!n.ok)return null;let r=await n.json();return r.mode===`cookies`?typeof r.accessTokenExpiresAt!=`number`||typeof r.refreshTokenExpiresAt!=`number`?null:{mode:`cookies`,accessTokenExpiresAt:r.accessTokenExpiresAt,refreshTokenExpiresAt:r.refreshTokenExpiresAt}:typeof r.accessToken!=`string`||typeof r.accessTokenExpiresAt!=`number`||typeof r.refreshToken!=`string`||typeof r.refreshTokenExpiresAt!=`number`?null:{mode:`localStorage`,accessToken:r.accessToken,accessTokenExpiresAt:r.accessTokenExpiresAt,refreshToken:r.refreshToken,refreshTokenExpiresAt:r.refreshTokenExpiresAt}}catch(e){let t=e?.name;return t!==`AbortError`&&t!==`TypeError`&&t!==`TimeoutError`&&H(e,{context:`refresh-token`}),null}}var Md=6e4,Nd=500,Pd=new WeakSet;function Fd(e){if((e.storage!==`localStorage`||e.refreshToken!=null)&&(e.storage===`cookies`||e.storage===`localStorage`))return e.refreshTokenExpiresAt}function Id(e){let t=Date.now();return e.tokenExpiresAt<=t&&!Pd.has(e)&&(Fd(e)??0)>t}function Ld(e,{apiUrl:t,apiKey:n,onRefreshed:r,onFailure:i}){if(e.kind!==`verified`)return;let a=e.identity,{storage:o,refreshToken:s}=a,c=Fd(a);if(c==null)return;let l=Date.now();if(c<=l){i();return}let u=Id(a)?0:Math.max(Nd,a.tokenExpiresAt-Md-l),d=new AbortController,f=window.setTimeout(async()=>{let e=await jd({apiUrl:t,apiKey:n,mode:o,refreshToken:s,signal:d.signal});if(d.signal.aborted)return;if(!e){i();return}let c=e.mode===`cookies`?{...a,tokenExpiresAt:e.accessTokenExpiresAt,refreshTokenExpiresAt:e.refreshTokenExpiresAt}:{...a,token:e.accessToken,tokenExpiresAt:e.accessTokenExpiresAt,refreshToken:e.refreshToken,refreshTokenExpiresAt:e.refreshTokenExpiresAt};Pd.add(c),r(c)},u);return()=>{window.clearTimeout(f),d.abort()}}var Rd=`widget/queries:subscribeThreadsForRoute`,zd=`widget/queries:subscribeProjectSettings`,Bd=`widget/queries:subscribeUnreadCountForProject`,Vd=3e4,Hd=300,Ud=2**31-1,Wd=5e3;function Gd(e){return bn(()=>{try{return e()}catch(e){H(e,{context:`live-store`})}})}function Kd({apiUrl:e,apiKey:t,initialIdentity:n,initialRoute:r,seed:i=null,createClient:a=e=>new vd(e)}){let o=e.replace(/\.convex\.site(\/.*)?$/,`.convex.cloud`);if(!/^https?:\/\//.test(o))throw Error(`Invalid apiUrl: ${e}`);let{state:s,send:c}=Fn(io,n.state),l=hn(()=>s.value.kind),u=hn(()=>He(s.value)),d=$n({apiUrl:e,apiKey:t,...Ve(()=>s.peek()),onUnauthorized:()=>{c({type:`unauthorized`})}}),f=un(r),p=un(!1),m=un(hc(r)),h=un(Wn),g=un(!1),_=un(0),{state:v,send:y}=Fn(Wu,{kind:`idle`}),b=un(!1),x=un(!1),S=0,{state:C,send:w}=Fn(Gu,{kind:`idle`}),T=hn(()=>{let e=C.value;return e.kind===`active`?e.token:null}),E=un(null),D=hn(()=>Yu(C.value,qu(s.value))),O=hn(()=>l.value===`verified`&&D.value&&g.value),k=un(0),A=hn(()=>(k.value,Ju(s.value))),j=hn(()=>{let e=s.value;return e.kind===`verified`&&Id(e.identity)?!1:Yu(C.value,A.value)}),M=new Set;function N(){let e=S;y({type:`fetch`}),d.listNotifications().then(t=>{S===e&&y({type:`loaded`,items:t.notifications})}).catch(t=>{P=null,S===e&&y({type:`failed`,error:t instanceof Error?t.message:`Failed to load.`})})}let P=null,F=()=>`${S}:${_.peek()}`,I=e=>P?.key===e&&Date.now()-P.at<Wd&&v.peek().kind!==`failed`;function L(e){S+=1,y({type:`patch`,update:e})}let R=un(null),ee=un(!1),te=!1,z=n.state.kind===`unresolved`?i?.takeAnonIdentity()??null:null;function B(e,t){return e?e.catch(e=>{if(te)throw e;return t()}):t()}let ne=[Gd(()=>{let e=s.value;if(e.kind!==`unresolved`&&e.kind!==`recovering`)return;let t=e.kind===`recovering`?e.preserved:n.preserved,r=!1,i=null,a=1e3;ee.value=!0;let o=()=>{ee.value=!1},l=setTimeout(o,Hd);function u(){let e=z;z=null,B(e,()=>d.mintAnonIdentity()).then(({clientId:e,token:n})=>{if(r)return;let i={clientId:e,anonToken:n,name:t.name,email:t.email};c({type:`mint-success`,identity:i})}).catch(()=>{r||(o(),i=setTimeout(u,Math.min(a,Vd)),a=Math.min(a*2,Vd))})}return u(),()=>{r=!0,i&&clearTimeout(i),clearTimeout(l),o()}}),Gd(()=>Ld(s.value,{apiUrl:e,apiKey:t,onRefreshed:e=>c({type:`signed-in`,identity:e}),onFailure:()=>c({type:`unauthorized`})})),Gd(()=>{k.value;let e=s.value;if(e.kind!==`verified`)return;let t=e.identity.tokenExpiresAt-Date.now();if(t<=0)return;let n=setTimeout(()=>{k.value+=1},Math.min(t,Ud));return()=>clearTimeout(n)}),Gd(()=>{let e=A.value,t=i?.takeSubscriptionToken(e)??null;return $u({mint:()=>{let e=t;return t=null,B(e,()=>d.getSubscriptionToken())},onIssued:t=>w({type:`issued`,token:t.token,expiresAt:t.expiresAt,mintedAs:e})})}),Gd(()=>{T.value===null||R.peek()||(R.value=a(o))}),Gd(()=>{let e=C.value;if(e.kind!==`active`)return;let t=E.peek(),n=t!=null&&(t.mintedAs===`anon`||t.mintedAs===e.mintedAs)?t.expiresAt-Xu-Date.now():0,r=()=>{E.value=e};if(n<=0){r();return}let i=setTimeout(r,Math.min(n,Ud));return()=>clearTimeout(i)}),Gd(()=>{let e=f.value,t=E.value?.token,n=u.value,r=p.value;m.peek().route!==e&&(m.value=hc(e));let i=R.value;if(t&&i&&!(n===void 0&&ee.value)){for(let e of M)e();return i.onUpdate(Rd,{subscriptionToken:t,route:e,viewerClientId:n,includeResolved:r},t=>{t!==void 0&&t!==m.peek().threads&&(m.value={route:e,threads:t,isLoaded:!0})})}}),Gd(()=>{let e=T.value;g.value=!1;let t=R.value;if(e&&t&&j.value)return t.onUpdate(zd,{subscriptionToken:e},e=>{let t=e;h.value=t?.commentAccess===`members`?`members`:Wn,g.value=t?.canModerate===!0})}),Gd(()=>{if(l.value!==`verified`||!D.value){_.value=0;return}let e=T.value,t=R.value;if(e&&t)return t.onUpdate(Bd,{subscriptionToken:e},e=>{e!==void 0&&(_.value=e.count,x.peek()&&N())})}),Gd(()=>{l.value,u.value,S+=1,y({type:`reset`})})];return{api:d,identity:s,sendIdentity:c,route:f,showResolved:p,threadSnapshot:m,commentAccess:h,canModerate:O,unreadCount:_,inbox:v,isMarkingAllRead:b,isInboxOpen:x,refreshNotifications(){let e=I(F());P=null,e||N()},prefetchNotifications(){let e=F();I(e)||(P={key:e,at:Date.now()},N())},patchThreads(e,t){m.value=_c(m.peek(),e,t)},markRead(e){e.readAt??(_.value=Math.max(0,_.peek()-1),L(t=>t.map(t=>t._id===e._id?{...t,readAt:Date.now()}:t)),d.markNotificationRead(e._id).catch(()=>{}))},markAllRead(){b.value=!0,_.value=0,L(e=>e.map(e=>e.readAt==null?{...e,readAt:Date.now()}:e)),d.markAllNotificationsRead().catch(()=>{}).finally(()=>{b.value=!1})},onThreadsResubscribed(e){return M.add(e),()=>M.delete(e)},dispose(){te=!0,i?.abort();for(let e of ne.reverse())e();M.clear(),R.peek()?.close()}}}function qd(e){function t(t){t.target===e&&(t.stopImmediatePropagation(),o(!0))}function n(t){if(t.target===e){t.stopImmediatePropagation();return}t.relatedTarget===e&&(t.stopImmediatePropagation(),t.target?.dispatchEvent(new FocusEvent(`focusout`,{bubbles:!0,composed:!0,relatedTarget:null})))}function r(t){t.target===e?t.stopImmediatePropagation():document.activeElement!==e&&!i(t)&&o(!1)}function i(t){if(t.type!==`wheel`)return!1;let{clientX:n,clientY:r}=t;return document.elementFromPoint(n,r)===e}function a(e){e.stopPropagation()}function o(e){let t=e?`addEventListener`:`removeEventListener`;for(let e of Jd)window[t](e,r,Yd)}let s=()=>o(!0),c={capture:!0};window.addEventListener(`focusin`,t,c),window.addEventListener(`focusout`,n,c),e.addEventListener(`pointerdown`,a),e.addEventListener(`pointerover`,s,Yd);let l=Zd(e);return()=>{o(!1),window.removeEventListener(`focusin`,t,c),window.removeEventListener(`focusout`,n,c),e.removeEventListener(`pointerdown`,a),e.removeEventListener(`pointerover`,s,Yd),l()}}var Jd=[`wheel`,`touchmove`],Yd={capture:!0,passive:!0},Xd=[`aria-hidden`,`inert`];function Zd(e){let t=()=>{for(let t of Xd)e.hasAttribute(t)&&e.removeAttribute(t)},n=new MutationObserver(t);return n.observe(e,{attributes:!0,attributeFilter:Xd}),t(),()=>n.disconnect()}function Qd(e,t,n=null){e.style.position=`fixed`,e.style.inset=`0`,e.style.zIndex=`2147483647`,e.style.pointerEvents=`none`,St(e,t.theme??`auto`);let r=Dt(),i=qd(e),a=e.attachShadow({mode:`open`});mt(a);let o=document.createElement(`div`);o.className=`markup-shadow-root`,a.appendChild(o),Ae({apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.34.4`}),c(t.analytics===!1?null:{apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.34.4`}),f(`widget_loaded`,{entry:u()});let{theme:s,analytics:l,...d}=t,p=null,m=setTimeout(()=>{try{let e=Kd({apiUrl:t.apiUrl,apiKey:t.apiKey,initialIdentity:Le(),initialRoute:Qe(t.routeParams??[]),seed:n});p=e,xe($(Se,{onError:e=>H(e,{context:`render`}),children:()=>$(Uu,{...d,isAnalyticsEnabled:t.analytics!==!1,store:e})}),o)}catch(e){H(e,{context:`mount`})}},0);return()=>{clearTimeout(m),r(),i(),Ae(null),c(null),xe(null,o),p?.dispose()}}var $d=3e4;function ef({apiUrl:e,apiKey:t}){if(!/^https?:\/\//.test(e))return null;let{state:n}=Le(),r=new AbortController,i={signal:r.signal},a=$n({apiUrl:e,apiKey:t,...Ve(()=>n)}),o=Ju(n),s=tf(a.getSubscriptionToken(i)),c=n.kind===`unresolved`?tf(a.mintAnonIdentity(i)):null,l=setTimeout(u,$d);function u(){clearTimeout(l),s=null,c=null,r.abort()}return{takeSubscriptionToken(e){let t=e===o?s:null;return s=null,t},takeAnonIdentity(){let e=c;return c=null,e},abort:u}}function tf(e){return e.catch(()=>{}),e}var nf=2e3,rf=null,af=null,of=null,sf=null,cf=null,lf=null,uf=!1;function df(e){if(!e.apiUrl||!e.apiKey)return console.warn(`[markup] init() requires both apiUrl and apiKey, so the widget was not mounted`),()=>{};e.fab!=null&&!uf&&(uf=!0,console.warn("[markup] the `fab` option is ignored and will be removed in the next major. The toolbar replaced the floating action button. Remove it from your config."));let t=_(e);if(lf&&t===cf&&(of!==null||af?.isConnected===!0))return lf;mf(),cf=t;let n=ff();lf=n;let r=ef(e);sf=r;let i=()=>{if(of=null,!document.body)return;let t=document.createElement(`div`);t.id=`markup-widget`,document.body.appendChild(t),af=t,rf=Qd(t,e,r)},a=()=>{of=pf(i)};return document.readyState===`loading`||!document.body?(of=()=>document.removeEventListener(`DOMContentLoaded`,a),document.addEventListener(`DOMContentLoaded`,a,{once:!0})):a(),n}function ff(){let e=()=>{lf===e&&mf()};return e}function pf(e){if(typeof requestIdleCallback==`function`){let t=requestIdleCallback(e,{timeout:nf});return()=>cancelIdleCallback(t)}let t=setTimeout(e,0);return()=>clearTimeout(t)}function mf(){of&&=(of(),null),rf&&=(rf(),null),sf?.abort(),sf=null,af?.parentNode&&af.parentNode.removeChild(af),af=null,cf=null,lf=null}if(typeof document<`u`){let e=document.currentScript??document.querySelector(`script[data-markup-widget="true"]`),t=e?.dataset.apiUrl,n=e?.dataset.apiKey;if(t&&n){let r=e?.dataset.position,i=e?.dataset.theme,a=e?.dataset.fab,o=e?.dataset.dashboardUrl,s=e?.dataset.analytics!==`false`,c=e?.dataset.routeParams?.split(`,`).map(e=>e.trim()).filter(e=>e!==``),u=()=>{l(`script`),df({apiUrl:t,apiKey:n,position:r,theme:i,fab:a,dashboardUrl:o,analytics:s,routeParams:c})};document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,u,{once:!0}):u()}}export{mf as destroy,df as init,l as n,_ as t};
12
12
  //# sourceMappingURL=widget.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelmatters/markup",
3
- "version": "1.34.3",
3
+ "version": "1.34.4",
4
4
  "description": "Embeddable feedback widget for collecting visual bug reports, screenshots, and comments on live web apps.",
5
5
  "keywords": [
6
6
  "annotation",
@@ -60,7 +60,7 @@
60
60
  "@playwright/test": "^1.63.0",
61
61
  "@preact/preset-vite": "^2.10.6",
62
62
  "@preact/signals": "^2.11.3",
63
- "@tanstack/intent": "^0.4.0",
63
+ "@tanstack/intent": "^0.5.5",
64
64
  "@types/react": "^19.3.0",
65
65
  "@types/react-dom": "^19.3.0",
66
66
  "convex": "^1.38.0",
@@ -7,7 +7,7 @@ sources:
7
7
  - 'Pixelmatters/markup:packages/widget/src/widget.ts'
8
8
  metadata:
9
9
  library: pixelmatters-markup
10
- library_version: '1.34.3'
10
+ library_version: '1.34.4'
11
11
  ---
12
12
 
13
13
  `@pixelmatters/markup` is a Preact widget that runs inside a shadow DOM and talks to a hosted Convex backend at `https://<deployment>.convex.site`. The host page calls `init({ apiUrl, apiKey })` once at the app root and gets back a `destroy()` function. Everything else lives inside the widget bundle: pin anchoring, threads, mentions, identity, screenshots, real-time updates.
@@ -26,7 +26,7 @@ For a `<script>`-tag drop-in (no bundler / CMS / page-builder), use the inline E
26
26
 
27
27
  ```html
28
28
  <script type="module">
29
- import { init } from 'https://esm.sh/@pixelmatters/markup@1.34.3'
29
+ import { init } from 'https://esm.sh/@pixelmatters/markup@1.34.4'
30
30
  init({ apiUrl: '…', apiKey: '…' })
31
31
  </script>
32
32
  ```
@@ -36,7 +36,7 @@ If the host disallows inline JS, use the auto-init form. `data-markup-widget="tr
36
36
  ```html
37
37
  <script
38
38
  type="module"
39
- src="https://esm.sh/@pixelmatters/markup@1.34.3"
39
+ src="https://esm.sh/@pixelmatters/markup@1.34.4"
40
40
  data-markup-widget="true"
41
41
  data-api-url="…"
42
42
  data-api-key="…"
@@ -60,7 +60,10 @@ import { init, destroy } from '@pixelmatters/markup'
60
60
  If `apiUrl` or `apiKey` is missing, `init` logs a `[markup]` console warning and returns a no-op `destroy` rather than mounting, which is worth knowing when debugging "nothing showed up."
61
61
 
62
62
  ```tsx
63
- // React: render <Markup /> once near the root. Add 'use client' on Next.js App Router.
63
+ // React: render <Markup /> once near the root. Shown for Vite, whose templates
64
+ // already carry this reference in src/vite-env.d.ts. On Next.js App Router, add
65
+ // 'use client' and read process.env.NEXT_PUBLIC_MARKUP_API_URL / _API_KEY instead.
66
+ /// <reference types="vite/client" />
64
67
  import { useMarkup } from '@pixelmatters/markup/react'
65
68
 
66
69
  export function Markup() {
@@ -168,7 +171,7 @@ Optional, and worth suggesting on a component-based app:
168
171
 
169
172
  ## Mentions & inbox
170
173
 
171
- Typing `@` in a composer opens a picker of project members and inserts a chip, and the stored `@[Display Name](userId)` form never reaches the screen. `↑`/`↓` move, `enter` or `tab` picks, `esc` dismisses. It works for anonymous visitors too; the member list is fetched with the API key when the visitor first starts a comment or opens a thread, not on page load, and a failed fetch degrades to "no picker, no chips" rather than blocking the widget.
174
+ Typing `@` in a composer opens a picker of project members and inserts a chip, and the stored form, `@[Display Name]` followed by the member's id in parentheses, never reaches the screen. `↑`/`↓` move, `enter` or `tab` picks, `esc` dismisses. It works for anonymous visitors too; the member list is fetched with the API key when the visitor first starts a comment or opens a thread, not on page load, and a failed fetch degrades to "no picker, no chips" rather than blocking the widget.
172
175
 
173
176
  Mentioned teammates get a notification. **Signed-in** users read those from the inbox button on the toolbar, which carries an unread badge; anonymous visitors don't get the button. A mention that doesn't highlight means nobody was notified: the target isn't a project member, has left, or is the author themselves.
174
177
 
@@ -216,7 +219,7 @@ Walk these in order when the widget is misbehaving:
216
219
  - **Don't wrap in a provider component.** `init` is the whole public API.
217
220
  - **Don't call `init` inside a route component.** Mount at the app root once.
218
221
  - **Don't hardcode the API key.** Use env vars so rotations don't require a code change.
219
- - **Don't ship CDN URLs without a version pin.** `@pixelmatters/markup@1.34.3`, not `@pixelmatters/markup`.
222
+ - **Don't ship CDN URLs without a version pin.** `@pixelmatters/markup@1.34.4`, not `@pixelmatters/markup`.
220
223
  - **Don't add `https://*.convex.site` to `connect-src` and assume that's the whole CSP story.** The deployment domain (`<your-deployment>.convex.site`) is what the widget hits over HTTP, and it must be listed explicitly. Live thread updates go to `wss://<your-deployment>.convex.cloud`, an origin the widget derives from `apiUrl`, so `connect-src` needs both. `img-src` needs `blob:`, `data:`, and the host serving profile pictures; `style-src` needs `'unsafe-inline'` only for Safari before 16.4 and Firefox before 101, where the widget falls back to a `<style>` element inside its shadow root; everywhere else it adopts a constructed stylesheet, which CSP doesn't block. Add `https://esm.sh` to `script-src` only if you took the CDN path.
221
224
 
222
225
  ## Versioning & releases