@pixelmatters/markup 1.32.2 → 1.32.3
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 +6 -6
- package/dist/widget.js +1 -1
- package/dist/widget.js.map +1 -1
- package/package.json +1 -1
- package/skills/install-markup-widget/SKILL.md +4 -4
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.32.
|
|
40
|
+
import { init } from 'https://esm.sh/@pixelmatters/markup@1.32.3'
|
|
41
41
|
// or
|
|
42
|
-
// import { init } from 'https://esm.run/@pixelmatters/markup@1.32.
|
|
42
|
+
// import { init } from 'https://esm.run/@pixelmatters/markup@1.32.3'
|
|
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.32.
|
|
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.32.3`).
|
|
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.32.
|
|
60
|
+
src="https://esm.sh/@pixelmatters/markup@1.32.3"
|
|
61
61
|
data-markup-widget="true"
|
|
62
62
|
data-api-url="https://your-deployment.convex.site"
|
|
63
63
|
data-api-key="markup_..."
|
|
@@ -501,7 +501,7 @@ For a `<script>` tag drop-in (no bundler), use the inline ESM form and **pin the
|
|
|
501
501
|
|
|
502
502
|
```html
|
|
503
503
|
<script type="module">
|
|
504
|
-
import { init } from 'https://esm.sh/@pixelmatters/markup@1.32.
|
|
504
|
+
import { init } from 'https://esm.sh/@pixelmatters/markup@1.32.3'
|
|
505
505
|
|
|
506
506
|
init({
|
|
507
507
|
apiUrl: '...',
|
|
@@ -517,7 +517,7 @@ If inline JS is disallowed (some CMS / page-builder editors), use the auto-init
|
|
|
517
517
|
```html
|
|
518
518
|
<script
|
|
519
519
|
type="module"
|
|
520
|
-
src="https://esm.sh/@pixelmatters/markup@1.32.
|
|
520
|
+
src="https://esm.sh/@pixelmatters/markup@1.32.3"
|
|
521
521
|
data-markup-widget="true"
|
|
522
522
|
data-api-url="..."
|
|
523
523
|
data-api-key="..."
|
package/dist/widget.js
CHANGED
|
@@ -9,5 +9,5 @@ var e=1e4,t=null,n=[],r=null,i=`init`,a,o=s();function s(){return typeof crypto<
|
|
|
9
9
|
`),`## Comments`,...r].join(`
|
|
10
10
|
|
|
11
11
|
`)}function Fl(e){return JSON.stringify(e).replace(Il,e=>`\\u${e.charCodeAt(0).toString(16).padStart(4,`0`)}`)}var Il=/[\u0080-\u009f\u2028\u2029]/g,Ll=/\r\n|\r|\n|\u0085|\u2028|\u2029/;function Rl(e){return e.split(Ll).map(e=>`> ${e}`).join(`
|
|
12
|
-
`)}function zl(e){return Ws(e).map(e=>e.type===`mention`?`@${e.name}`:e.value).join(``)}var Bl=[],Vl=[`\u{1F44D}`,`\u2764\uFE0F`,`\u{1F389}`,`\u{1F62E}`,`\u{1F604}`,`\u2753`],Hl=Dn({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,draft:t.body})},"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,draft:t.body}),dismiss:()=>({kind:`none`})},"reaction-picker":{"toggle-reaction-picker":(e,t)=>e.commentId===t.commentId?{kind:`none`}:e,dismiss:()=>({kind:`none`})},editing:{"update-draft":(e,t)=>({...e,draft:t.draft}),dismiss:()=>({kind:`none`})}}),Ul=80,Wl=2400;function Gl({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=Bl,onAuthor:y,onSignIn:b,onSignOut:x,onClose:S,onReply:C,onEditComment:w,onDeleteComment:T,onToggleReaction:E,onResolve:D,onDelete:O}){let k=J(null),A=J(null),j=J(null),[ee,M]=G(!1),N=J(null),[P,F]=An(Hl,{kind:`none`}),I=Ln(P.kind===`none`||P.kind===`editing`?null:P,120),L=I?.value??null,te=I?.isLeaving??!1,ne=L?.kind===`thread-menu`?L:null,[R,re]=G(null),{onPointerDown:ie,isDragging:ae}=fc({targetRef:k,shouldStart:e=>!e.target?.closest(`button, a, input, textarea, select`),onMove:re});hc(k,!_);let oe=e.resolvedAt!=null,z=It(()=>e.comments.filter(e=>!e.deleted),[e.comments]);K(()=>{if(P.kind===`none`||P.kind===`editing`)return;function e(e){let t=N.current;t&&!e.composedPath().includes(t)&&F({type:`dismiss`})}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[P.kind,F]),K(()=>{if(P.kind!==`editing`)return;let t=e.comments.find(e=>e._id===P.commentId);(!t||t.deleted)&&F({type:`dismiss`})},[e.comments,P,F]);let B=J(null);K(()=>{B.current??=z.at(-1)?.createdAt??0},[z]);let se=e=>!e.fromDashboard&&o!=null&&e.authorClientId===o;yl(A,P.kind!==`none`&&P.kind!==`editing`);let[ce,le]=G(!1),ue=Y(()=>{let e=A.current;e&&le(e.scrollHeight-e.scrollTop-e.clientHeight>Ul)},[]),de=Y(e=>{let t=A.current;t?.scrollTo({top:t.scrollHeight,behavior:Fn()?`auto`:e})},[]),[fe,pe]=G(null);K(()=>{if(!fe)return;let e=setTimeout(()=>pe(null),Wl);return()=>clearTimeout(e)},[fe]);let me=z.at(-1),he=me?._id,ge=me!=null&&se(me),_e=J(!r),ve=J(!0);K(()=>{let e=A.current;e&&(ve.current?(ve.current=!1,_e.current&&(e.scrollTop=e.scrollHeight)):ge?de(`smooth`):e.scrollHeight-e.scrollTop-e.clientHeight<Ul&&(e.scrollTop=e.scrollHeight),ue())},[he,ge,de,ue]),K(()=>{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),pe(r)}ue()},[r,ue]);let ye=J(null);q(()=>{let e=k.current;if(e&&typeof e.showPopover==`function`)try{_?(re(e=>e??ye.current),e.matches(`:popover-open`)&&e.hidePopover()):e.matches(`:popover-open`)||e.showPopover()}catch{}},[_]),q(()=>{let e=k.current;e&&!_&&R==null&&(ye.current=rl(e)??ye.current)}),il(k,ye,!_&&R==null);let be=J(_);be.current=_,q(()=>{let e=k.current;if(!e)return;function t(e){e.newState===`closed`&&!be.current&&S()}return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[S]),n.value;let xe=t.get(e._id)??bs({anchorX:e.anchorX,anchorY:e.anchorY,anchorSelector:e.anchorSelector,anchorText:e.anchorText,anchorOffsetX:e.anchorOffsetX,anchorOffsetY:e.anchorOffsetY}),Se={left:Yl(xe.pageX-window.scrollX+16,12,window.innerWidth-320-12),top:Yl(xe.pageY-window.scrollY-16,12,window.innerHeight-200)};return $(`div`,{ref:k,id:_?void 0:`markup-thread-popover`,class:Q(`markup-popover`,R&&`is-floating`,ae&&`is-dragging`,g&&`is-hud-hidden`,_&&`is-leaving`),popover:`auto`,style:{"--markup-pop-x":`${R?.left??Se.left}px`,"--markup-pop-y":`${R?.top??Se.top}px`},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:z.length===1?`1 comment`:`${z.length} comments`}),$(`div`,{class:`markup-popover-header-actions`,children:[$(`div`,{class:`markup-thread-menu`,ref:e=>{P.kind===`thread-menu`&&(N.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,ne!=null&&`is-open`),title:`More options`,onClick:()=>F({type:`toggle-thread-menu`}),children:$(xo,{size:16})}),ne?$(`div`,{class:Q(`markup-thread-menu-list`,te&&`is-leaving`),inert:te||void 0,children:[$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{let t=ut(e.url,e._id);t&&(navigator.clipboard.writeText(t).catch(()=>{}),f(`thread_copied`,{format:`link`})),F({type:`dismiss`})},children:`Copy link`}),c?$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{navigator.clipboard.writeText(Pl(e)).catch(()=>{}),f(`thread_copied`,{format:`agent`}),F({type:`dismiss`})},children:`Copy for agent`}):null,d?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,ne.confirmDelete&&`is-danger`),disabled:m,onClick:()=>{P.kind===`thread-menu`&&(P.confirmDelete?(F({type:`dismiss`}),O()):F({type:`arm-thread-delete`}))},children:ne.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:$(So,{size:16})}):null,$(`button`,{type:`button`,class:`markup-icon-btn`,title:$a(`Close thread`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:S,children:$(_o,{size:16})})]})]}),$(`div`,{class:`markup-comments-frame`,children:[$(`ol`,{ref:A,class:`markup-comments markup-scroll-fade`,"aria-label":`Comments`,tabIndex:-1,onScroll:ue,children:z.map((t,n)=>{let r=se(t),i=n===0,a=r&&!oe&&!t.deleted,o=r&&!oe&&!t.deleted&&!i,c=P.kind===`editing`&&P.commentId===t._id,l=(a||o)&&!c&&!t.deleted,u=L?.kind===`comment-menu`&&L.commentId===t._id?L:null,d=L?.kind===`reaction-picker`&&L.commentId===t._id?L:null,f=u!=null,p=u?.confirmDelete??!1,h=d!=null,g=d?.direction??`down`,_=u?.direction??`down`;return $(`li`,{"data-comment-id":t._id,class:Q(`markup-comment`,B.current!=null&&t.createdAt>B.current&&`is-new`,fe===t._id&&`is-highlighted`),children:[$(Xl,{name:t.authorName,image:t.authorImage,tone:Ql(t.authorClientId??t.authorName)}),$(`div`,{class:`markup-comment-meta`,children:[$(`span`,{class:`markup-comment-author`,children:t.authorName}),t.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:$(zo,{size:11})}):null,$(vl,{class:`markup-comment-time`,at:t.createdAt}),t.editedAt==null?null:$(`time`,{class:`markup-comment-edited`,datetime:new Date(t.editedAt).toISOString(),title:ul(t.editedAt),children:`edited`}),$(`div`,{class:`markup-thread-actions`,children:[!oe&&!c?$(Kl,{comment:t,pickerOpen:h,pickerLeaving:h&&te,pickerDirection:g,pickerSide:z.length===1,pickerRef:e=>{h&&(N.current=e)},onPickerClick:e=>{if(h){F({type:`toggle-reaction-picker`,commentId:t._id,direction:`down`});return}if(z.length===1){F({type:`toggle-reaction-picker`,commentId:t._id,direction:`down`});return}let n=e.currentTarget.getBoundingClientRect(),r=A.current?.getBoundingClientRect(),i=r?r.bottom-n.bottom:1/0;F({type:`toggle-reaction-picker`,commentId:t._id,direction:i<44?`up`:`down`})},onPickerSelect:e=>{F({type:`dismiss`}),E(t._id,e)}}):null,l?$(`div`,{class:Q(`markup-thread-menu markup-comment-menu`,f&&`is-open`,f&&_===`up`&&`is-up`,z.length===1&&`is-side`),ref:e=>{f&&(N.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,f&&`is-open`),title:`More options`,onClick:e=>{if(f){F({type:`toggle-comment-menu`,commentId:t._id,direction:`down`});return}if(z.length===1){F({type:`toggle-comment-menu`,commentId:t._id,direction:`down`});return}let n=e.currentTarget.getBoundingClientRect(),r=A.current?.getBoundingClientRect(),i=(+!!a+ +!!o)*32+8+6,s=r?r.bottom-n.bottom:1/0;F({type:`toggle-comment-menu`,commentId:t._id,direction:s<i?`up`:`down`})},children:$(xo,{size:16})}),f?$(`div`,{class:Q(`markup-thread-menu-list`,te&&`is-leaving`),inert:te||void 0,children:[a?$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{F({type:`start-edit`,commentId:t._id,body:t.body})},children:`Edit`}):null,o?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,p&&`is-danger`),onClick:()=>{P.kind===`comment-menu`&&(P.confirmDelete?(F({type:`dismiss`}),T(t._id)):F({type:`arm-comment-delete`}))},children:p?`Confirm delete`:`Delete\u2026`}):null]}):null]}):null]})]}),c&&P.kind===`editing`?$(`form`,{class:`markup-comment-edit-form`,onSubmit:async e=>{if(e.preventDefault(),P.kind!==`editing`)return;let n=P.draft.trim();if(!n||n===t.body){F({type:`dismiss`});return}try{await w(t._id,n),F({type:`dismiss`})}catch{}},children:[$($c,{class:`markup-comment-edit-input`,label:`Edit comment`,value:P.draft,onChange:e=>F({type:`update-draft`,draft:e}),onKeyDown:e=>{vc(e,`mod-enter`,to())&&(e.preventDefault(),e.target.closest(`form`)?.requestSubmit())},members:v,autoFocus:!0,disabled:m}),$(`div`,{class:`markup-comment-edit-actions`,children:[$(`button`,{type:`button`,class:`markup-btn markup-btn-ghost`,onClick:()=>F({type:`dismiss`}),disabled:m,children:`Cancel`}),$(`button`,{type:`submit`,class:`markup-btn markup-btn-primary`,disabled:m||P.draft.trim().length===0,children:`Save`})]})]}):$(qc,{body:t.body,mentions:t.mentions,viewerUserId:s}),n===0&&e.screenshotUrl?$(`button`,{type:`button`,class:`markup-comment-screenshot`,onClick:()=>{M(!0),j.current?.showModal()},children:$(`img`,{src:e.thumbnailUrl??e.screenshotUrl,alt:`Screenshot`})}):null,!c&&t.reactions.length>0?$(ql,{comment:t,isResolved:oe,onToggle:e=>E(t._id,e)}):null]},t._id)})}),ce?$(`button`,{type:`button`,class:`markup-jump-latest`,"aria-label":`Jump to latest comment`,title:`Jump to latest comment`,onClick:e=>{de(`smooth`),e.detail===0&&A.current?.focus({preventScroll:!0})},children:$(vo,{size:16})}):null]}),e.screenshotUrl?$(`dialog`,{ref:j,class:`markup-lightbox`,onClick:()=>j.current?.close(),onClose:()=>M(!1),children:[$(`button`,{type:`button`,class:`markup-lightbox-close markup-icon-btn`,"aria-label":`Close screenshot`,title:$a(`Close screenshot`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:e=>{e.stopPropagation(),j.current?.close()},children:$(_o,{size:16})}),ee?$(`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]}),$(nl,{label:`Reply`,placeholder:`Write a reply\u2026`,submitLabel:`Reply`,initialFocus:!1,isPending:m,error:h,onSubmit:C,members:v,sendKey:`enter`})]}):$(_c,{mode:a,isPending:m,isConnecting:l,isSigningIn:u,onSubmit:y,onCancel:S,onSignIn:b,onSignOut:x})]})}function Kl({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:$(To,{size:16})}),t?$(`div`,{class:Q(`markup-reaction-picker`,n&&`is-leaving`),role:`menu`,inert:n||void 0,children:Vl.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 ql({comment:e,isResolved:t,onToggle:n}){return $(`div`,{class:`markup-reactions`,children:e.reactions.map(e=>{let r=Jl(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})]},e.emoji)})})}function Jl(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 Yl(e,t,n){return Math.max(t,Math.min(n,e))}function Xl({name:e,image:t,tone:n}){let[r,i]=G(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:Zl(e)})})}function Zl(e){let t=e.trim();if(!t)return`??`;let n=t.split(/\s+/).filter(Boolean),r=n[0]??``;if(n.length===1)return r.slice(0,2).toUpperCase();let i=n[n.length-1]??``;return((r[0]??``)+(i[0]??``)).toUpperCase()}function Ql(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 $l(e){e.stopPropagation()}function eu({isActive:e,onToggle:t,onHide:n,position:r=`bottom-right`,unreadCount:i=0,showInbox:a=!1,onOpenInbox:o,inboxOpen:s=!1,pinsVisible:c=!0,onTogglePins:l,identityButton:u,overflowButton:d,isLeaving:f=!1}){let p=J(0);i>0&&(p.current=i);let m=J(null);q(()=>{let e=m.current;return e?sc(e):void 0},[]);let h=r===`bottom-left`?`markup-toolbar-left`:r===`bottom-center`?`markup-toolbar-center`:`markup-toolbar-right`;function g(e){if(e.preventDefault(),e.stopPropagation(),(e.metaKey||e.ctrlKey)&&n){n();return}t()}return $(`div`,{ref:m,class:Q(`markup-toolbar`,h,f&&`is-leaving`),role:`toolbar`,"aria-label":`Markup feedback toolbar`,"aria-hidden":f,inert:f?``:void 0,onPointerDown:$l,onMouseDown:$l,onPointerUp:$l,onMouseUp:$l,children:[$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`comment`,"data-armed":e?`true`:void 0,title:e?$a(`Cancel placing markup`,[`Esc`]):$a(`Leave a markup`,[`C`]),"aria-keyshortcuts":e?`Escape`:`C`,"aria-pressed":e,onClick:g,children:$(e?_o:Eo,{size:16})}),a?$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`inbox`,"data-on":s?`true`:void 0,title:i>0?`Inbox, ${i} unread`:`Inbox`,"aria-pressed":s,onClick:e=>{e.preventDefault(),e.stopPropagation(),o?.()},children:[$(Do,{size:16}),$(`span`,{class:`markup-tb-badge`,"data-unread":i>0?`true`:`false`,"aria-hidden":`true`,children:p.current>9?`9+`:p.current})]}):null,l?$(R,{children:[$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}),$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`pins`,"aria-label":c?`Hide pins`:`Show pins`,"aria-pressed":!c,title:c?`Hide pins`:`Show pins`,onClick:e=>{e.preventDefault(),e.stopPropagation(),l()},children:$(c?Oo:ko,{size:16})})]}):null,u||d?$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}):null,u,d,d?null:$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`overflow`,"aria-label":`More options`,disabled:!0,children:$(Ao,{size:16})})]})}var tu=[],nu=[{key:`toolbar`}],ru=[];function iu({store:e,apiUrl:t,apiKey:n,position:r=`bottom-right`,screenshots:i,dashboardUrl:a,routeParams:o=tu,isAnalyticsEnabled:s=!0}){let{api:c,sendIdentity:l,patchThreads:u}=e,p=e.route.value,[m,h]=G(()=>tt(o)),{threads:g,isLoaded:_}=$s(e.threadSnapshot.value,p),v=e.identity.value;d(v.kind);let[y,b]=G(null);K(()=>{let e=!1;return Xn(t,n).then(t=>{e||b(t)}),()=>{e=!0}},[t,n]);let[x,S]=G(r),[C,w]=G(!0),[T,E]=G(!1),[D,O]=G(!0),k=e.showResolved.value,[A,j]=G(null),ee=Y(()=>j(null),[]),[M,N]=An(uo,{kind:`idle`}),[P,F]=G([]);K(()=>{let e=!1;return c.listMembers().then(t=>{e||F(t.members)}).catch(()=>{}),()=>{e=!0}},[c]);let I=Mn(),L=Mn(),te=Mn(),{run:ne}=I,{run:re}=L,{run:ie}=te,ae=te.isPending,[oe,z]=An(ro,{kind:`visible`}),B=oe.kind!==`visible`,se=J(B);se.current=B;let ce=Y(e=>{se.current||f(`hud_hidden`,{trigger:e}),z({type:`hide-with-toast`})},[z]),[le]=G(()=>rn(0)),[ue]=G(()=>new Map),de=J(null),fe=We(v),pe=v.kind===`verified`,me=v.kind===`unresolved`||v.kind===`recovering`,he=Ue(v),ge=He(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}=Ys({api:c,identity:v,mode:M,route:p,canComment:zn(_e,v.kind),patchThreads:u,sendMode:N}),Ae=be??I.error??xe,je=Bn({access:_e,identityKind:v.kind,hasAuthorName:fe!=null,refusal:ve});K(()=>e.onThreadsResubscribed(Se),[e,Se]);let Me=J(!1);K(()=>{if(Me.current||!_)return;let e=it();e!==null&&(g.find(t=>t._id===e)&&N({type:`open-thread`,threadId:e,commentId:at()??void 0}),ct()),Me.current=!0},[g,_,N]),K(()=>rr(()=>{e.route.value=$e(o),h(tt(o))}),[e,o]),K(()=>{function e(e){e.key===`.`&&(e.metaKey||e.ctrlKey)&&(e.altKey||e.shiftKey||(e.preventDefault(),se.current||f(`hud_hidden`,{trigger:`shortcut`}),z({type:`toggle`})))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[z]),K(()=>{B&&j(null)},[B]),K(()=>{if(oe.kind!==`hidden-with-toast`)return;let e=window.setTimeout(()=>z({type:`dismiss-toast`}),5e3);return()=>window.clearTimeout(e)},[oe.kind,z]);let V=J(!1),Ne=Y(()=>{V.current&&(M.kind===`placing`||M.kind===`composing-new`)&&(V.current=!1,f(`comment_abandoned`,{stage:M.kind===`placing`?`placing`:`composing`}))},[M.kind]),Pe=Y(e=>{Se(),Ne(),f(`comment_started`,{trigger:e}),V.current=!0,N({type:`start-placing`})},[Se,N,Ne]);K(()=>{function e(e){e.key===`c`&&(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||M.kind===`idle`&&(B||so()||(e.preventDefault(),Pe(`shortcut`))))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[M.kind,B,Pe]);let Fe=Y(()=>{Ne(),N({type:`cancel`}),Se()},[Se,N,Ne]),Ie=J(0),Le=Y((e,t,n)=>{let r=t+window.scrollX,a=n+window.scrollY,o=++Ie.current,s=i?.enabled!==!1&&D;if(f(`pin_placed`,{hasSelector:e.anchorSelector!=null,hasSourceAttribute:e.anchorSource!=null,isCapturing:s,prompt:je??`composer`}),N({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};Da(c,{x:t,y:n},l).then(e=>{N({type:`capture-done`,captureToken:o,result:e}),f(`screenshot_captured`,{ok:e!=null})})},[i,D,je,N]),Re=Y((e,t)=>{l({type:`author-set`,name:e,email:t})},[l]),ze=I.isPending,Be=Y(async()=>{f(`sign_in_started`),await ne(async()=>{try{let e=io(await ur({apiUrl:t,apiKey:n,useCookies:y===!0}));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:lr(e)}),e}})},[t,n,y,ne,l]),Ve=Y(t=>{if(e.markRead(t),g.some(e=>e._id===t.threadId))Ne(),N({type:`open-thread`,threadId:t.threadId,commentId:t.commentId});else{let e=ut(t.threadUrl,t.threadId,t.commentId);e&&(window.location.href=e)}},[e,N,g,Ne]),[Ge,Ke]=G(null);K(()=>{if(Ge===null)return;let e=window.setTimeout(()=>Ke(null),5e3);return()=>window.clearTimeout(e)},[Ge]);let qe=Y(async()=>await re(async()=>(await c.forgetMe(),Ne(),N({type:`cancel`}),l({type:`forget-me`}),Ke(`forgotten`),!0))===!0,[c,re,l,N,Ne]),Je=Y(async()=>{await ie(async()=>{await c.signOut(),Ne(),N({type:`cancel`}),l({type:`signed-out`}),Ke(`signed-out`)})},[c,ie,l,N,Ne]),Ye=M.kind===`thread`?g.find(e=>e._id===M.threadId)??null:null,Xe=he!=null&&he===Ye?.authorClientId,Ze=e.canModerate.value,Qe=Xe||Ze,et=M.kind===`thread`?M.threadId:null,nt=It(()=>new Map(g.map(e=>[e._id,Bs(e,m,o)])),[g,m,o]),rt=It(()=>T?g.filter(e=>e._id===et||nt.get(e._id)?.otherLocation===void 0):g,[g,T,et,nt]),ot=C&&M.kind!==`placing`?g.length-rt.length:0,st=M.kind!==`placing`&&!B&&C,lt=In(!B||M.kind===`placing`||M.kind===`composing-new`?nu:ru,e=>e.key,160),dt=[];oe.kind===`hidden-with-toast`&&dt.push({key:`hud-hidden`,body:$(R,{children:[`Markup hidden \u2014 press `,$(`kbd`,{class:`markup-kbd`,children:Qa().mod}),$(`kbd`,{class:`markup-kbd`,children:`.`}),` or refresh to bring it back.`]})}),Ge===`forgotten`&&dt.push({key:`forget-me`,body:`Forgotten on this site \u2014 your name and email were cleared.`}),Ge===`signed-out`&&dt.push({key:`signed-out`,body:`Signed out \u2014 commenting anonymously again.`});let ft=In(dt,e=>e.key,220),pt=In(M.kind===`thread`&&Ye?[Ye]:Zs,e=>e._id,160),H=Ln(M.kind===`composing-new`?M:null,160),mt=Ln(A,140),ht=Y((e,t)=>{Ne(),f(`thread_opened`,{commentCount:t}),N({type:`open-thread`,threadId:e})},[N,Ne]);return K(()=>{M.kind===`thread`&&Ye==null&&Fe()},[M,Ye,Fe]),$(`div`,{class:`markup-root`,ref:de,style:fo,children:[$(Hs,{threads:g,scopedThreads:rt,pinLabels:nt,viewerDetail:m,routeParams:o,shouldShowPins:st,activeThreadId:et,composer:H?{pageX:H.value.pageX,pageY:H.value.pageY,isLeaving:H.isLeaving}:null,isPopoverOpen:H!=null||pt.length>0,isPopoverTracked:H!=null||pt.length>0&&!B,layoutTick:le,anchorMemory:ue,onOpenThread:ht}),M.kind===`placing`?$(Al,{onPlace:Le,onCancel:Fe}):null,pt.map(({key:e,value:t,isLeaving:n})=>$(Gl,{thread:t,anchorMemory:ue,layoutTick:le,focusCommentId:M.kind===`thread`&&M.threadId===t._id?M.commentId:void 0,isLeaving:n,authorName:fe,authorPromptMode:je,currentClientId:he??null,viewerUserId:ge,isVerified:pe,isIdentityResolving:me,isSigningIn:ze,canDelete:Qe,canModerate:Ze,isPending:ye,error:Ae,isHidden:B,members:P,onAuthor:Re,onSignIn:Be,onSignOut:Je,onClose:Fe,onReply:Ee,onEditComment:De,onDeleteComment:Oe,onToggleReaction:ke,onDelete:we,onResolve:Te},e)),H?$(sl,{isLeaving:H.isLeaving,pageX:H.value.pageX,pageY:H.value.pageY,layoutTick:le,authorName:fe,authorPromptMode:je,canModerate:Ze,isIdentityResolving:me,isSigningIn:ze,isPending:ye,error:Ae,screenshot:H.value.screenshot,isScreenshotCapturing:H.value.isScreenshotCapturing,screenshotFailed:H.value.screenshotFailed,screenshotRedactedCount:H.value.screenshotRedactedCount,screenshotRedactedSelectors:H.value.screenshotRedactedSelectors,members:P,onAuthor:Re,onSignIn:Be,onSignOut:Je,onSubmit:Ce,onClose:Fe}):null,lt.map(n=>$(eu,{isLeaving:n.isLeaving,isActive:M.kind===`placing`,onToggle:()=>M.kind===`placing`?Fe():Pe(`toolbar`),onHide:()=>ce(`toolbar`),position:x,showInbox:pe,unreadCount:pe?e.unreadCount.value:0,inboxOpen:A===`inbox`,onOpenInbox:()=>{let t=A===`inbox`?null:`inbox`;j(t),t&&(f(`notifications_opened`,{unreadCount:e.unreadCount.peek()}),e.refreshNotifications())},pinsVisible:C,onTogglePins:()=>{f(`setting_changed`,{setting:`pins`,value:!C}),w(!C)},identityButton:$(uc,{identity:v,position:x,isSigningIn:ze,isSigningOut:ae,dashboardUrl:a,commentAccess:_e,onSignIn:Be,onSignOut:Je,onForgetMe:qe}),overflowButton:$(Dl,{position:x,onSetPosition:e=>{e!==x&&f(`setting_changed`,{setting:`position`,value:e}),S(e)},autoCapture:D&&i?.enabled!==!1,autoCaptureLocked:i?.enabled===!1,onToggleAutoCapture:()=>{f(`setting_changed`,{setting:`auto_capture`,value:!D}),O(!D)},isUrlScoped:T,hiddenByUrlScope:ot,onToggleUrlScope:()=>{f(`setting_changed`,{setting:`url_scope`,value:!T}),E(!T)},showResolved:k,onToggleShowResolved:()=>{f(`setting_changed`,{setting:`show_resolved`,value:!k}),e.showResolved.value=!k},onHideForSession:()=>ce(`menu`),isAnalyticsEnabled:s,identity:v,apiUrl:t,commentAccess:_e,isForgettingMe:L.isPending,forgetMeError:L.error,onForgetMe:qe,version:`1.32.2`,dashboardUrl:a})},n.key)),mt?.value===`inbox`&&pe?$(kl,{kind:`inbox`,label:`Inbox`,position:x,ignoreToolbarKind:`inbox`,isLeaving:mt.isLeaving,onClose:ee,children:$(bl,{state:e.inbox.value,viewerUserId:ge,isMarkingAll:e.isMarkingAllRead.value,onBack:ee,onItemClick:e=>{ee(),Ve(e)},onMarkAllRead:e.markAllRead})}):null,ft.map(e=>$(tc,{position:x,isLeaving:e.isLeaving,children:e.value.body},e.key))]})}var au=Dn({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`})}}),ou=Dn({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})}}),su=`anon`;function cu(e){return e.kind===`verified`?e.identity.clientId:su}function lu(e){return e.kind===`verified`&&e.identity.tokenExpiresAt>Date.now()?e.identity.clientId:su}function uu(e,t){return e.kind===`active`&&e.mintedAs===t}var du=18e5,fu=6e4,pu=6e4;function mu(e){let t=!1,n=null;async function r(){let i;try{i=await e.mint()}catch(e){if(t)return;e?.name!==`TypeError`&&V(e,{context:`subscription-token-refresh`}),n=setTimeout(r,pu);return}if(t)return;let a=Math.max(fu,i.expiresAt-Date.now()-du);n=setTimeout(r,a);try{e.onIssued(i)}catch(e){V(e,{context:`subscription-token-issued`})}}return r(),()=>{t=!0,n&&clearTimeout(n)}}var hu=`1.38.0`,gu=100,_u=1e3,vu=3e3,yu=16e3,bu=6e4,xu=5,Su=20,Cu=6e4,wu=0,Tu=/^(SubscriptionsWorkerFullError|TooManyConcurrentRequests|CommitterFullError|AwsTooManyRequestsException|ExecuteFullError|SystemTimeoutError|ExpiredInQueue|VectorIndexTooLarge|SearchIndexTooLarge|TooManyWritesInTimePeriod)/,Eu=`AAAAAAAAAAA=`,Du=class{#e;#t=Nu();#n=new Map;#r=0;#i=0;#a={querySet:0,identity:0,ts:Eu};#o;#s=null;#c=null;#l=!1;#u=!1;#d=0;#f=`InitialConnect`;#p=0;#m=0;#h=0;#g=0;#_=new Set;#v;#y;#b=null;constructor(e){this.#e=`${e.replace(/^http/,`ws`)}/api/${hu}/sync`,window.addEventListener(`online`,this.#S),document.addEventListener(`securitypolicyviolation`,this.#x),this.#C()}onUpdate(e,t,n){let r=this.#r++,i={udfPath:e,args:t,onValue:n};return this.#n.set(r,i),this.#O([Ou(r,i)]),()=>{this.#_.delete(r),this.#n.delete(r)&&this.#O([{type:`Remove`,queryId:r}])}}close(){this.#u=!0,clearTimeout(this.#v),clearTimeout(this.#y),window.removeEventListener(`online`,this.#S),document.removeEventListener(`securitypolicyviolation`,this.#x),this.#P()}#x=e=>{e.disposition!==`report`&&(e.blockedURI===this.#e||e.blockedURI===new URL(this.#e).origin)&&(V(Error(`Convex sync: blocked by ${e.effectiveDirective}`),{context:`sync-connect`}),this.close())};#S=()=>{this.#v!==void 0&&(clearTimeout(this.#v),this.#C())};#C(){if(this.#v=void 0,this.#u)return;let e;try{e=new WebSocket(this.#e)}catch(e){V(e,{context:`sync-connect`}),this.close();return}let t=new AbortController;this.#s=e,this.#c=t,this.#N();let n=(n,r)=>e.addEventListener(n,t=>{this.#s===e&&r(t)},{signal:t.signal});n(`open`,()=>{this.#l=!0,this.#_=new Set(this.#n.keys()),this.#N(),this.#k({type:`Connect`,sessionId:this.#t,connectionCount:this.#d,lastCloseReason:this.#f,maxObservedTimestamp:this.#o,clientTs:Date.now()}),this.#a={querySet:0,identity:0,ts:Eu},this.#i=1,this.#k({type:`ModifyQuerySet`,baseVersion:0,newVersion:1,modifications:[...this.#n].map(([e,t])=>Ou(e,t))}),this.#d+=1,this.#f=null}),n(`message`,e=>{this.#N();try{this.#w(JSON.parse(e.data))}catch(e){this.#E(e)}}),n(`close`,e=>{this.#f??=e.reason||`closed with code ${e.code}`,this.#s=null,this.#l=!1,this.#b=null,this.#M(this.#j(Tu.test(e.reason)?vu:_u))})}#w(e){if(e.type!==`Ping`){if(e.type===`TransitionChunk`){let t=this.#T(e);t&&this.#D(t);return}this.#b=null,e.type===`Transition`&&this.#D(e),e.type===`FatalError`&&(V(Error(`Convex sync: ${e.error}`),{context:`sync-fatal`}),this.close())}}#T(e){let t=this.#b??={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`);if(t.parts.push(e.chunk),t.parts.length<t.totalParts)return null;this.#b=null;let n=JSON.parse(t.parts.join(``));if(n.type!==`Transition`)throw Error(`Convex sync: chunks were not a Transition`);return n}#E(e){let t=Date.now();if(t-this.#g>=Cu&&(this.#m=0),this.#g=t,this.#m+=1,this.#h+=1,this.#m===1&&V(e,{context:`sync-message`}),this.#m>=xu||this.#h>=Su){V(Error(`Convex sync: stopped after ${this.#h} protocol errors`),{context:`sync-message`}),this.close();return}this.#f=`ClientError`,this.#P(),this.#M(Math.min(_u*2**(this.#m-1),yu))}#D(e){let t=this.#a,n=e.startVersion;if(n.querySet!==t.querySet||n.identity!==t.identity||ju(n.ts)!==ju(t.ts))throw Error(`Convex sync: Transition does not start where the last one ended`);this.#a=e.endVersion,(this.#o===void 0||ju(e.endVersion.ts)>ju(this.#o))&&(this.#o=e.endVersion.ts);for(let t of e.modifications){if(this.#u)return;this.#_.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{e.onValue(Mu(t.value??null))}catch(e){V(e,{context:`sync-callback`})}}this.#_.size===0&&(this.#p=0)}#O(e){if(!this.#l)return;let t=this.#i++;this.#k({type:`ModifyQuerySet`,baseVersion:t,newVersion:this.#i,modifications:e})}#k(e){try{this.#s?.send(JSON.stringify(e))}catch{this.#A(`FailedToSendMessage`)}}#A(e){this.#u||(this.#f=e,this.#P(),this.#M(this.#j(gu)))}#j(e){let t=Math.min(e*2**this.#p,yu);return this.#p+=1,t}#M(e){clearTimeout(this.#v),clearTimeout(this.#y),!this.#u&&(this.#v=setTimeout(()=>this.#C(),e*(.5+Math.random())))}#N(){clearTimeout(this.#y),this.#y=setTimeout(()=>this.#A(`InactiveServer`),bu)}#P(){let e=this.#s;this.#s=null,this.#l=!1,this.#b=null,e&&(this.#c?.abort(),e.readyState===wu?e.addEventListener(`open`,()=>e.close()):e.close())}};function Ou(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 ku(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 Au(e,t){let n=ku(e);if(n.byteLength!==8)throw Error(`Convex sync: malformed ${t}`);return n}function ju(e){return Au(e,`timestamp`).getBigUint64(0,!0)}function Mu(e){if(Array.isArray(e))return e.map(Mu);if(typeof e!=`object`||!e)return e;let t=Object.entries(e),[n]=t;if(t.length===1&&n&&[`$integer`,`$float`,`$bytes`].includes(n[0])){let[e,t]=n;if(typeof t!=`string`)throw Error(`Convex sync: malformed ${e}`);if(e===`$integer`)return Au(t,e).getBigInt64(0,!0);if(e===`$float`){let n=Au(t,e).getFloat64(0,!0);if(Number.isFinite(n)&&!Object.is(n,-0))throw Error(`Convex sync: malformed $float`);return n}return ku(t).buffer}return Object.fromEntries(t.map(([e,t])=>{if(e.startsWith(`$`))throw Error(`Convex sync: field ${e} starts with $`);return[e,Mu(t)]}))}function Nu(){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 Pu(e){try{let t={method:`POST`,headers:{"content-type":`application/json`,"x-markup-api-key":e.apiKey},signal:Kn(Gn,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`&&V(e,{context:`refresh-token`}),null}}var Fu=6e4,Iu=500;function Lu(e,{apiUrl:t,apiKey:n,onRefreshed:r,onFailure:i}){if(e.kind!==`verified`)return;let a=e.identity,{storage:o,refreshToken:s}=a,c=a.refreshTokenExpiresAt,l=a.tokenExpiresAt;if(c==null||o===`localStorage`&&s==null||o!==`cookies`&&o!==`localStorage`)return;let u=Date.now();if(c<=u){i();return}let d=Math.max(Iu,l-Fu-u),f=new AbortController,p=window.setTimeout(async()=>{let e=await Pu({apiUrl:t,apiKey:n,mode:o,refreshToken:s,signal:f.signal});if(!f.signal.aborted){if(!e){i();return}e.mode===`cookies`?r({...a,tokenExpiresAt:e.accessTokenExpiresAt,refreshTokenExpiresAt:e.refreshTokenExpiresAt}):r({...a,token:e.accessToken,tokenExpiresAt:e.accessTokenExpiresAt,refreshToken:e.refreshToken,refreshTokenExpiresAt:e.refreshTokenExpiresAt})}},d);return()=>{window.clearTimeout(p),f.abort()}}var Ru=`widget/queries:subscribeThreadsForRoute`,zu=`widget/queries:subscribeProjectSettings`,Bu=`widget/queries:subscribeUnreadCountForProject`,Vu=3e4,Hu=2**31-1;function Uu(e){return mn(()=>{try{return e()}catch(e){V(e,{context:`live-store`})}})}function Wu({apiUrl:e,apiKey:t,initialIdentity:n,initialRoute:r,createClient:i=e=>new Du(e)}){let a=e.replace(/\.convex\.site(\/.*)?$/,`.convex.cloud`);if(!/^https?:\/\//.test(a))throw Error(`Invalid apiUrl: ${e}`);let{state:o,send:s}=kn(oo,n.state),c=ln(()=>o.value.kind),l=ln(()=>Ue(o.value)),u=qn({apiUrl:e,apiKey:t,getToken:()=>{let e=o.peek();return e.kind!==`verified`||e.identity.token==null?null:{token:e.identity.token,expiresAt:e.identity.tokenExpiresAt}},getStorageMode:()=>{let e=o.peek();return e.kind===`verified`?e.identity.storage:null},getAnonToken:()=>{let e=o.peek();return e.kind===`anon`?e.identity.anonToken:null},onUnauthorized:()=>{s({type:`unauthorized`})}}),d=rn(r),f=rn(!1),p=rn(Qs(r)),m=rn(Rn),h=rn(!1),g=rn(0),{state:_,send:v}=kn(au,{kind:`idle`}),y=rn(!1),b=0,{state:x,send:S}=kn(ou,{kind:`idle`}),C=ln(()=>{let e=x.value;return e.kind===`active`?e.token:null}),w=ln(()=>uu(x.value,cu(o.value))),T=ln(()=>c.value===`verified`&&w.value&&h.value),E=rn(0),D=ln(()=>(E.value,lu(o.value))),O=new Set;function k(){let e=b;v({type:`fetch`}),u.listNotifications().then(t=>{b===e&&v({type:`loaded`,items:t.notifications})}).catch(t=>{b===e&&v({type:`failed`,error:t instanceof Error?t.message:`Failed to load.`})})}function A(e){b+=1,v({type:`patch`,update:e})}let j=rn(null),ee=[Uu(()=>{let e=o.value;if(e.kind!==`unresolved`&&e.kind!==`recovering`)return;let t=e.kind===`recovering`?e.preserved:n.preserved,r=!1,i=null,a=1e3;function c(){u.mintAnonIdentity().then(({clientId:e,token:n})=>{if(r)return;let i={clientId:e,anonToken:n,name:t.name,email:t.email};s({type:`mint-success`,identity:i})}).catch(()=>{r||(i=setTimeout(c,Math.min(a,Vu)),a=Math.min(a*2,Vu))})}return c(),()=>{r=!0,i&&clearTimeout(i)}}),Uu(()=>Lu(o.value,{apiUrl:e,apiKey:t,onRefreshed:e=>s({type:`signed-in`,identity:e}),onFailure:()=>s({type:`unauthorized`})})),Uu(()=>{E.value;let e=o.value;if(e.kind!==`verified`)return;let t=e.identity.tokenExpiresAt-Date.now();if(t<=0)return;let n=setTimeout(()=>{E.value+=1},Math.min(t,Hu));return()=>clearTimeout(n)}),Uu(()=>{let e=D.value;return mu({mint:()=>u.getSubscriptionToken(),onIssued:t=>S({type:`issued`,token:t.token,expiresAt:t.expiresAt,mintedAs:e})})}),Uu(()=>{C.value===null||j.peek()||(j.value=i(a))}),Uu(()=>{let e=d.value,t=C.value,n=l.value,r=f.value;p.peek().route!==e&&(p.value=Qs(e));let i=j.value;if(t&&i){for(let e of O)e();return i.onUpdate(Ru,{subscriptionToken:t,route:e,viewerClientId:n,includeResolved:r},t=>{t!==void 0&&(p.value={route:e,threads:t,isLoaded:!0})})}}),Uu(()=>{let e=C.value;h.value=!1;let t=j.value;if(e&&t)return t.onUpdate(zu,{subscriptionToken:e},e=>{let t=e;m.value=t?.commentAccess===`members`?`members`:Rn,h.value=t?.canModerate===!0})}),Uu(()=>{if(c.value!==`verified`||!w.value){g.value=0;return}let e=C.value,t=j.value;if(e&&t)return t.onUpdate(Bu,{subscriptionToken:e},e=>{e!==void 0&&(g.value=e.count,k())})}),Uu(()=>{c.value,l.value,b+=1,v({type:`reset`})})];return{api:u,identity:o,sendIdentity:s,route:d,showResolved:f,threadSnapshot:p,commentAccess:m,canModerate:T,unreadCount:g,inbox:_,isMarkingAllRead:y,refreshNotifications:k,patchThreads(e,t){p.value=ec(p.peek(),e,t)},markRead(e){e.readAt??(g.value=Math.max(0,g.peek()-1),A(t=>t.map(t=>t._id===e._id?{...t,readAt:Date.now()}:t)),u.markNotificationRead(e._id).catch(()=>{}))},markAllRead(){y.value=!0,g.value=0,A(e=>e.map(e=>e.readAt==null?{...e,readAt:Date.now()}:e)),u.markAllNotificationsRead().catch(()=>{}).finally(()=>{y.value=!1})},onThreadsResubscribed(e){return O.add(e),()=>O.delete(e)},dispose(){for(let e of ee)e();O.clear(),j.peek()?.close()}}}function Gu(e){function t(t){t.target===e&&t.stopImmediatePropagation()}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()}function i(e){e.stopPropagation()}let a={capture:!0};window.addEventListener(`focusin`,t,a),window.addEventListener(`focusout`,n,a),window.addEventListener(`wheel`,r,a),window.addEventListener(`touchmove`,r,a),e.addEventListener(`pointerdown`,i);let o=qu(e);return()=>{window.removeEventListener(`focusin`,t,a),window.removeEventListener(`focusout`,n,a),window.removeEventListener(`wheel`,r,a),window.removeEventListener(`touchmove`,r,a),e.removeEventListener(`pointerdown`,i),o()}}var Ku=[`aria-hidden`,`inert`];function qu(e){let t=()=>{for(let t of Ku)e.hasAttribute(t)&&e.removeAttribute(t)},n=new MutationObserver(t);return n.observe(e,{attributes:!0,attributeFilter:Ku}),t(),()=>n.disconnect()}function Ju(e,t){e.style.position=`fixed`,e.style.inset=`0`,e.style.zIndex=`2147483647`,e.style.pointerEvents=`none`,_t(e,t.theme??`auto`);let n=St(),r=Gu(e),i=e.attachShadow({mode:`open`}),a=document.createElement(`style`);a.textContent=Ce,i.appendChild(a);let o=document.createElement(`div`);o.className=`markup-shadow-root`,i.appendChild(o),Me({apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.32.2`}),c(t.analytics===!1?null:{apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.32.2`}),f(`widget_loaded`,{entry:u()});let{theme:s,analytics:l,...d}=t,p=null,m=setTimeout(()=>{try{p=Wu({apiUrl:t.apiUrl,apiKey:t.apiKey,initialIdentity:ze(),initialRoute:$e(t.routeParams??[])}),Se($(we,{onError:e=>V(e,{context:`render`}),children:$(iu,{...d,isAnalyticsEnabled:t.analytics!==!1,store:p})}),o)}catch(e){V(e,{context:`mount`})}},0);return()=>{clearTimeout(m),n(),r(),Me(null),c(null),Se(null,o),p?.dispose()}}var Yu=2e3,Xu=null,Zu=null,Qu=null,$u=null,ed=null,td=!1;function nd(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&&!td&&(td=!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(ed&&t===$u&&(Qu!==null||Zu?.isConnected===!0))return ed;id(),$u=t;let n=()=>{ed===n&&id()};ed=n;let r=()=>{if(Qu=null,!document.body)return;let t=document.createElement(`div`);t.id=`markup-widget`,document.body.appendChild(t),Zu=t,Xu=Ju(t,e)},i=()=>{Qu=rd(r)};return document.readyState===`loading`||!document.body?(Qu=()=>document.removeEventListener(`DOMContentLoaded`,i),document.addEventListener(`DOMContentLoaded`,i,{once:!0})):i(),n}function rd(e){if(typeof requestIdleCallback==`function`){let t=requestIdleCallback(e,{timeout:Yu});return()=>cancelIdleCallback(t)}let t=setTimeout(e,0);return()=>clearTimeout(t)}function id(){Qu&&=(Qu(),null),Xu&&=(Xu(),null),Zu?.parentNode&&Zu.parentNode.removeChild(Zu),Zu=null,$u=null,ed=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`),nd({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{id as destroy,nd as init,l as n,_ as t};
|
|
12
|
+
`)}function zl(e){return Ws(e).map(e=>e.type===`mention`?`@${e.name}`:e.value).join(``)}var Bl=[],Vl=[`\u{1F44D}`,`\u2764\uFE0F`,`\u{1F389}`,`\u{1F62E}`,`\u{1F604}`,`\u2753`],Hl=Dn({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,draft:t.body})},"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,draft:t.body}),dismiss:()=>({kind:`none`})},"reaction-picker":{"toggle-reaction-picker":(e,t)=>e.commentId===t.commentId?{kind:`none`}:e,dismiss:()=>({kind:`none`})},editing:{"update-draft":(e,t)=>({...e,draft:t.draft}),dismiss:()=>({kind:`none`})}}),Ul=80,Wl=2400;function Gl({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=Bl,onAuthor:y,onSignIn:b,onSignOut:x,onClose:S,onReply:C,onEditComment:w,onDeleteComment:T,onToggleReaction:E,onResolve:D,onDelete:O}){let k=J(null),A=J(null),j=J(null),[ee,M]=G(!1),N=J(null),[P,F]=An(Hl,{kind:`none`}),I=Ln(P.kind===`none`||P.kind===`editing`?null:P,120),L=I?.value??null,te=I?.isLeaving??!1,ne=L?.kind===`thread-menu`?L:null,[R,re]=G(null),{onPointerDown:ie,isDragging:ae}=fc({targetRef:k,shouldStart:e=>!e.target?.closest(`button, a, input, textarea, select`),onMove:re});hc(k,!_);let oe=e.resolvedAt!=null,z=It(()=>e.comments.filter(e=>!e.deleted),[e.comments]);K(()=>{if(P.kind===`none`||P.kind===`editing`)return;function e(e){let t=N.current;t&&!e.composedPath().includes(t)&&F({type:`dismiss`})}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[P.kind,F]),K(()=>{if(P.kind!==`editing`)return;let t=e.comments.find(e=>e._id===P.commentId);(!t||t.deleted)&&F({type:`dismiss`})},[e.comments,P,F]);let B=J(null);K(()=>{B.current??=z.at(-1)?.createdAt??0},[z]);let se=e=>!e.fromDashboard&&o!=null&&e.authorClientId===o;yl(A,P.kind!==`none`&&P.kind!==`editing`);let[ce,le]=G(!1),ue=Y(()=>{let e=A.current;e&&le(e.scrollHeight-e.scrollTop-e.clientHeight>Ul)},[]),de=Y(e=>{let t=A.current;t?.scrollTo({top:t.scrollHeight,behavior:Fn()?`auto`:e})},[]),[fe,pe]=G(null);K(()=>{if(!fe)return;let e=setTimeout(()=>pe(null),Wl);return()=>clearTimeout(e)},[fe]);let me=z.at(-1),he=me?._id,ge=me!=null&&se(me),_e=J(!r),ve=J(!0);K(()=>{let e=A.current;e&&(ve.current?(ve.current=!1,_e.current&&(e.scrollTop=e.scrollHeight)):ge?de(`smooth`):e.scrollHeight-e.scrollTop-e.clientHeight<Ul&&(e.scrollTop=e.scrollHeight),ue())},[he,ge,de,ue]),K(()=>{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),pe(r)}ue()},[r,ue]);let ye=J(null);q(()=>{let e=k.current;if(e&&typeof e.showPopover==`function`)try{_?(re(e=>e??ye.current),e.matches(`:popover-open`)&&e.hidePopover()):e.matches(`:popover-open`)||e.showPopover()}catch{}},[_]),q(()=>{let e=k.current;e&&!_&&R==null&&(ye.current=rl(e)??ye.current)}),il(k,ye,!_&&R==null);let be=J(_);be.current=_,q(()=>{let e=k.current;if(!e)return;function t(e){e.newState===`closed`&&!be.current&&S()}return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[S]),n.value;let xe=t.get(e._id)??bs({anchorX:e.anchorX,anchorY:e.anchorY,anchorSelector:e.anchorSelector,anchorText:e.anchorText,anchorOffsetX:e.anchorOffsetX,anchorOffsetY:e.anchorOffsetY}),Se={left:Yl(xe.pageX-window.scrollX+16,12,window.innerWidth-320-12),top:Yl(xe.pageY-window.scrollY-16,12,window.innerHeight-200)};return $(`div`,{ref:k,id:_?void 0:`markup-thread-popover`,class:Q(`markup-popover`,R&&`is-floating`,ae&&`is-dragging`,g&&`is-hud-hidden`,_&&`is-leaving`),popover:`auto`,style:{"--markup-pop-x":`${R?.left??Se.left}px`,"--markup-pop-y":`${R?.top??Se.top}px`},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:z.length===1?`1 comment`:`${z.length} comments`}),$(`div`,{class:`markup-popover-header-actions`,children:[$(`div`,{class:`markup-thread-menu`,ref:e=>{P.kind===`thread-menu`&&(N.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,ne!=null&&`is-open`),title:`More options`,onClick:()=>F({type:`toggle-thread-menu`}),children:$(xo,{size:16})}),ne?$(`div`,{class:Q(`markup-thread-menu-list`,te&&`is-leaving`),inert:te||void 0,children:[$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{let t=ut(e.url,e._id);t&&(navigator.clipboard.writeText(t).catch(()=>{}),f(`thread_copied`,{format:`link`})),F({type:`dismiss`})},children:`Copy link`}),c?$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{navigator.clipboard.writeText(Pl(e)).catch(()=>{}),f(`thread_copied`,{format:`agent`}),F({type:`dismiss`})},children:`Copy for agent`}):null,d?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,ne.confirmDelete&&`is-danger`),disabled:m,onClick:()=>{P.kind===`thread-menu`&&(P.confirmDelete?(F({type:`dismiss`}),O()):F({type:`arm-thread-delete`}))},children:ne.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:$(So,{size:16})}):null,$(`button`,{type:`button`,class:`markup-icon-btn`,title:$a(`Close thread`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:S,children:$(_o,{size:16})})]})]}),$(`div`,{class:`markup-comments-frame`,children:[$(`ol`,{ref:A,class:`markup-comments markup-scroll-fade`,"aria-label":`Comments`,tabIndex:-1,onScroll:ue,children:z.map((t,n)=>{let r=se(t),i=n===0,a=r&&!oe&&!t.deleted,o=r&&!oe&&!t.deleted&&!i,c=P.kind===`editing`&&P.commentId===t._id,l=(a||o)&&!c&&!t.deleted,u=L?.kind===`comment-menu`&&L.commentId===t._id?L:null,d=L?.kind===`reaction-picker`&&L.commentId===t._id?L:null,f=u!=null,p=u?.confirmDelete??!1,h=d!=null,g=d?.direction??`down`,_=u?.direction??`down`;return $(`li`,{"data-comment-id":t._id,class:Q(`markup-comment`,B.current!=null&&t.createdAt>B.current&&`is-new`,fe===t._id&&`is-highlighted`),children:[$(Xl,{name:t.authorName,image:t.authorImage,tone:Ql(t.authorClientId??t.authorName)}),$(`div`,{class:`markup-comment-meta`,children:[$(`span`,{class:`markup-comment-author`,children:t.authorName}),t.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:$(zo,{size:11})}):null,$(vl,{class:`markup-comment-time`,at:t.createdAt}),t.editedAt==null?null:$(`time`,{class:`markup-comment-edited`,datetime:new Date(t.editedAt).toISOString(),title:ul(t.editedAt),children:`edited`}),$(`div`,{class:`markup-thread-actions`,children:[!oe&&!c?$(Kl,{comment:t,pickerOpen:h,pickerLeaving:h&&te,pickerDirection:g,pickerSide:z.length===1,pickerRef:e=>{h&&(N.current=e)},onPickerClick:e=>{if(h){F({type:`toggle-reaction-picker`,commentId:t._id,direction:`down`});return}if(z.length===1){F({type:`toggle-reaction-picker`,commentId:t._id,direction:`down`});return}let n=e.currentTarget.getBoundingClientRect(),r=A.current?.getBoundingClientRect(),i=r?r.bottom-n.bottom:1/0;F({type:`toggle-reaction-picker`,commentId:t._id,direction:i<44?`up`:`down`})},onPickerSelect:e=>{F({type:`dismiss`}),E(t._id,e)}}):null,l?$(`div`,{class:Q(`markup-thread-menu markup-comment-menu`,f&&`is-open`,f&&_===`up`&&`is-up`,z.length===1&&`is-side`),ref:e=>{f&&(N.current=e)},children:[$(`button`,{type:`button`,class:Q(`markup-icon-btn`,f&&`is-open`),title:`More options`,onClick:e=>{if(f){F({type:`toggle-comment-menu`,commentId:t._id,direction:`down`});return}if(z.length===1){F({type:`toggle-comment-menu`,commentId:t._id,direction:`down`});return}let n=e.currentTarget.getBoundingClientRect(),r=A.current?.getBoundingClientRect(),i=(+!!a+ +!!o)*32+8+6,s=r?r.bottom-n.bottom:1/0;F({type:`toggle-comment-menu`,commentId:t._id,direction:s<i?`up`:`down`})},children:$(xo,{size:16})}),f?$(`div`,{class:Q(`markup-thread-menu-list`,te&&`is-leaving`),inert:te||void 0,children:[a?$(`button`,{type:`button`,class:`markup-thread-menu-item`,onClick:()=>{F({type:`start-edit`,commentId:t._id,body:t.body})},children:`Edit`}):null,o?$(`button`,{type:`button`,class:Q(`markup-thread-menu-item`,p&&`is-danger`),onClick:()=>{P.kind===`comment-menu`&&(P.confirmDelete?(F({type:`dismiss`}),T(t._id)):F({type:`arm-comment-delete`}))},children:p?`Confirm delete`:`Delete\u2026`}):null]}):null]}):null]})]}),c&&P.kind===`editing`?$(`form`,{class:`markup-comment-edit-form`,onSubmit:async e=>{if(e.preventDefault(),P.kind!==`editing`)return;let n=P.draft.trim();if(!n||n===t.body){F({type:`dismiss`});return}try{await w(t._id,n),F({type:`dismiss`})}catch{}},children:[$($c,{class:`markup-comment-edit-input`,label:`Edit comment`,value:P.draft,onChange:e=>F({type:`update-draft`,draft:e}),onKeyDown:e=>{vc(e,`mod-enter`,to())&&(e.preventDefault(),e.target.closest(`form`)?.requestSubmit())},members:v,autoFocus:!0,disabled:m}),$(`div`,{class:`markup-comment-edit-actions`,children:[$(`button`,{type:`button`,class:`markup-btn markup-btn-ghost`,onClick:()=>F({type:`dismiss`}),disabled:m,children:`Cancel`}),$(`button`,{type:`submit`,class:`markup-btn markup-btn-primary`,disabled:m||P.draft.trim().length===0,children:`Save`})]})]}):$(qc,{body:t.body,mentions:t.mentions,viewerUserId:s}),n===0&&e.screenshotUrl?$(`button`,{type:`button`,class:`markup-comment-screenshot`,onClick:()=>{M(!0),j.current?.showModal()},children:$(`img`,{src:e.thumbnailUrl??e.screenshotUrl,alt:`Screenshot`})}):null,!c&&t.reactions.length>0?$(ql,{comment:t,isResolved:oe,onToggle:e=>E(t._id,e)}):null]},t._id)})}),ce?$(`button`,{type:`button`,class:`markup-jump-latest`,"aria-label":`Jump to latest comment`,title:`Jump to latest comment`,onClick:e=>{de(`smooth`),e.detail===0&&A.current?.focus({preventScroll:!0})},children:$(vo,{size:16})}):null]}),e.screenshotUrl?$(`dialog`,{ref:j,class:`markup-lightbox`,onClick:()=>j.current?.close(),onClose:()=>M(!1),children:[$(`button`,{type:`button`,class:`markup-lightbox-close markup-icon-btn`,"aria-label":`Close screenshot`,title:$a(`Close screenshot`,[`Esc`]),"aria-keyshortcuts":`Escape`,onClick:e=>{e.stopPropagation(),j.current?.close()},children:$(_o,{size:16})}),ee?$(`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]}),$(nl,{label:`Reply`,placeholder:`Write a reply\u2026`,submitLabel:`Reply`,initialFocus:!1,isPending:m,error:h,onSubmit:C,members:v,sendKey:`enter`})]}):$(_c,{mode:a,isPending:m,isConnecting:l,isSigningIn:u,onSubmit:y,onCancel:S,onSignIn:b,onSignOut:x})]})}function Kl({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:$(To,{size:16})}),t?$(`div`,{class:Q(`markup-reaction-picker`,n&&`is-leaving`),role:`menu`,inert:n||void 0,children:Vl.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 ql({comment:e,isResolved:t,onToggle:n}){return $(`div`,{class:`markup-reactions`,children:e.reactions.map(e=>{let r=Jl(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})]},e.emoji)})})}function Jl(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 Yl(e,t,n){return Math.max(t,Math.min(n,e))}function Xl({name:e,image:t,tone:n}){let[r,i]=G(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:Zl(e)})})}function Zl(e){let t=e.trim();if(!t)return`??`;let n=t.split(/\s+/).filter(Boolean),r=n[0]??``;if(n.length===1)return r.slice(0,2).toUpperCase();let i=n[n.length-1]??``;return((r[0]??``)+(i[0]??``)).toUpperCase()}function Ql(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 $l(e){e.stopPropagation()}function eu({isActive:e,onToggle:t,onHide:n,position:r=`bottom-right`,unreadCount:i=0,showInbox:a=!1,onOpenInbox:o,inboxOpen:s=!1,pinsVisible:c=!0,onTogglePins:l,identityButton:u,overflowButton:d,isLeaving:f=!1}){let p=J(0);i>0&&(p.current=i);let m=J(null);q(()=>{let e=m.current;return e?sc(e):void 0},[]);let h=r===`bottom-left`?`markup-toolbar-left`:r===`bottom-center`?`markup-toolbar-center`:`markup-toolbar-right`;function g(e){if(e.preventDefault(),e.stopPropagation(),(e.metaKey||e.ctrlKey)&&n){n();return}t()}return $(`div`,{ref:m,class:Q(`markup-toolbar`,h,f&&`is-leaving`),role:`toolbar`,"aria-label":`Markup feedback toolbar`,"aria-hidden":f,inert:f?``:void 0,onPointerDown:$l,onMouseDown:$l,onPointerUp:$l,onMouseUp:$l,children:[$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`comment`,"data-armed":e?`true`:void 0,title:e?$a(`Cancel placing markup`,[`Esc`]):$a(`Leave a markup`,[`C`]),"aria-keyshortcuts":e?`Escape`:`C`,"aria-pressed":e,onClick:g,children:$(e?_o:Eo,{size:16})}),a?$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`inbox`,"data-on":s?`true`:void 0,title:i>0?`Inbox, ${i} unread`:`Inbox`,"aria-pressed":s,onClick:e=>{e.preventDefault(),e.stopPropagation(),o?.()},children:[$(Do,{size:16}),$(`span`,{class:`markup-tb-badge`,"data-unread":i>0?`true`:`false`,"aria-hidden":`true`,children:p.current>9?`9+`:p.current})]}):null,l?$(R,{children:[$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}),$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`pins`,"aria-label":c?`Hide pins`:`Show pins`,"aria-pressed":!c,title:c?`Hide pins`:`Show pins`,onClick:e=>{e.preventDefault(),e.stopPropagation(),l()},children:$(c?Oo:ko,{size:16})})]}):null,u||d?$(`div`,{class:`markup-tb-sep`,"aria-hidden":`true`}):null,u,d,d?null:$(`button`,{type:`button`,class:`markup-tb-btn`,"data-kind":`overflow`,"aria-label":`More options`,disabled:!0,children:$(Ao,{size:16})})]})}var tu=[],nu=[{key:`toolbar`}],ru=[];function iu({store:e,apiUrl:t,apiKey:n,position:r=`bottom-right`,screenshots:i,dashboardUrl:a,routeParams:o=tu,isAnalyticsEnabled:s=!0}){let{api:c,sendIdentity:l,patchThreads:u}=e,p=e.route.value,[m,h]=G(()=>tt(o)),{threads:g,isLoaded:_}=$s(e.threadSnapshot.value,p),v=e.identity.value;d(v.kind);let[y,b]=G(null);K(()=>{let e=!1;return Xn(t,n).then(t=>{e||b(t)}),()=>{e=!0}},[t,n]);let[x,S]=G(r),[C,w]=G(!0),[T,E]=G(!1),[D,O]=G(!0),k=e.showResolved.value,[A,j]=G(null),ee=Y(()=>j(null),[]),[M,N]=An(uo,{kind:`idle`}),[P,F]=G([]);K(()=>{let e=!1;return c.listMembers().then(t=>{e||F(t.members)}).catch(()=>{}),()=>{e=!0}},[c]);let I=Mn(),L=Mn(),te=Mn(),{run:ne}=I,{run:re}=L,{run:ie}=te,ae=te.isPending,[oe,z]=An(ro,{kind:`visible`}),B=oe.kind!==`visible`,se=J(B);se.current=B;let ce=Y(e=>{se.current||f(`hud_hidden`,{trigger:e}),z({type:`hide-with-toast`})},[z]),[le]=G(()=>rn(0)),[ue]=G(()=>new Map),de=J(null),fe=We(v),pe=v.kind===`verified`,me=v.kind===`unresolved`||v.kind===`recovering`,he=Ue(v),ge=He(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}=Ys({api:c,identity:v,mode:M,route:p,canComment:zn(_e,v.kind),patchThreads:u,sendMode:N}),Ae=be??I.error??xe,je=Bn({access:_e,identityKind:v.kind,hasAuthorName:fe!=null,refusal:ve});K(()=>e.onThreadsResubscribed(Se),[e,Se]);let Me=J(!1);K(()=>{if(Me.current||!_)return;let e=it();e!==null&&(g.find(t=>t._id===e)&&N({type:`open-thread`,threadId:e,commentId:at()??void 0}),ct()),Me.current=!0},[g,_,N]),K(()=>rr(()=>{e.route.value=$e(o),h(tt(o))}),[e,o]),K(()=>{function e(e){e.key===`.`&&(e.metaKey||e.ctrlKey)&&(e.altKey||e.shiftKey||(e.preventDefault(),se.current||f(`hud_hidden`,{trigger:`shortcut`}),z({type:`toggle`})))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[z]),K(()=>{B&&j(null)},[B]),K(()=>{if(oe.kind!==`hidden-with-toast`)return;let e=window.setTimeout(()=>z({type:`dismiss-toast`}),5e3);return()=>window.clearTimeout(e)},[oe.kind,z]);let V=J(!1),Ne=Y(()=>{V.current&&(M.kind===`placing`||M.kind===`composing-new`)&&(V.current=!1,f(`comment_abandoned`,{stage:M.kind===`placing`?`placing`:`composing`}))},[M.kind]),Pe=Y(e=>{Se(),Ne(),f(`comment_started`,{trigger:e}),V.current=!0,N({type:`start-placing`})},[Se,N,Ne]);K(()=>{function e(e){e.key===`c`&&(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||M.kind===`idle`&&(B||so()||(e.preventDefault(),Pe(`shortcut`))))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[M.kind,B,Pe]);let Fe=Y(()=>{Ne(),N({type:`cancel`}),Se()},[Se,N,Ne]),Ie=J(0),Le=Y((e,t,n)=>{let r=t+window.scrollX,a=n+window.scrollY,o=++Ie.current,s=i?.enabled!==!1&&D;if(f(`pin_placed`,{hasSelector:e.anchorSelector!=null,hasSourceAttribute:e.anchorSource!=null,isCapturing:s,prompt:je??`composer`}),N({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};Da(c,{x:t,y:n},l).then(e=>{N({type:`capture-done`,captureToken:o,result:e}),f(`screenshot_captured`,{ok:e!=null})})},[i,D,je,N]),Re=Y((e,t)=>{l({type:`author-set`,name:e,email:t})},[l]),ze=I.isPending,Be=Y(async()=>{f(`sign_in_started`),await ne(async()=>{try{let e=io(await ur({apiUrl:t,apiKey:n,useCookies:y===!0}));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:lr(e)}),e}})},[t,n,y,ne,l]),Ve=Y(t=>{if(e.markRead(t),g.some(e=>e._id===t.threadId))Ne(),N({type:`open-thread`,threadId:t.threadId,commentId:t.commentId});else{let e=ut(t.threadUrl,t.threadId,t.commentId);e&&(window.location.href=e)}},[e,N,g,Ne]),[Ge,Ke]=G(null);K(()=>{if(Ge===null)return;let e=window.setTimeout(()=>Ke(null),5e3);return()=>window.clearTimeout(e)},[Ge]);let qe=Y(async()=>await re(async()=>(await c.forgetMe(),Ne(),N({type:`cancel`}),l({type:`forget-me`}),Ke(`forgotten`),!0))===!0,[c,re,l,N,Ne]),Je=Y(async()=>{await ie(async()=>{await c.signOut(),Ne(),N({type:`cancel`}),l({type:`signed-out`}),Ke(`signed-out`)})},[c,ie,l,N,Ne]),Ye=M.kind===`thread`?g.find(e=>e._id===M.threadId)??null:null,Xe=he!=null&&he===Ye?.authorClientId,Ze=e.canModerate.value,Qe=Xe||Ze,et=M.kind===`thread`?M.threadId:null,nt=It(()=>new Map(g.map(e=>[e._id,Bs(e,m,o)])),[g,m,o]),rt=It(()=>T?g.filter(e=>e._id===et||nt.get(e._id)?.otherLocation===void 0):g,[g,T,et,nt]),ot=C&&M.kind!==`placing`?g.length-rt.length:0,st=M.kind!==`placing`&&!B&&C,lt=In(!B||M.kind===`placing`||M.kind===`composing-new`?nu:ru,e=>e.key,160),dt=[];oe.kind===`hidden-with-toast`&&dt.push({key:`hud-hidden`,body:$(R,{children:[`Markup hidden \u2014 press `,$(`kbd`,{class:`markup-kbd`,children:Qa().mod}),$(`kbd`,{class:`markup-kbd`,children:`.`}),` or refresh to bring it back.`]})}),Ge===`forgotten`&&dt.push({key:`forget-me`,body:`Forgotten on this site \u2014 your name and email were cleared.`}),Ge===`signed-out`&&dt.push({key:`signed-out`,body:`Signed out \u2014 commenting anonymously again.`});let ft=In(dt,e=>e.key,220),pt=In(M.kind===`thread`&&Ye?[Ye]:Zs,e=>e._id,160),H=Ln(M.kind===`composing-new`?M:null,160),mt=Ln(A,140),ht=Y((e,t)=>{Ne(),f(`thread_opened`,{commentCount:t}),N({type:`open-thread`,threadId:e})},[N,Ne]);return K(()=>{M.kind===`thread`&&Ye==null&&Fe()},[M,Ye,Fe]),$(`div`,{class:`markup-root`,ref:de,style:fo,children:[$(Hs,{threads:g,scopedThreads:rt,pinLabels:nt,viewerDetail:m,routeParams:o,shouldShowPins:st,activeThreadId:et,composer:H?{pageX:H.value.pageX,pageY:H.value.pageY,isLeaving:H.isLeaving}:null,isPopoverOpen:H!=null||pt.length>0,isPopoverTracked:H!=null||pt.length>0&&!B,layoutTick:le,anchorMemory:ue,onOpenThread:ht}),M.kind===`placing`?$(Al,{onPlace:Le,onCancel:Fe}):null,pt.map(({key:e,value:t,isLeaving:n})=>$(Gl,{thread:t,anchorMemory:ue,layoutTick:le,focusCommentId:M.kind===`thread`&&M.threadId===t._id?M.commentId:void 0,isLeaving:n,authorName:fe,authorPromptMode:je,currentClientId:he??null,viewerUserId:ge,isVerified:pe,isIdentityResolving:me,isSigningIn:ze,canDelete:Qe,canModerate:Ze,isPending:ye,error:Ae,isHidden:B,members:P,onAuthor:Re,onSignIn:Be,onSignOut:Je,onClose:Fe,onReply:Ee,onEditComment:De,onDeleteComment:Oe,onToggleReaction:ke,onDelete:we,onResolve:Te},e)),H?$(sl,{isLeaving:H.isLeaving,pageX:H.value.pageX,pageY:H.value.pageY,layoutTick:le,authorName:fe,authorPromptMode:je,canModerate:Ze,isIdentityResolving:me,isSigningIn:ze,isPending:ye,error:Ae,screenshot:H.value.screenshot,isScreenshotCapturing:H.value.isScreenshotCapturing,screenshotFailed:H.value.screenshotFailed,screenshotRedactedCount:H.value.screenshotRedactedCount,screenshotRedactedSelectors:H.value.screenshotRedactedSelectors,members:P,onAuthor:Re,onSignIn:Be,onSignOut:Je,onSubmit:Ce,onClose:Fe}):null,lt.map(n=>$(eu,{isLeaving:n.isLeaving,isActive:M.kind===`placing`,onToggle:()=>M.kind===`placing`?Fe():Pe(`toolbar`),onHide:()=>ce(`toolbar`),position:x,showInbox:pe,unreadCount:pe?e.unreadCount.value:0,inboxOpen:A===`inbox`,onOpenInbox:()=>{let t=A===`inbox`?null:`inbox`;j(t),t&&(f(`notifications_opened`,{unreadCount:e.unreadCount.peek()}),e.refreshNotifications())},pinsVisible:C,onTogglePins:()=>{f(`setting_changed`,{setting:`pins`,value:!C}),w(!C)},identityButton:$(uc,{identity:v,position:x,isSigningIn:ze,isSigningOut:ae,dashboardUrl:a,commentAccess:_e,onSignIn:Be,onSignOut:Je,onForgetMe:qe}),overflowButton:$(Dl,{position:x,onSetPosition:e=>{e!==x&&f(`setting_changed`,{setting:`position`,value:e}),S(e)},autoCapture:D&&i?.enabled!==!1,autoCaptureLocked:i?.enabled===!1,onToggleAutoCapture:()=>{f(`setting_changed`,{setting:`auto_capture`,value:!D}),O(!D)},isUrlScoped:T,hiddenByUrlScope:ot,onToggleUrlScope:()=>{f(`setting_changed`,{setting:`url_scope`,value:!T}),E(!T)},showResolved:k,onToggleShowResolved:()=>{f(`setting_changed`,{setting:`show_resolved`,value:!k}),e.showResolved.value=!k},onHideForSession:()=>ce(`menu`),isAnalyticsEnabled:s,identity:v,apiUrl:t,commentAccess:_e,isForgettingMe:L.isPending,forgetMeError:L.error,onForgetMe:qe,version:`1.32.3`,dashboardUrl:a})},n.key)),mt?.value===`inbox`&&pe?$(kl,{kind:`inbox`,label:`Inbox`,position:x,ignoreToolbarKind:`inbox`,isLeaving:mt.isLeaving,onClose:ee,children:$(bl,{state:e.inbox.value,viewerUserId:ge,isMarkingAll:e.isMarkingAllRead.value,onBack:ee,onItemClick:e=>{ee(),Ve(e)},onMarkAllRead:e.markAllRead})}):null,ft.map(e=>$(tc,{position:x,isLeaving:e.isLeaving,children:e.value.body},e.key))]})}var au=Dn({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`})}}),ou=Dn({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})}}),su=`anon`;function cu(e){return e.kind===`verified`?e.identity.clientId:su}function lu(e){return e.kind===`verified`&&e.identity.tokenExpiresAt>Date.now()?e.identity.clientId:su}function uu(e,t){return e.kind===`active`&&e.mintedAs===t}var du=18e5,fu=6e4,pu=6e4;function mu(e){let t=!1,n=null;async function r(){let i;try{i=await e.mint()}catch(e){if(t)return;e?.name!==`TypeError`&&V(e,{context:`subscription-token-refresh`}),n=setTimeout(r,pu);return}if(t)return;let a=Math.max(fu,i.expiresAt-Date.now()-du);n=setTimeout(r,a);try{e.onIssued(i)}catch(e){V(e,{context:`subscription-token-issued`})}}return r(),()=>{t=!0,n&&clearTimeout(n)}}var hu=`1.38.0`,gu=100,_u=1e3,vu=3e3,yu=16e3,bu=6,xu=3e5,Su=6e4,Cu=5,wu=20,Tu=6e4,Eu=0,Du=/^(SubscriptionsWorkerFullError|TooManyConcurrentRequests|CommitterFullError|AwsTooManyRequestsException|ExecuteFullError|SystemTimeoutError|ExpiredInQueue|VectorIndexTooLarge|SearchIndexTooLarge|TooManyWritesInTimePeriod)/,Ou=`AAAAAAAAAAA=`,ku=new Set([`$integer`,`$float`,`$bytes`]),Au=34,ju=36,Mu=Object.prototype.hasOwnProperty,Nu=class{#e;#t=Gu();#n=new Map;#r=0;#i=0;#a={querySet:0,identity:0,ts:Ou};#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/${hu}/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,Pu(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)&&(V(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>=bu}#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){V(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:Ou},this.#i=1,this.#S.clear(),this.#L({type:`ModifyQuerySet`,baseVersion:0,newVersion:1,modifications:[...this.#n].map(([e,t])=>Pu(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(Du.test(e.reason)?vu:_u))})}#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`&&(V(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.#_>=Tu&&(this.#h=0),this.#_=t,this.#h+=1,this.#g+=1,this.#h===1&&V(e,{context:`sync-message`}),this.#h>=Cu||this.#g>=wu){V(Error(`Convex sync: stopped after ${this.#g} protocol errors`),{context:`sync-message`}),this.close();return}this.#f=`ClientError`,this.#H(),this.#B(Math.min(_u*2**(this.#h-1),yu))}#P(e,t){let n=this.#a,r=e.startVersion;if(r.querySet!==n.querySet||r.identity!==n.identity||Lu(r.ts)!==Lu(n.ts))throw Error(`Convex sync: Transition does not start where the last one ended`);this.#a=e.endVersion,(this.#o===void 0||Lu(e.endVersion.ts)>Lu(this.#o))&&(this.#o=e.endVersion.ts);let i=Ru(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=zu(t.value??null,e.value,i);e.value=n,e.onValue(n)}catch(e){V(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(gu)))}#z(e){let t=Math.min(e*2**this.#p,yu);return this.#p+=1,t}#B(e){if(clearTimeout(this.#y),clearTimeout(this.#b),this.#u)return;let t=this.#O?xu:e;this.#y=setTimeout(()=>this.#A(),t*(.5+Math.random()))}#V(){clearTimeout(this.#b),this.#b=setTimeout(()=>this.#R(`InactiveServer`,!0),Su)}#H(e=!1){let t=this.#s;this.#s=null,this.#l=!1,this.#x=null,t&&(this.#c?.abort(),t.readyState===Eu&&!e?t.addEventListener(`open`,()=>t.close()):t.close())}};function Pu(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 Fu(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 Iu(e,t){let n=Fu(e);if(n.byteLength!==8)throw Error(`Convex sync: malformed ${t}`);return n}function Lu(e){return Iu(e,`timestamp`).getBigUint64(0,!0)}function Ru(e){for(let t=e.indexOf(`$`);t!==-1;t=e.indexOf(`$`,t+1))if(e.charCodeAt(t-1)===Au)return!0;return e.includes(`\\u0024`)}function zu(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&&Hu(o);r&&c!==void 0&&c!==Hu(s)&&(a??=Uu(r),s=a.get(c),i=!1);let l=zu(o,s,n);l!==o&&(e[t]=l),i&&=Object.is(l,s)}return i?r:e}let r=e,i=Vu(t)?t:void 0,a=i!==void 0,o=0;for(let e in r){if(!Mu.call(r,e))continue;if(n&&e.charCodeAt(0)===ju){if(o===0&&ku.has(e)&&Wu(r)===1)return Bu(e,r[e]);throw Error(`Convex sync: field ${e} starts with $`)}o+=1;let t=r[e],s=i&&Mu.call(i,e)?i[e]:void 0,c=zu(t,s,n);c!==t&&(r[e]=c),a&&=Object.is(c,s)}return i&&a&&Wu(i)===o?i:r}function Bu(e,t){if(typeof t!=`string`)throw Error(`Convex sync: malformed ${e}`);if(e===`$integer`)return Iu(t,e).getBigInt64(0,!0);if(e===`$float`){let n=Iu(t,e).getFloat64(0,!0);if(Number.isFinite(n)&&!Object.is(n,-0))throw Error(`Convex sync: malformed $float`);return n}return Fu(t).buffer}function Vu(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof ArrayBuffer)}function Hu(e){if(!Vu(e)||!Mu.call(e,`_id`))return;let t=e._id;return typeof t==`string`?t:void 0}function Uu(e){let t=new Map;for(let n of e){let e=Hu(n);e!==void 0&&!t.has(e)&&t.set(e,n)}return t}function Wu(e){let t=0;for(let n in e)Mu.call(e,n)&&(t+=1);return t}function Gu(){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 Ku(e){try{let t={method:`POST`,headers:{"content-type":`application/json`,"x-markup-api-key":e.apiKey},signal:Kn(Gn,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`&&V(e,{context:`refresh-token`}),null}}var qu=6e4,Ju=500;function Yu(e,{apiUrl:t,apiKey:n,onRefreshed:r,onFailure:i}){if(e.kind!==`verified`)return;let a=e.identity,{storage:o,refreshToken:s}=a,c=a.refreshTokenExpiresAt,l=a.tokenExpiresAt;if(c==null||o===`localStorage`&&s==null||o!==`cookies`&&o!==`localStorage`)return;let u=Date.now();if(c<=u){i();return}let d=Math.max(Ju,l-qu-u),f=new AbortController,p=window.setTimeout(async()=>{let e=await Ku({apiUrl:t,apiKey:n,mode:o,refreshToken:s,signal:f.signal});if(!f.signal.aborted){if(!e){i();return}e.mode===`cookies`?r({...a,tokenExpiresAt:e.accessTokenExpiresAt,refreshTokenExpiresAt:e.refreshTokenExpiresAt}):r({...a,token:e.accessToken,tokenExpiresAt:e.accessTokenExpiresAt,refreshToken:e.refreshToken,refreshTokenExpiresAt:e.refreshTokenExpiresAt})}},d);return()=>{window.clearTimeout(p),f.abort()}}var Xu=`widget/queries:subscribeThreadsForRoute`,Zu=`widget/queries:subscribeProjectSettings`,Qu=`widget/queries:subscribeUnreadCountForProject`,$u=3e4,ed=2**31-1;function td(e){return mn(()=>{try{return e()}catch(e){V(e,{context:`live-store`})}})}function nd({apiUrl:e,apiKey:t,initialIdentity:n,initialRoute:r,createClient:i=e=>new Nu(e)}){let a=e.replace(/\.convex\.site(\/.*)?$/,`.convex.cloud`);if(!/^https?:\/\//.test(a))throw Error(`Invalid apiUrl: ${e}`);let{state:o,send:s}=kn(oo,n.state),c=ln(()=>o.value.kind),l=ln(()=>Ue(o.value)),u=qn({apiUrl:e,apiKey:t,getToken:()=>{let e=o.peek();return e.kind!==`verified`||e.identity.token==null?null:{token:e.identity.token,expiresAt:e.identity.tokenExpiresAt}},getStorageMode:()=>{let e=o.peek();return e.kind===`verified`?e.identity.storage:null},getAnonToken:()=>{let e=o.peek();return e.kind===`anon`?e.identity.anonToken:null},onUnauthorized:()=>{s({type:`unauthorized`})}}),d=rn(r),f=rn(!1),p=rn(Qs(r)),m=rn(Rn),h=rn(!1),g=rn(0),{state:_,send:v}=kn(au,{kind:`idle`}),y=rn(!1),b=0,{state:x,send:S}=kn(ou,{kind:`idle`}),C=ln(()=>{let e=x.value;return e.kind===`active`?e.token:null}),w=ln(()=>uu(x.value,cu(o.value))),T=ln(()=>c.value===`verified`&&w.value&&h.value),E=rn(0),D=ln(()=>(E.value,lu(o.value))),O=new Set;function k(){let e=b;v({type:`fetch`}),u.listNotifications().then(t=>{b===e&&v({type:`loaded`,items:t.notifications})}).catch(t=>{b===e&&v({type:`failed`,error:t instanceof Error?t.message:`Failed to load.`})})}function A(e){b+=1,v({type:`patch`,update:e})}let j=rn(null),ee=[td(()=>{let e=o.value;if(e.kind!==`unresolved`&&e.kind!==`recovering`)return;let t=e.kind===`recovering`?e.preserved:n.preserved,r=!1,i=null,a=1e3;function c(){u.mintAnonIdentity().then(({clientId:e,token:n})=>{if(r)return;let i={clientId:e,anonToken:n,name:t.name,email:t.email};s({type:`mint-success`,identity:i})}).catch(()=>{r||(i=setTimeout(c,Math.min(a,$u)),a=Math.min(a*2,$u))})}return c(),()=>{r=!0,i&&clearTimeout(i)}}),td(()=>Yu(o.value,{apiUrl:e,apiKey:t,onRefreshed:e=>s({type:`signed-in`,identity:e}),onFailure:()=>s({type:`unauthorized`})})),td(()=>{E.value;let e=o.value;if(e.kind!==`verified`)return;let t=e.identity.tokenExpiresAt-Date.now();if(t<=0)return;let n=setTimeout(()=>{E.value+=1},Math.min(t,ed));return()=>clearTimeout(n)}),td(()=>{let e=D.value;return mu({mint:()=>u.getSubscriptionToken(),onIssued:t=>S({type:`issued`,token:t.token,expiresAt:t.expiresAt,mintedAs:e})})}),td(()=>{C.value===null||j.peek()||(j.value=i(a))}),td(()=>{let e=d.value,t=C.value,n=l.value,r=f.value;p.peek().route!==e&&(p.value=Qs(e));let i=j.value;if(t&&i){for(let e of O)e();return i.onUpdate(Xu,{subscriptionToken:t,route:e,viewerClientId:n,includeResolved:r},t=>{t!==void 0&&(p.value={route:e,threads:t,isLoaded:!0})})}}),td(()=>{let e=C.value;h.value=!1;let t=j.value;if(e&&t)return t.onUpdate(Zu,{subscriptionToken:e},e=>{let t=e;m.value=t?.commentAccess===`members`?`members`:Rn,h.value=t?.canModerate===!0})}),td(()=>{if(c.value!==`verified`||!w.value){g.value=0;return}let e=C.value,t=j.value;if(e&&t)return t.onUpdate(Qu,{subscriptionToken:e},e=>{e!==void 0&&(g.value=e.count,k())})}),td(()=>{c.value,l.value,b+=1,v({type:`reset`})})];return{api:u,identity:o,sendIdentity:s,route:d,showResolved:f,threadSnapshot:p,commentAccess:m,canModerate:T,unreadCount:g,inbox:_,isMarkingAllRead:y,refreshNotifications:k,patchThreads(e,t){p.value=ec(p.peek(),e,t)},markRead(e){e.readAt??(g.value=Math.max(0,g.peek()-1),A(t=>t.map(t=>t._id===e._id?{...t,readAt:Date.now()}:t)),u.markNotificationRead(e._id).catch(()=>{}))},markAllRead(){y.value=!0,g.value=0,A(e=>e.map(e=>e.readAt==null?{...e,readAt:Date.now()}:e)),u.markAllNotificationsRead().catch(()=>{}).finally(()=>{y.value=!1})},onThreadsResubscribed(e){return O.add(e),()=>O.delete(e)},dispose(){for(let e of ee)e();O.clear(),j.peek()?.close()}}}function rd(e){function t(t){t.target===e&&t.stopImmediatePropagation()}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()}function i(e){e.stopPropagation()}let a={capture:!0};window.addEventListener(`focusin`,t,a),window.addEventListener(`focusout`,n,a),window.addEventListener(`wheel`,r,a),window.addEventListener(`touchmove`,r,a),e.addEventListener(`pointerdown`,i);let o=ad(e);return()=>{window.removeEventListener(`focusin`,t,a),window.removeEventListener(`focusout`,n,a),window.removeEventListener(`wheel`,r,a),window.removeEventListener(`touchmove`,r,a),e.removeEventListener(`pointerdown`,i),o()}}var id=[`aria-hidden`,`inert`];function ad(e){let t=()=>{for(let t of id)e.hasAttribute(t)&&e.removeAttribute(t)},n=new MutationObserver(t);return n.observe(e,{attributes:!0,attributeFilter:id}),t(),()=>n.disconnect()}function od(e,t){e.style.position=`fixed`,e.style.inset=`0`,e.style.zIndex=`2147483647`,e.style.pointerEvents=`none`,_t(e,t.theme??`auto`);let n=St(),r=rd(e),i=e.attachShadow({mode:`open`}),a=document.createElement(`style`);a.textContent=Ce,i.appendChild(a);let o=document.createElement(`div`);o.className=`markup-shadow-root`,i.appendChild(o),Me({apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.32.3`}),c(t.analytics===!1?null:{apiUrl:t.apiUrl,apiKey:t.apiKey,widgetVersion:`1.32.3`}),f(`widget_loaded`,{entry:u()});let{theme:s,analytics:l,...d}=t,p=null,m=setTimeout(()=>{try{p=nd({apiUrl:t.apiUrl,apiKey:t.apiKey,initialIdentity:ze(),initialRoute:$e(t.routeParams??[])}),Se($(we,{onError:e=>V(e,{context:`render`}),children:$(iu,{...d,isAnalyticsEnabled:t.analytics!==!1,store:p})}),o)}catch(e){V(e,{context:`mount`})}},0);return()=>{clearTimeout(m),n(),r(),Me(null),c(null),Se(null,o),p?.dispose()}}var sd=2e3,cd=null,ld=null,ud=null,dd=null,fd=null,pd=!1;function md(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&&!pd&&(pd=!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(fd&&t===dd&&(ud!==null||ld?.isConnected===!0))return fd;gd(),dd=t;let n=()=>{fd===n&&gd()};fd=n;let r=()=>{if(ud=null,!document.body)return;let t=document.createElement(`div`);t.id=`markup-widget`,document.body.appendChild(t),ld=t,cd=od(t,e)},i=()=>{ud=hd(r)};return document.readyState===`loading`||!document.body?(ud=()=>document.removeEventListener(`DOMContentLoaded`,i),document.addEventListener(`DOMContentLoaded`,i,{once:!0})):i(),n}function hd(e){if(typeof requestIdleCallback==`function`){let t=requestIdleCallback(e,{timeout:sd});return()=>cancelIdleCallback(t)}let t=setTimeout(e,0);return()=>clearTimeout(t)}function gd(){ud&&=(ud(),null),cd&&=(cd(),null),ld?.parentNode&&ld.parentNode.removeChild(ld),ld=null,dd=null,fd=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`),md({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{gd as destroy,md as init,l as n,_ as t};
|
|
13
13
|
//# sourceMappingURL=widget.js.map
|