@veltdev/prosemirror-velt-comments 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # ProseMirror Velt Comments
2
+
3
+ <p>
4
+ <a href="https://www.npmjs.com/package/@veltdev/prosemirror-velt-comments">
5
+ <img src="https://img.shields.io/npm/v/@veltdev/prosemirror-velt-comments?style=flat&label=npm&color=09f" alt="NPM" />
6
+ </a>
7
+ </p>
8
+
9
+ With ProseMirror Velt Comments, you can add Google Docs-style overlay comments to your ProseMirror editor. It works with the Velt Collaboration SDK (more on that below). It's fully customizable and comes with a lot of powerful built-in features like attachments, mentions, recording, notifications and more.
10
+
11
+ Comment highlights are rendered as **view-only overlay elements** (`<velt-comment-text>`) positioned over the commented text — your document is never modified. Each comment is anchored by a durable `{ text, occurrence }` and re-resolved on every render, so highlights stay locked to the text through edits, scroll, and reload.
12
+
13
+ ## About Velt SDK
14
+
15
+ With Velt SDK you can add powerful collaboration features to your product extremely fast.
16
+
17
+ The SDK provides **fullstack components**:
18
+ - UI and behavior are fully customizable to match your product's needs
19
+ - fully-managed on a scalable realtime backend
20
+
21
+ Features include:
22
+ * **Comments** like Figma, Frame.io, Google Docs, Sheets and more
23
+ * **Recording** like Loom (audio, video, screen)
24
+ * **Huddle** like Slack (audio, video, screensharing)
25
+ * In-app and off-app **notifications**
26
+ * **@mentions** and assignment
27
+ * **Presence**, **Cursors**, **Live Selection**
28
+ * **Live state sync** with Single Editor mode
29
+ * **Multiplayer editing** with conflict resolution
30
+ * **Follow mode** like Figma
31
+ * ... and so much more
32
+
33
+ ## Installation
34
+
35
+ ```
36
+ npm install @veltdev/prosemirror-velt-comments
37
+ ```
38
+
39
+ `prosemirror-model`, `prosemirror-state` and `prosemirror-view` are peer dependencies — your app already provides them.
40
+
41
+ ## Documentation
42
+
43
+ - Read the [documentation](https://docs.velt.dev/async-collaboration/comments/overview) for guides and API references.
44
+
45
+ ## Use cases
46
+
47
+ - Explore [use cases](https://velt.dev/use-case) to learn how collaboration could look like on your product.
48
+ - [Figma Template](https://www.figma.com/community/file/1402312407969730816/velt-collaboration-kit): To visualize what collaboration features could look like on your product.
49
+
50
+ ## Releases
51
+
52
+ - See the [latest changes](https://docs.velt.dev/release-notes/).
53
+
54
+ ## Security
55
+ - Velt is SOC2 Type 2 and HIPAA compliant. [Learn more](https://velt.dev/security)
56
+
57
+ ## Community
58
+
59
+ - [X](https://x.com/veltjs): To receive updates, announcements,
60
+ and general Velt tips.
61
+
62
+ - [Discord](https://discord.gg/GupvcYH27h): To ask questions and share tips. (Less active).
package/cjs/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var t=require("prosemirror-state");const e={EDITOR_ID:"data-editor-id",LOCATION_ID:"data-velt-location-id",ANNOTATION_ID:"annotation-id",MULTI_THREAD_ANNOTATION_ID:"multi-thread-annotation-id"},n="veltComments",o="velt-comment-text",r="velt-comment-marker",c="velt-comment-selected",a="velt-comment-styles",s="__default__",i="terminal",l=400,d="[PVC]",u="debugMode",h="forceDebugMode";class m{static showLogs(){try{return!!sessionStorage.getItem(u)||!!sessionStorage.getItem(h)}catch(t){return m.catch("Error in showLogs: ",t),!1}}}m.log=m.showLogs()?console.log:()=>{},m.warn=m.showLogs()?console.warn:()=>{},m.error=m.showLogs()?console.error:()=>{},m.debug=m.showLogs()?console.debug:()=>{},m.info=m.showLogs()?console.info:()=>{},m.logsEnabled=!0,m.catch=(t,e)=>{try{m.logsEnabled&&(void 0!==e?console.warn(d,t,e):console.warn(d,t))}catch(t){}};const f=new Map,g=t=>{try{const e={annotations:new Map,commentAnnotations:[],selectedAnnotations:new Set,editorId:t};return f.set(t,e),e}catch(e){return m.catch("Error creating annotation state:",e),{annotations:new Map,commentAnnotations:[],selectedAnnotations:new Set,editorId:t}}},p=t=>{try{let e=f.get(t);return e||(e=g(t)),e}catch(e){return m.catch("Error getting or creating state:",e),g(t)}},y=(t,e)=>{try{const n=p(t);n.commentAnnotations=e;const o=new Map;for(const t of e){if(!t?.annotationId)continue;const e={annotationId:t.annotationId,multiThreadAnnotationId:t.multiThreadAnnotationId,context:t.context};o.set(t.annotationId,e)}n.annotations=o}catch(t){m.catch("Error updating annotations:",t)}},x=(t,e)=>{try{const n=f.get(t);return n&&n.annotations.get(e)||null}catch(t){return m.catch("Error getting annotation:",t),null}},w=t=>{try{const e=f.get(t);return e?[...e.commentAnnotations]:[]}catch(t){return m.catch("Error getting comment annotations:",t),[]}},E=new Map,I=t=>{try{E.delete(t),(t=>{try{f.delete(t)}catch(t){m.catch("Error clearing state:",t)}})(t)}catch(t){m.catch("Error unregistering editor:",t)}},v=(t,e,n=0,o)=>{try{const r=[];if(!e||!t||e.length>t.length)return r;const c=(t=>{try{if(!t||0===t.length)return[];const e=new Array(t.length).fill(0);let n=0,o=1;for(;o<t.length;)t[o]===t[n]?(n++,e[o]=n,o++):0!==n?n=e[n-1]:(e[o]=0,o++);return e}catch{return[]}})(e);let a=0,s=0;for(;a<t.length;)if(e[s]===t[a]&&(a++,s++),s===e.length){if(r.push(n+a-s),s=c[s-1],o&&r.length>=o)break}else a<t.length&&e[s]!==t[a]&&(0!==s?s=c[s-1]:a++);return r}catch{return[]}},A=t=>{const e=[];let n="",o=0;try{t.descendants((t,r)=>(t.isText&&t.text&&(e.push({text:t.text,pmFrom:r,textOffset:o}),n+=t.text,o+=t.text.length),!0))}catch(t){m.catch("[buildTextIndex] Error walking document:",t)}return{segments:e,fullText:n}},T=(t,e,n)=>{try{const o=((t,e,n)=>{try{const o=[];for(const r of e){let e=0,c=-1,a=0,s=-1,i=0;for(let o=0;o<t.length;o++){const l=t[o].text.length;if(-1===c&&r<e+l&&(c=o,a=r-e),-1===s&&r+n<=e+l){s=o,i=r+n-e;break}e+=l}if(-1!==c&&-1!==s){const e=t[c].pos+a,n=t[s].pos+i;o.push({from:e,to:n})}}return o}catch{return[]}})(t.map(t=>({text:t.text,pos:t.pmFrom})),[e],n);return o[0]??null}catch(t){return m.catch("[textRangeToPositions] Error:",t),null}},b=(t,e)=>{try{if(0===t.length)return 0;let n=0,o=t.length-1,r=-1;for(;n<=o;){const c=n+o>>1;t[c].pmFrom<=e?(r=c,n=c+1):o=c-1}if(r<0)return 0;const c=t[r],a=Math.min(Math.max(e-c.pmFrom,0),c.text.length);return c.textOffset+a}catch(t){return m.catch("[posToTextOffset] Error:",t),0}},M=(t,e,n)=>{try{if(!e)return null;const{segments:o,fullText:r}=A(t),c=n&&n>0?n:1,a=v(r,e,0,c),s=c-1;if(s<0||s>=a.length)return null;const i=T(o,a[s],e.length);return!i||i.from>=i.to?null:t.textBetween(i.from,i.to,"")!==e?C(t,o,r,e):i}catch(t){return m.catch("[resolveOccurrenceToRange] Error:",t),null}},C=(t,e,n,o)=>{try{const r=v(n,o);for(const n of r){const r=T(e,n,o.length);if(r&&r.from<r.to&&t.textBetween(r.from,r.to,"")===o)return r}return null}catch(t){return m.catch("[relaxedResolve] Error:",t),null}},S=(t,e,n)=>{try{return e>=n?"":t.textBetween(e,n,"")}catch(t){return m.catch("[getTextAtRange] Error:",t),""}},$=t=>{try{const n=(t=>{try{const e=Array.from(E.entries());for(const[n,o]of e)if(o.editor===t)return n;return null}catch(t){return m.catch("Error extracting editor ID:",t),null}})(t);if(n)return n;const o=t?.dom,r=o?.closest?.(`[${e.EDITOR_ID}]`);return r?.getAttribute(e.EDITOR_ID)??null}catch(t){return m.catch("[getEditorId] Error:",t),null}},O=t=>{try{const n=t?.dom,o=n?.closest?.(`[${e.LOCATION_ID}]`);return o?.getAttribute(e.LOCATION_ID)??void 0}catch(t){return void m.catch("[findLocationId] Error:",t)}},R=(t,e)=>({editorId:t||$(e)||s}),N=new Map,D=(t,n)=>{const c=document.createElement(o);return c.setAttribute(e.ANNOTATION_ID,t),c.className=r,c.style.cssText="position:absolute;pointer-events:auto;margin:0;padding:0;",n.multiThreadAnnotationId&&c.setAttribute(e.MULTI_THREAD_ANNOTATION_ID,n.multiThreadAnnotationId),c},k=(t,e,n,o)=>{const r=((t,e,n)=>{try{const o=t.domAtPos(e),r=t.domAtPos(n),c=document.createRange();c.setStart(o.node,o.offset),c.setEnd(r.node,r.offset);const a=Array.from(c.getClientRects()).filter(t=>t.width>0&&t.height>0);if(a.length>0)return a}catch(t){m.catch("[getRangeRects] Range error, falling back to coords:",t)}try{const o=t.coordsAtPos(e),r=t.coordsAtPos(n),c=Math.abs(o.top-r.top)<1,a=c?Math.min(o.left,r.left):o.left,s=c?Math.max(o.right,r.right):r.right;return[new DOMRect(a,o.top,Math.max(s-a,1),Math.max(o.bottom-o.top,1))]}catch(t){return m.catch("[getRangeRects] Fallback error:",t),[]}})(e,o.from,o.to);let c=t.elements.get(n)??[];for(;c.length<r.length;){const e=D(n,o);t.holder.appendChild(e),c.push(e)}for(;c.length>r.length;)c.pop()?.remove();0!==c.length?(r.forEach((t,e)=>((t,e)=>{t.style.left=`${e.left}px`,t.style.top=`${e.top}px`,t.style.width=`${e.width}px`,t.style.height=`${e.height}px`})(c[e],t)),t.elements.set(n,c)):t.elements.delete(n)},V=(t,e,n)=>{try{const o=((t,e)=>{try{if("undefined"==typeof document)return null;const n=N.get(t);if(n)return n;const o=document.createElement("div");o.className="velt-comment-overlay",o.style.cssText="position:fixed;inset:0;pointer-events:none;z-index:1;",document.body.appendChild(o);const r=()=>_(t,e),c=()=>_(t,e);window.addEventListener("scroll",r,!0),window.addEventListener("resize",c);const a={holder:o,elements:new Map,onScroll:r,onResize:c};return N.set(t,a),a}catch(t){return m.catch("[ensureOverlay] Error:",t),null}})(t,e);if(!o)return;for(const[t,e]of o.elements)n.has(t)||(e.forEach(t=>t.remove()),o.elements.delete(t));for(const[t,r]of n)k(o,e,t,r)}catch(t){m.catch("[syncOverlay] Error:",t)}},_=(t,e)=>{try{const n=N.get(t);if(!n||0===n.elements.size)return;const o=L?.(e);if(!o)return;for(const t of n.elements.keys()){const r=o.get(t);r&&k(n,e,t,r)}}catch(t){m.catch("[repositionOverlay] Error:",t)}};let L=null;const P=new t.PluginKey(n);let z=!1,F=new Map;const K=new Map,B=()=>{try{const t=window.Velt;return t?.getCommentElement?t.getCommentElement():null}catch(t){return m.catch("Error getting Velt comment element:",t),null}},U=(t,e)=>{try{const n=B();if(!n)return void m.warn("Velt SDK not available, cannot update annotation context");n.updateContext(t,e)}catch(t){m.catch("Error updating annotation context:",t)}},H=(t,e)=>{try{const n=e||`subscriber-${Date.now()}-${Math.random()}`;if(!z){const t=B();t&&"function"==typeof t.getSelectedComments&&(t.getSelectedComments().subscribe(t=>{const e=new Map;if(t?.forEach(t=>{t?.annotationId&&e.set(t.annotationId,!0)}),!((t,e)=>{try{if(t.size!==e.size)return!1;for(const[n,o]of Array.from(t))if(e.get(n)!==o)return!1;return!0}catch{return!1}})(e,F)){F=e;const t=new Set;for(const[e]of Array.from(F))t.add(e);K.forEach(e=>{if("function"==typeof e)try{e(t)}catch(t){m.catch("Error in selected annotations subscriber:",t)}})}}),z=!0)}return K.set(n,t),()=>{K.delete(n)}}catch(t){return m.catch("Error subscribing to selected annotations:",t),()=>{}}},J=(t,e,n,o,r,c,a,s=!1)=>{try{return!(!t||!e||o>=r)&&(t.dispatch(t.state.tr.setMeta(P,{type:"add",id:e,multiThreadAnnotationId:n,from:o,to:r,text:c,occurrence:a,isSelected:s})),!0)}catch(t){return m.catch("[applyAnnotationMark] Error:",t),!1}},j=(t,e)=>{try{return!(!t||!e)&&(t.dispatch(t.state.tr.setMeta(P,{type:"remove",id:e})),!0)}catch(t){return m.catch("[removeAnnotationMark] Error:",t),!1}},q=(t,e,n)=>{const o="[updateComments]";try{if(!e)return;const r=(t=>{try{const e=f.get(t);return e?new Set(e.selectedAnnotations):new Set}catch(t){return m.catch("Error getting selected annotations:",t),new Set}})(t),c=n.filter(t=>!(t.status?.type===i)||r.has(t.annotationId)),a=[];for(const t of c){const n=t.context?.textEditorConfig;if(!n?.text)continue;const c=n.text,s=n.occurrence??1,i=M(e.state.doc,c,s);i?a.push({id:t.annotationId,from:i.from,to:i.to,text:c,occurrence:s,multiThreadAnnotationId:t.multiThreadAnnotationId,isSelected:r.has(t.annotationId)}):m.warn(`${o} Occurrence ${s} not found for annotation ${t.annotationId}`)}((t,e)=>{try{return!!t&&(t.dispatch(t.state.tr.setMeta(P,{type:"sync",anchors:e})),!0)}catch(t){return m.catch("[applyAnnotationMarks] Error:",t),!1}})(e,a),m.log(`${o} Synced ${a.length} comment decorations`)}catch(t){m.catch(`${o} Error updating comments:`,t)}},G=(t,e)=>{try{const e=(t=>{try{return E.get(t)||null}catch(t){return m.catch("Error getting editor context:",t),null}})(t);if(!e?.editor)return;const n=w(t);q(t,e.editor,n)}catch(t){m.catch("[updateSelection] Error:",t)}},Q=new Map,W=new Map,X=(t,e)=>{const n="[handleContentUpdate]";try{const o=P.getState(e.state);if(!o||0===o.anchors.size)return;const{segments:r,fullText:c}=A(e.state.doc),a=w(t);for(const[s,i]of o.anchors){let o=x(t,s);if(!o){const t=a.find(t=>t.annotationId===s);t?.context?.textEditorConfig&&(o={annotationId:t.annotationId,multiThreadAnnotationId:t.multiThreadAnnotationId,context:t.context})}const l=o?.context?.textEditorConfig;if(!l||!o)continue;const d=S(e.state.doc,i.from,i.to);if(!d){j(e,s);continue}const u=b(r,i.from),h=v(c,d);let f=1;for(const t of h){if(!(t<u))break;f++}const g=d!==l.text,p=f!==(l.occurrence??1);if(g||p){const t={...o.context,textEditorConfig:{...l,text:d,occurrence:f}};U(s,t),J(e,s,i.multiThreadAnnotationId,i.from,i.to,d,f,i.isSelected),m.log(`${n} Updated context for annotation ${s}`)}}}catch(t){m.catch(`${n} Error:`,t)}};L=t=>P.getState(t.state)?.anchors,exports.VeltCommentsPlugin=function(e={}){return new t.Plugin({key:P,state:{init:()=>({anchors:new Map,editorId:e.editorId??s}),apply(t,e){try{let n=e.anchors;const o=e.editorId;if(t.docChanged){const e=new Map;for(const[o,r]of n){const n=t.mapping.mapResult(r.from,1),c=t.mapping.mapResult(r.to,-1);n.deleted&&c.deleted||n.pos>=c.pos||e.set(o,{...r,from:n.pos,to:c.pos})}n=e}const r=t.getMeta(P);if(r)switch(r.type){case"add":n=new Map(n),n.set(r.id,{from:r.from,to:r.to,text:r.text,occurrence:r.occurrence,multiThreadAnnotationId:r.multiThreadAnnotationId,isSelected:!!r.isSelected});break;case"sync":n=new Map;for(const t of r.anchors)n.set(t.id,{from:t.from,to:t.to,text:t.text,occurrence:t.occurrence,multiThreadAnnotationId:t.multiThreadAnnotationId,isSelected:t.isSelected});break;case"remove":n=new Map(n),n.delete(r.id)}return{anchors:n,editorId:o}}catch(t){return m.catch("[VeltCommentsPlugin.apply] Error:",t),e}}},view(t){const n=e.editorId??$(t)??s;try{((t,e,n)=>{try{const o=t||s;g(o);const r={editorId:o,editor:e,config:n||{}};return E.set(o,r),r}catch(o){return m.catch("Error registering editor:",o),{editorId:t||s,editor:e,config:n||{}}}})(n,t,{editorId:n,persistVeltMarks:e.persistVeltMarks??!0}),(()=>{try{if("undefined"==typeof document)return;if(document.getElementById(a))return;const t=document.createElement("style");t.id=a;const e=o;t.textContent=`\n.velt-comment-overlay ${e} { display:block; box-sizing:border-box; }\n:where(${e}) {\n background-color: rgba(255, 212, 0, 0.4);\n border-bottom: 2px solid #ffd400;\n cursor: pointer;\n}\n:where(${e}[comment-selected="true"]),\n:where(${e}.${c}) {\n background-color: rgba(255, 212, 0, 0.7);\n}\n`,document.head.appendChild(t)}catch(t){m.catch("[injectOverlayStyles] Error:",t)}})();const r=P.getState(t.state);r&&V(n,t,r.anchors)}catch(t){m.catch("[VeltCommentsPlugin.view] Setup error:",t)}return{update(t,e){try{const o=P.getState(t.state);o&&V(n,t,o.anchors),t.state.doc!==e.doc&&((t,e,n=l)=>{try{if("undefined"==typeof window)return;const o=W.get(t);o&&clearTimeout(o);const r=setTimeout(()=>{W.delete(t),X(t,e)},n);W.set(t,r)}catch(t){m.catch("[scheduleContentSync] Error:",t)}})(n,t)}catch(t){m.catch("[VeltCommentsPlugin.update] Error:",t)}},destroy(){try{(t=>{try{const e=Q.get(t);e&&(e(),Q.delete(t))}catch(t){m.catch("[cleanupRenderComments] Error:",t)}})(n),(t=>{try{const e=N.get(t);if(!e)return;window.removeEventListener("scroll",e.onScroll,!0),window.removeEventListener("resize",e.onResize),e.holder.remove(),N.delete(t)}catch(t){m.catch("[destroyOverlay] Error:",t)}})(n),I(n)}catch(t){m.catch("[VeltCommentsPlugin.destroy] Error:",t)}}}}})},exports.addComment=async function({editor:e,editorId:n,context:o}){const r="[addComment]";if(e)try{if(!B())return void m.warn(`${r} Velt SDK not available, cannot add comment`);const c=(t=>{try{if(!t)return null;const{state:e}=t,{from:n,to:o,empty:r}=e.selection;if(r||n===o)return null;const c=e.doc.textBetween(n,o,"");if(!c||!c.trim())return null;const{segments:a,fullText:s}=A(e.doc),i=b(a,n),l=v(s,c);let d=1;for(const t of l){if(!(t<i))break;d++}return{text:c,from:n,to:o,occurrence:d,locationId:O(t)}}catch(t){return m.catch("[getCurrentSelectionContext] Error:",t),null}})(e);if(!c)return void m.warn(`${r} No valid selection found, exiting`);const{editorId:a}=R(n,e),i=void 0!==n||a!==s,l={...o,textEditorConfig:{text:c.text,occurrence:c.occurrence,...i&&{editorId:a}}};let d;c.locationId&&(d={id:c.locationId});const u=await(t=>{const e="[addVeltComment]";try{const n=B();return n?n.addManualComment({context:t.context,location:t.location}).then(t=>t?.annotation?{annotation:t.annotation,result:t}:(m.warn(`${e} No annotation in result`),{annotation:null,result:t})).catch(t=>(m.catch(`${e} Error adding Velt comment:`,t),{annotation:null,result:null})):(m.warn(`${e} Velt SDK not available, cannot add comment`),Promise.resolve({annotation:null,result:null}))}catch(t){return m.catch(`${e} Exception adding Velt comment:`,t),Promise.resolve({annotation:null,result:null})}})({context:l,location:d}),h=u.annotation;if(!h)return void m.warn(`${r} Failed to create comment via Velt SDK`);h.annotationId?(J(e,h.annotationId,h.multiThreadAnnotationId,c.from,c.to,c.text,c.occurrence),y(a,[h])):m.warn(`${r} No annotationId, skipping state update`),((e,n)=>{try{if(!e)return;const o="number"==typeof n?n:e.state.selection.to,r=Math.max(0,Math.min(o,e.state.doc.content.size)),c=t.TextSelection.create(e.state.doc,r);e.dispatch(e.state.tr.setSelection(c))}catch(t){m.catch("[resetEditorSelection] Error:",t)}})(e,c.to)}catch(t){m.catch(`${r} Error adding comment:`,t)}else m.error(`${r} ERROR: No view provided`)},exports.renderComments=({editor:t,editorId:e,commentAnnotations:n})=>{const o="[renderComments]";try{if(!t)return void m.warn(`${o} No view provided`);if(!(()=>{try{const t=window?.Velt;return!!t?.loaded}catch(t){return m.catch("Error checking Velt availability:",t),!1}})())return;const r=n&&Array.isArray(n)?n:[],{editorId:c}=R(e,t),a=JSON.parse(JSON.stringify(r)).filter(t=>{if(!t?.context?.textEditorConfig)return!1;const e=t.context.textEditorConfig.editorId;return c===s?void 0===e||e===s:e===c});if(y(c,a),!Q.has(c)){const t=c,e=H(e=>{((t,e)=>{try{p(t).selectedAnnotations=new Set(e)}catch(t){m.catch("Error setting selected annotations:",t)}})(t,e),G(t)},t);Q.set(c,e)}q(c,t,a)}catch(t){m.catch(`${o} Error rendering comments:`,t)}},exports.veltCommentsPluginKey=P;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/constants/common.ts","../../src/utils/console.ts","../../src/core/state.ts","../../src/core/registry.ts","../../src/utils/common.ts","../../src/adapters/host/doc.ts","../../src/adapters/host/overlay.ts","../../src/core/pluginKey.ts","../../src/adapters/velt.ts","../../src/adapters/host/marks.ts","../../src/features/commentRenderer.ts","../../src/features/renderComments.ts","../../src/features/updateContent.ts","../../src/core/extension.ts","../../src/features/addComment.ts"],"names":["Constants","EDITOR_ID","LOCATION_ID","ANNOTATION_ID","MULTI_THREAD_ANNOTATION_ID","Console","showLogs","sessionStorage","getItem","err","catch","log","console","warn","error","debug","info","logsEnabled","message","undefined","stateMap","Map","createAnnotationState","editorId","state","annotations","commentAnnotations","selectedAnnotations","Set","set","getOrCreateState","get","updateAnnotations","annotationDataMap","annotation","annotationId","annotationData","multiThreadAnnotationId","context","getAnnotation","getCommentAnnotations","registry","unregisterEditor","delete","clearState","kmpSearch","text","pattern","startPos","maxOccurrences","positions","length","lps","Array","fill","len","i","computeKMPTable","j","push","buildTextIndex","doc","segments","fullText","runningOffset","descendants","node","pos","isText","pmFrom","textOffset","textRangeToPositions","textFrom","ranges","textNodes","textPositions","patternLength","textPos","currentPos","startNodeIndex","startOffset","endNodeIndex","endOffset","nodeLength","endPos","from","to","mapTextPositionsToDocument","map","s","posToTextOffset","lo","hi","found","mid","seg","within","Math","min","max","resolveOccurrenceToRange","occurrence","targetOccurrence","starts","index","range","textBetween","relaxedResolve","start","getTextAtRange","getEditorId","view","fromRegistry","editor","entries","getEditorIdFromEditor","dom","el","closest","getAttribute","findLocationId","ensureEditorSetup","overlays","createElement","id","anchor","document","setAttribute","className","style","cssText","renderAnchor","rects","fromDOM","domAtPos","toDOM","createRange","setStart","offset","setEnd","getClientRects","filter","r","width","height","a","coordsAtPos","b","sameLine","abs","top","left","right","DOMRect","bottom","getRangeRects","els","elements","holder","appendChild","pop","remove","forEach","rect","positionAt","syncOverlay","anchors","existing","body","onScroll","repositionOverlay","onResize","window","addEventListener","ensureOverlay","has","size","anchorsGetter","keys","veltCommentsPluginKey","PluginKey","isSubscribed","selectedCommentsMap","subscribers","getCommentElement","velt","Velt","updateAnnotationContext","commentElement","updateContext","subscribeToSelectedAnnotations","callback","subscriberId","Date","now","random","getSelectedComments","subscribe","comments","newSelectedMap","comment","map1","map2","key","value","areMapsEqual","selectedIds","add","subscriber","applyAnnotationMark","isSelected","dispatch","tr","setMeta","type","removeAnnotationMark","updateComments","logPrefix","getSelectedAnnotations","visibleAnnotations","status","textEditorConfig","applyAnnotationMarks","updateSelection","_selectedIds","getEditorContext","subscriptionMap","debouncers","handleContentUpdate","pluginState","getState","allAnnotations","stored","find","currentText","anchorTextOffset","currentOccurrence","textChanged","occurrenceChanged","updatedContext","config","Plugin","init","apply","docChanged","remapped","mapping","mapResult","deleted","meta","getMeta","finalEditorId","registerEditor","persistVeltMarks","getElementById","tag","textContent","head","injectOverlayStyles","initial","update","updatedView","prevState","delay","clearTimeout","handle","setTimeout","scheduleContentSync","destroy","unsubscribe","cleanupRenderComments","removeEventListener","destroyOverlay","async","clientContext","selectionContext","empty","selection","trim","selectionTextOffset","locationId","getCurrentSelectionContext","userProvidedEditorId","location","veltResult","params","addManualComment","then","result","Promise","resolve","addVeltComment","target","clamped","content","TextSelection","create","setSelection","resetEditorSelection","loaded","isVeltAvailable","isArray","editorAnnotations","JSON","parse","stringify","annotationEditorId","editorIdForSubscription","setSelectedAnnotations"],"mappings":"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"}
package/esm/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import{TextSelection as t,PluginKey as e,Plugin as n}from"prosemirror-state";const o={EDITOR_ID:"data-editor-id",LOCATION_ID:"data-velt-location-id",ANNOTATION_ID:"annotation-id",MULTI_THREAD_ANNOTATION_ID:"multi-thread-annotation-id"},r="veltComments",c="velt-comment-text",a="velt-comment-marker",s="velt-comment-selected",i="velt-comment-styles",l="__default__",d="terminal",u=400,h="[PVC]",m="debugMode",f="forceDebugMode";class g{static showLogs(){try{return!!sessionStorage.getItem(m)||!!sessionStorage.getItem(f)}catch(t){return g.catch("Error in showLogs: ",t),!1}}}g.log=g.showLogs()?console.log:()=>{},g.warn=g.showLogs()?console.warn:()=>{},g.error=g.showLogs()?console.error:()=>{},g.debug=g.showLogs()?console.debug:()=>{},g.info=g.showLogs()?console.info:()=>{},g.logsEnabled=!0,g.catch=(t,e)=>{try{g.logsEnabled&&(void 0!==e?console.warn(h,t,e):console.warn(h,t))}catch(t){}};const p=new Map,y=t=>{try{const e={annotations:new Map,commentAnnotations:[],selectedAnnotations:new Set,editorId:t};return p.set(t,e),e}catch(e){return g.catch("Error creating annotation state:",e),{annotations:new Map,commentAnnotations:[],selectedAnnotations:new Set,editorId:t}}},x=t=>{try{let e=p.get(t);return e||(e=y(t)),e}catch(e){return g.catch("Error getting or creating state:",e),y(t)}},w=(t,e)=>{try{const n=x(t);n.commentAnnotations=e;const o=new Map;for(const t of e){if(!t?.annotationId)continue;const e={annotationId:t.annotationId,multiThreadAnnotationId:t.multiThreadAnnotationId,context:t.context};o.set(t.annotationId,e)}n.annotations=o}catch(t){g.catch("Error updating annotations:",t)}},E=(t,e)=>{try{const n=p.get(t);return n&&n.annotations.get(e)||null}catch(t){return g.catch("Error getting annotation:",t),null}},I=t=>{try{const e=p.get(t);return e?[...e.commentAnnotations]:[]}catch(t){return g.catch("Error getting comment annotations:",t),[]}},v=new Map,A=t=>{try{v.delete(t),(t=>{try{p.delete(t)}catch(t){g.catch("Error clearing state:",t)}})(t)}catch(t){g.catch("Error unregistering editor:",t)}},T=(t,e,n=0,o)=>{try{const r=[];if(!e||!t||e.length>t.length)return r;const c=(t=>{try{if(!t||0===t.length)return[];const e=new Array(t.length).fill(0);let n=0,o=1;for(;o<t.length;)t[o]===t[n]?(n++,e[o]=n,o++):0!==n?n=e[n-1]:(e[o]=0,o++);return e}catch{return[]}})(e);let a=0,s=0;for(;a<t.length;)if(e[s]===t[a]&&(a++,s++),s===e.length){if(r.push(n+a-s),s=c[s-1],o&&r.length>=o)break}else a<t.length&&e[s]!==t[a]&&(0!==s?s=c[s-1]:a++);return r}catch{return[]}},b=t=>{const e=[];let n="",o=0;try{t.descendants((t,r)=>(t.isText&&t.text&&(e.push({text:t.text,pmFrom:r,textOffset:o}),n+=t.text,o+=t.text.length),!0))}catch(t){g.catch("[buildTextIndex] Error walking document:",t)}return{segments:e,fullText:n}},M=(t,e,n)=>{try{const o=((t,e,n)=>{try{const o=[];for(const r of e){let e=0,c=-1,a=0,s=-1,i=0;for(let o=0;o<t.length;o++){const l=t[o].text.length;if(-1===c&&r<e+l&&(c=o,a=r-e),-1===s&&r+n<=e+l){s=o,i=r+n-e;break}e+=l}if(-1!==c&&-1!==s){const e=t[c].pos+a,n=t[s].pos+i;o.push({from:e,to:n})}}return o}catch{return[]}})(t.map(t=>({text:t.text,pos:t.pmFrom})),[e],n);return o[0]??null}catch(t){return g.catch("[textRangeToPositions] Error:",t),null}},S=(t,e)=>{try{if(0===t.length)return 0;let n=0,o=t.length-1,r=-1;for(;n<=o;){const c=n+o>>1;t[c].pmFrom<=e?(r=c,n=c+1):o=c-1}if(r<0)return 0;const c=t[r],a=Math.min(Math.max(e-c.pmFrom,0),c.text.length);return c.textOffset+a}catch(t){return g.catch("[posToTextOffset] Error:",t),0}},C=(t,e,n)=>{try{if(!e)return null;const{segments:o,fullText:r}=b(t),c=n&&n>0?n:1,a=T(r,e,0,c),s=c-1;if(s<0||s>=a.length)return null;const i=M(o,a[s],e.length);return!i||i.from>=i.to?null:t.textBetween(i.from,i.to,"")!==e?$(t,o,r,e):i}catch(t){return g.catch("[resolveOccurrenceToRange] Error:",t),null}},$=(t,e,n,o)=>{try{const r=T(n,o);for(const n of r){const r=M(e,n,o.length);if(r&&r.from<r.to&&t.textBetween(r.from,r.to,"")===o)return r}return null}catch(t){return g.catch("[relaxedResolve] Error:",t),null}},O=(t,e,n)=>{try{return e>=n?"":t.textBetween(e,n,"")}catch(t){return g.catch("[getTextAtRange] Error:",t),""}},R=t=>{try{const e=(t=>{try{const e=Array.from(v.entries());for(const[n,o]of e)if(o.editor===t)return n;return null}catch(t){return g.catch("Error extracting editor ID:",t),null}})(t);if(e)return e;const n=t?.dom,r=n?.closest?.(`[${o.EDITOR_ID}]`);return r?.getAttribute(o.EDITOR_ID)??null}catch(t){return g.catch("[getEditorId] Error:",t),null}},N=t=>{try{const e=t?.dom,n=e?.closest?.(`[${o.LOCATION_ID}]`);return n?.getAttribute(o.LOCATION_ID)??void 0}catch(t){return void g.catch("[findLocationId] Error:",t)}},D=(t,e)=>({editorId:t||R(e)||l}),k=new Map,V=(t,e)=>{const n=document.createElement(c);return n.setAttribute(o.ANNOTATION_ID,t),n.className=a,n.style.cssText="position:absolute;pointer-events:auto;margin:0;padding:0;",e.multiThreadAnnotationId&&n.setAttribute(o.MULTI_THREAD_ANNOTATION_ID,e.multiThreadAnnotationId),n},_=(t,e,n,o)=>{const r=((t,e,n)=>{try{const o=t.domAtPos(e),r=t.domAtPos(n),c=document.createRange();c.setStart(o.node,o.offset),c.setEnd(r.node,r.offset);const a=Array.from(c.getClientRects()).filter(t=>t.width>0&&t.height>0);if(a.length>0)return a}catch(t){g.catch("[getRangeRects] Range error, falling back to coords:",t)}try{const o=t.coordsAtPos(e),r=t.coordsAtPos(n),c=Math.abs(o.top-r.top)<1,a=c?Math.min(o.left,r.left):o.left,s=c?Math.max(o.right,r.right):r.right;return[new DOMRect(a,o.top,Math.max(s-a,1),Math.max(o.bottom-o.top,1))]}catch(t){return g.catch("[getRangeRects] Fallback error:",t),[]}})(e,o.from,o.to);let c=t.elements.get(n)??[];for(;c.length<r.length;){const e=V(n,o);t.holder.appendChild(e),c.push(e)}for(;c.length>r.length;)c.pop()?.remove();0!==c.length?(r.forEach((t,e)=>((t,e)=>{t.style.left=`${e.left}px`,t.style.top=`${e.top}px`,t.style.width=`${e.width}px`,t.style.height=`${e.height}px`})(c[e],t)),t.elements.set(n,c)):t.elements.delete(n)},L=(t,e,n)=>{try{const o=((t,e)=>{try{if("undefined"==typeof document)return null;const n=k.get(t);if(n)return n;const o=document.createElement("div");o.className="velt-comment-overlay",o.style.cssText="position:fixed;inset:0;pointer-events:none;z-index:1;",document.body.appendChild(o);const r=()=>P(t,e),c=()=>P(t,e);window.addEventListener("scroll",r,!0),window.addEventListener("resize",c);const a={holder:o,elements:new Map,onScroll:r,onResize:c};return k.set(t,a),a}catch(t){return g.catch("[ensureOverlay] Error:",t),null}})(t,e);if(!o)return;for(const[t,e]of o.elements)n.has(t)||(e.forEach(t=>t.remove()),o.elements.delete(t));for(const[t,r]of n)_(o,e,t,r)}catch(t){g.catch("[syncOverlay] Error:",t)}},P=(t,e)=>{try{const n=k.get(t);if(!n||0===n.elements.size)return;const o=z?.(e);if(!o)return;for(const t of n.elements.keys()){const r=o.get(t);r&&_(n,e,t,r)}}catch(t){g.catch("[repositionOverlay] Error:",t)}};let z=null;const F=new e(r);let B=!1,K=new Map;const U=new Map,H=()=>{try{const t=window.Velt;return t?.getCommentElement?t.getCommentElement():null}catch(t){return g.catch("Error getting Velt comment element:",t),null}},J=(t,e)=>{try{const n=H();if(!n)return void g.warn("Velt SDK not available, cannot update annotation context");n.updateContext(t,e)}catch(t){g.catch("Error updating annotation context:",t)}},j=(t,e)=>{try{const n=e||`subscriber-${Date.now()}-${Math.random()}`;if(!B){const t=H();t&&"function"==typeof t.getSelectedComments&&(t.getSelectedComments().subscribe(t=>{const e=new Map;if(t?.forEach(t=>{t?.annotationId&&e.set(t.annotationId,!0)}),!((t,e)=>{try{if(t.size!==e.size)return!1;for(const[n,o]of Array.from(t))if(e.get(n)!==o)return!1;return!0}catch{return!1}})(e,K)){K=e;const t=new Set;for(const[e]of Array.from(K))t.add(e);U.forEach(e=>{if("function"==typeof e)try{e(t)}catch(t){g.catch("Error in selected annotations subscriber:",t)}})}}),B=!0)}return U.set(n,t),()=>{U.delete(n)}}catch(t){return g.catch("Error subscribing to selected annotations:",t),()=>{}}},q=(t,e,n,o,r,c,a,s=!1)=>{try{return!(!t||!e||o>=r)&&(t.dispatch(t.state.tr.setMeta(F,{type:"add",id:e,multiThreadAnnotationId:n,from:o,to:r,text:c,occurrence:a,isSelected:s})),!0)}catch(t){return g.catch("[applyAnnotationMark] Error:",t),!1}},G=(t,e)=>{try{return!(!t||!e)&&(t.dispatch(t.state.tr.setMeta(F,{type:"remove",id:e})),!0)}catch(t){return g.catch("[removeAnnotationMark] Error:",t),!1}},Q=(t,e,n)=>{const o="[updateComments]";try{if(!e)return;const r=(t=>{try{const e=p.get(t);return e?new Set(e.selectedAnnotations):new Set}catch(t){return g.catch("Error getting selected annotations:",t),new Set}})(t),c=n.filter(t=>!(t.status?.type===d)||r.has(t.annotationId)),a=[];for(const t of c){const n=t.context?.textEditorConfig;if(!n?.text)continue;const c=n.text,s=n.occurrence??1,i=C(e.state.doc,c,s);i?a.push({id:t.annotationId,from:i.from,to:i.to,text:c,occurrence:s,multiThreadAnnotationId:t.multiThreadAnnotationId,isSelected:r.has(t.annotationId)}):g.warn(`${o} Occurrence ${s} not found for annotation ${t.annotationId}`)}((t,e)=>{try{return!!t&&(t.dispatch(t.state.tr.setMeta(F,{type:"sync",anchors:e})),!0)}catch(t){return g.catch("[applyAnnotationMarks] Error:",t),!1}})(e,a),g.log(`${o} Synced ${a.length} comment decorations`)}catch(t){g.catch(`${o} Error updating comments:`,t)}},W=(t,e)=>{try{const e=(t=>{try{return v.get(t)||null}catch(t){return g.catch("Error getting editor context:",t),null}})(t);if(!e?.editor)return;const n=I(t);Q(t,e.editor,n)}catch(t){g.catch("[updateSelection] Error:",t)}},X=new Map,Y=({editor:t,editorId:e,commentAnnotations:n})=>{const o="[renderComments]";try{if(!t)return void g.warn(`${o} No view provided`);if(!(()=>{try{const t=window?.Velt;return!!t?.loaded}catch(t){return g.catch("Error checking Velt availability:",t),!1}})())return;const r=n&&Array.isArray(n)?n:[],{editorId:c}=D(e,t),a=JSON.parse(JSON.stringify(r)).filter(t=>{if(!t?.context?.textEditorConfig)return!1;const e=t.context.textEditorConfig.editorId;return c===l?void 0===e||e===l:e===c});if(w(c,a),!X.has(c)){const t=c,e=j(e=>{((t,e)=>{try{x(t).selectedAnnotations=new Set(e)}catch(t){g.catch("Error setting selected annotations:",t)}})(t,e),W(t)},t);X.set(c,e)}Q(c,t,a)}catch(t){g.catch(`${o} Error rendering comments:`,t)}},Z=new Map,tt=(t,e)=>{const n="[handleContentUpdate]";try{const o=F.getState(e.state);if(!o||0===o.anchors.size)return;const{segments:r,fullText:c}=b(e.state.doc),a=I(t);for(const[s,i]of o.anchors){let o=E(t,s);if(!o){const t=a.find(t=>t.annotationId===s);t?.context?.textEditorConfig&&(o={annotationId:t.annotationId,multiThreadAnnotationId:t.multiThreadAnnotationId,context:t.context})}const l=o?.context?.textEditorConfig;if(!l||!o)continue;const d=O(e.state.doc,i.from,i.to);if(!d){G(e,s);continue}const u=S(r,i.from),h=T(c,d);let m=1;for(const t of h){if(!(t<u))break;m++}const f=d!==l.text,p=m!==(l.occurrence??1);if(f||p){const t={...o.context,textEditorConfig:{...l,text:d,occurrence:m}};J(s,t),q(e,s,i.multiThreadAnnotationId,i.from,i.to,d,m,i.isSelected),g.log(`${n} Updated context for annotation ${s}`)}}}catch(t){g.catch(`${n} Error:`,t)}};function et(t={}){return new n({key:F,state:{init:()=>({anchors:new Map,editorId:t.editorId??l}),apply(t,e){try{let n=e.anchors;const o=e.editorId;if(t.docChanged){const e=new Map;for(const[o,r]of n){const n=t.mapping.mapResult(r.from,1),c=t.mapping.mapResult(r.to,-1);n.deleted&&c.deleted||n.pos>=c.pos||e.set(o,{...r,from:n.pos,to:c.pos})}n=e}const r=t.getMeta(F);if(r)switch(r.type){case"add":n=new Map(n),n.set(r.id,{from:r.from,to:r.to,text:r.text,occurrence:r.occurrence,multiThreadAnnotationId:r.multiThreadAnnotationId,isSelected:!!r.isSelected});break;case"sync":n=new Map;for(const t of r.anchors)n.set(t.id,{from:t.from,to:t.to,text:t.text,occurrence:t.occurrence,multiThreadAnnotationId:t.multiThreadAnnotationId,isSelected:t.isSelected});break;case"remove":n=new Map(n),n.delete(r.id)}return{anchors:n,editorId:o}}catch(t){return g.catch("[VeltCommentsPlugin.apply] Error:",t),e}}},view(e){const n=t.editorId??R(e)??l;try{((t,e,n)=>{try{const o=t||l;y(o);const r={editorId:o,editor:e,config:n||{}};return v.set(o,r),r}catch(o){return g.catch("Error registering editor:",o),{editorId:t||l,editor:e,config:n||{}}}})(n,e,{editorId:n,persistVeltMarks:t.persistVeltMarks??!0}),(()=>{try{if("undefined"==typeof document)return;if(document.getElementById(i))return;const t=document.createElement("style");t.id=i;const e=c;t.textContent=`\n.velt-comment-overlay ${e} { display:block; box-sizing:border-box; }\n:where(${e}) {\n background-color: rgba(255, 212, 0, 0.4);\n border-bottom: 2px solid #ffd400;\n cursor: pointer;\n}\n:where(${e}[comment-selected="true"]),\n:where(${e}.${s}) {\n background-color: rgba(255, 212, 0, 0.7);\n}\n`,document.head.appendChild(t)}catch(t){g.catch("[injectOverlayStyles] Error:",t)}})();const o=F.getState(e.state);o&&L(n,e,o.anchors)}catch(t){g.catch("[VeltCommentsPlugin.view] Setup error:",t)}return{update(t,e){try{const o=F.getState(t.state);o&&L(n,t,o.anchors),t.state.doc!==e.doc&&((t,e,n=u)=>{try{if("undefined"==typeof window)return;const o=Z.get(t);o&&clearTimeout(o);const r=setTimeout(()=>{Z.delete(t),tt(t,e)},n);Z.set(t,r)}catch(t){g.catch("[scheduleContentSync] Error:",t)}})(n,t)}catch(t){g.catch("[VeltCommentsPlugin.update] Error:",t)}},destroy(){try{(t=>{try{const e=X.get(t);e&&(e(),X.delete(t))}catch(t){g.catch("[cleanupRenderComments] Error:",t)}})(n),(t=>{try{const e=k.get(t);if(!e)return;window.removeEventListener("scroll",e.onScroll,!0),window.removeEventListener("resize",e.onResize),e.holder.remove(),k.delete(t)}catch(t){g.catch("[destroyOverlay] Error:",t)}})(n),A(n)}catch(t){g.catch("[VeltCommentsPlugin.destroy] Error:",t)}}}}})}async function nt({editor:e,editorId:n,context:o}){const r="[addComment]";if(e)try{if(!H())return void g.warn(`${r} Velt SDK not available, cannot add comment`);const c=(t=>{try{if(!t)return null;const{state:e}=t,{from:n,to:o,empty:r}=e.selection;if(r||n===o)return null;const c=e.doc.textBetween(n,o,"");if(!c||!c.trim())return null;const{segments:a,fullText:s}=b(e.doc),i=S(a,n),l=T(s,c);let d=1;for(const t of l){if(!(t<i))break;d++}return{text:c,from:n,to:o,occurrence:d,locationId:N(t)}}catch(t){return g.catch("[getCurrentSelectionContext] Error:",t),null}})(e);if(!c)return void g.warn(`${r} No valid selection found, exiting`);const{editorId:a}=D(n,e),s=void 0!==n||a!==l,i={...o,textEditorConfig:{text:c.text,occurrence:c.occurrence,...s&&{editorId:a}}};let d;c.locationId&&(d={id:c.locationId});const u=await(t=>{const e="[addVeltComment]";try{const n=H();return n?n.addManualComment({context:t.context,location:t.location}).then(t=>t?.annotation?{annotation:t.annotation,result:t}:(g.warn(`${e} No annotation in result`),{annotation:null,result:t})).catch(t=>(g.catch(`${e} Error adding Velt comment:`,t),{annotation:null,result:null})):(g.warn(`${e} Velt SDK not available, cannot add comment`),Promise.resolve({annotation:null,result:null}))}catch(t){return g.catch(`${e} Exception adding Velt comment:`,t),Promise.resolve({annotation:null,result:null})}})({context:i,location:d}),h=u.annotation;if(!h)return void g.warn(`${r} Failed to create comment via Velt SDK`);h.annotationId?(q(e,h.annotationId,h.multiThreadAnnotationId,c.from,c.to,c.text,c.occurrence),w(a,[h])):g.warn(`${r} No annotationId, skipping state update`),((e,n)=>{try{if(!e)return;const o="number"==typeof n?n:e.state.selection.to,r=Math.max(0,Math.min(o,e.state.doc.content.size)),c=t.create(e.state.doc,r);e.dispatch(e.state.tr.setSelection(c))}catch(t){g.catch("[resetEditorSelection] Error:",t)}})(e,c.to)}catch(t){g.catch(`${r} Error adding comment:`,t)}else g.error(`${r} ERROR: No view provided`)}z=t=>F.getState(t.state)?.anchors;export{et as VeltCommentsPlugin,nt as addComment,Y as renderComments,F as veltCommentsPluginKey};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/constants/common.ts","../../src/utils/console.ts","../../src/core/state.ts","../../src/core/registry.ts","../../src/utils/common.ts","../../src/adapters/host/doc.ts","../../src/adapters/host/overlay.ts","../../src/core/pluginKey.ts","../../src/adapters/velt.ts","../../src/adapters/host/marks.ts","../../src/features/commentRenderer.ts","../../src/features/renderComments.ts","../../src/features/updateContent.ts","../../src/core/extension.ts","../../src/features/addComment.ts"],"names":["Constants","EDITOR_ID","LOCATION_ID","ANNOTATION_ID","MULTI_THREAD_ANNOTATION_ID","Console","showLogs","sessionStorage","getItem","err","catch","log","console","warn","error","debug","info","logsEnabled","message","undefined","stateMap","Map","createAnnotationState","editorId","state","annotations","commentAnnotations","selectedAnnotations","Set","set","getOrCreateState","get","updateAnnotations","annotationDataMap","annotation","annotationId","annotationData","multiThreadAnnotationId","context","getAnnotation","getCommentAnnotations","registry","unregisterEditor","delete","clearState","kmpSearch","text","pattern","startPos","maxOccurrences","positions","length","lps","Array","fill","len","i","computeKMPTable","j","push","buildTextIndex","doc","segments","fullText","runningOffset","descendants","node","pos","isText","pmFrom","textOffset","textRangeToPositions","textFrom","ranges","textNodes","textPositions","patternLength","textPos","currentPos","startNodeIndex","startOffset","endNodeIndex","endOffset","nodeLength","endPos","from","to","mapTextPositionsToDocument","map","s","posToTextOffset","lo","hi","found","mid","seg","within","Math","min","max","resolveOccurrenceToRange","occurrence","targetOccurrence","starts","index","range","textBetween","relaxedResolve","start","getTextAtRange","getEditorId","view","fromRegistry","editor","entries","getEditorIdFromEditor","dom","el","closest","getAttribute","findLocationId","ensureEditorSetup","overlays","createElement","id","anchor","document","setAttribute","className","style","cssText","renderAnchor","rects","fromDOM","domAtPos","toDOM","createRange","setStart","offset","setEnd","getClientRects","filter","r","width","height","a","coordsAtPos","b","sameLine","abs","top","left","right","DOMRect","bottom","getRangeRects","els","elements","holder","appendChild","pop","remove","forEach","rect","positionAt","syncOverlay","anchors","existing","body","onScroll","repositionOverlay","onResize","window","addEventListener","ensureOverlay","has","size","anchorsGetter","keys","veltCommentsPluginKey","PluginKey","isSubscribed","selectedCommentsMap","subscribers","getCommentElement","velt","Velt","updateAnnotationContext","commentElement","updateContext","subscribeToSelectedAnnotations","callback","subscriberId","Date","now","random","getSelectedComments","subscribe","comments","newSelectedMap","comment","map1","map2","key","value","areMapsEqual","selectedIds","add","subscriber","applyAnnotationMark","isSelected","dispatch","tr","setMeta","type","removeAnnotationMark","updateComments","logPrefix","getSelectedAnnotations","visibleAnnotations","status","textEditorConfig","applyAnnotationMarks","updateSelection","_selectedIds","getEditorContext","subscriptionMap","renderComments","loaded","isVeltAvailable","isArray","finalEditorId","editorAnnotations","JSON","parse","stringify","annotationEditorId","editorIdForSubscription","unsubscribe","setSelectedAnnotations","debouncers","handleContentUpdate","pluginState","getState","allAnnotations","stored","find","currentText","anchorTextOffset","currentOccurrence","textChanged","occurrenceChanged","updatedContext","VeltCommentsPlugin","config","Plugin","init","apply","docChanged","remapped","mapping","mapResult","deleted","meta","getMeta","registerEditor","persistVeltMarks","getElementById","tag","textContent","head","injectOverlayStyles","initial","update","updatedView","prevState","delay","clearTimeout","handle","setTimeout","scheduleContentSync","destroy","cleanupRenderComments","removeEventListener","destroyOverlay","async","addComment","clientContext","selectionContext","empty","selection","trim","selectionTextOffset","locationId","getCurrentSelectionContext","userProvidedEditorId","location","veltResult","params","addManualComment","then","result","Promise","resolve","addVeltComment","target","clamped","content","TextSelection","create","setSelection","resetEditorSelection"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,228 @@
1
+ import { PluginKey, Plugin } from 'prosemirror-state';
2
+ import { EditorView } from 'prosemirror-view';
3
+ import { CommentAnnotation } from '@veltdev/types';
4
+
5
+ /**
6
+ * Common type definitions shared across the entire codebase.
7
+ * These types are SDK-agnostic and represent domain concepts.
8
+ */
9
+ /**
10
+ * Context object for comment annotations.
11
+ * Contains text editor configuration and any additional context data.
12
+ */
13
+ interface CommentAnnotationContext {
14
+ textEditorConfig?: {
15
+ text: string;
16
+ occurrence: number;
17
+ editorId?: string;
18
+ };
19
+ [key: string]: unknown;
20
+ }
21
+
22
+ /**
23
+ * Host adapter type definitions.
24
+ * These types represent ProseMirror-specific concepts.
25
+ * NOTE: This is the ONLY place where ProseMirror-specific public types are defined.
26
+ */
27
+
28
+ /**
29
+ * Configuration options for the VeltCommentsPlugin.
30
+ */
31
+ interface VeltCommentsPluginConfig {
32
+ /**
33
+ * Unique identifier for this editor instance.
34
+ * Used for multi-editor scenarios. When omitted a default id is used.
35
+ */
36
+ editorId?: string;
37
+ /**
38
+ * Reserved. Highlights are rendered as view-only decorations regardless of
39
+ * this value; it is kept for API parity with the other Velt comment packages.
40
+ */
41
+ persistVeltMarks?: boolean;
42
+ }
43
+ /**
44
+ * Request interface for the addComment function.
45
+ */
46
+ interface AddCommentRequest {
47
+ /**
48
+ * The host editor handle — a ProseMirror `EditorView`. Named `editor` (not
49
+ * `view`) to match the cross-library request shape used by every other
50
+ * `*-velt-comments` package (tiptap/lexical/slate/codemirror).
51
+ */
52
+ editor: EditorView;
53
+ /** Optional editor id (falls back to the plugin's configured / default id). */
54
+ editorId?: string;
55
+ /** Optional extra context merged into the Velt comment annotation. */
56
+ context?: CommentAnnotationContext;
57
+ }
58
+ /**
59
+ * Request interface for the renderComments function.
60
+ */
61
+ interface RenderCommentsRequest {
62
+ /**
63
+ * The host editor handle — a ProseMirror `EditorView`. Named `editor` (not
64
+ * `view`) to match the cross-library request shape used by every other
65
+ * `*-velt-comments` package (tiptap/lexical/slate/codemirror).
66
+ */
67
+ editor: EditorView;
68
+ /** Optional editor id (falls back to the plugin's configured / default id). */
69
+ editorId?: string;
70
+ /** The Velt comment annotations to render. */
71
+ commentAnnotations?: CommentAnnotation[];
72
+ }
73
+ /**
74
+ * A single resolved comment anchor stored in plugin state.
75
+ * `from`/`to` are live ProseMirror positions (remapped on every transaction);
76
+ * `text`/`occurrence` capture the last-known logical anchor for drift detection.
77
+ */
78
+ interface AnchorEntry {
79
+ from: number;
80
+ to: number;
81
+ text: string;
82
+ occurrence: number;
83
+ multiThreadAnnotationId?: string;
84
+ isSelected: boolean;
85
+ }
86
+ /**
87
+ * The plugin state held by the VeltCommentsPlugin. Anchors are remapped across
88
+ * every edit; the overlay renders the `<velt-comment-text>` elements from them.
89
+ */
90
+ interface VeltPluginState {
91
+ anchors: Map<string, AnchorEntry>;
92
+ editorId: string;
93
+ }
94
+
95
+ /**
96
+ * Plugin key module.
97
+ *
98
+ * Defined separately from core/extension.ts so that the adapters and features
99
+ * layers can read/write plugin state via the key without importing the whole
100
+ * extension module (which would create an import cycle).
101
+ */
102
+
103
+ /**
104
+ * The PluginKey used to read/write the VeltComments plugin state and to address
105
+ * meta commands at the plugin via `tr.setMeta(veltCommentsPluginKey, meta)`.
106
+ */
107
+ declare const veltCommentsPluginKey: PluginKey<VeltPluginState>;
108
+
109
+ /**
110
+ * Core extension module — the ProseMirror plugin.
111
+ *
112
+ * Purpose: the single plugin that powers Velt comments. It:
113
+ * - holds the resolved comment anchors in plugin state
114
+ * - remaps anchors across every document edit (via tr.mapping)
115
+ * - processes meta commands (add / sync / remove) dispatched by the adapters
116
+ * - renders the highlights as a stable overlay (see adapters/host/overlay.ts) and
117
+ * registers the editor view + content-drift detection (view hook)
118
+ *
119
+ * Highlights are rendered as view-only overlay elements — they are NOT written
120
+ * into the document. Consequently, after recreating the editor state (e.g.
121
+ * reloading content) the consumer must call renderComments() again.
122
+ *
123
+ * Why an overlay instead of decorations: the Velt SDK mutates the highlight
124
+ * element, and ProseMirror would discard such an externally-mutated inline
125
+ * decoration on its next redraw, orphaning the element Velt tracks (its dialog
126
+ * then loses its anchor). The overlay keeps one stable element per comment.
127
+ *
128
+ * Dependencies:
129
+ * - prosemirror-state / prosemirror-view
130
+ * - adapters/host/overlay.ts (stable highlight rendering)
131
+ * - adapters/host/doc.ts (editor id resolution)
132
+ * - core/registry.ts, core/pluginKey.ts
133
+ * - features/updateContent.ts, features/renderComments.ts (lifecycle wiring)
134
+ */
135
+
136
+ /**
137
+ * Creates the Velt comments ProseMirror plugin.
138
+ *
139
+ * Add it to your editor state's plugins:
140
+ * ```typescript
141
+ * import { EditorState } from 'prosemirror-state';
142
+ * import { VeltCommentsPlugin } from 'prosemirror-velt-comments';
143
+ *
144
+ * const state = EditorState.create({
145
+ * schema,
146
+ * plugins: [ ...otherPlugins, VeltCommentsPlugin({ editorId: 'doc-1' }) ],
147
+ * });
148
+ * ```
149
+ *
150
+ * @param config Optional configuration (editorId, persistVeltMarks).
151
+ * @returns A ProseMirror Plugin instance.
152
+ */
153
+ declare function VeltCommentsPlugin(config?: VeltCommentsPluginConfig): Plugin<VeltPluginState>;
154
+
155
+ /**
156
+ * Add comment feature module.
157
+ *
158
+ * Purpose: end-to-end add-comment orchestration.
159
+ *
160
+ * Key responsibilities:
161
+ * - Get the Velt comment element
162
+ * - Extract selection context from the editor
163
+ * - Create the comment via the Velt SDK
164
+ * - Apply the highlight decoration
165
+ * - Update state with the new annotation
166
+ *
167
+ * Dependencies:
168
+ * - adapters/velt.ts, adapters/host/doc.ts, adapters/host/marks.ts
169
+ * - core/state.ts
170
+ *
171
+ * IMPORTANT: This module MUST NOT import Velt types directly. All SDK access
172
+ * goes through adapters.
173
+ */
174
+
175
+ /**
176
+ * Adds a comment to the currently selected text in the editor.
177
+ *
178
+ * @param request Object containing editor, editorId (optional), and context (optional).
179
+ * @returns Promise that resolves when the comment is added (or fails silently).
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * await addComment({ editor });
184
+ * await addComment({ editor, editorId: 'doc-1', context: { customField: 'value' } });
185
+ * ```
186
+ *
187
+ * @remarks
188
+ * - Requires a non-empty text selection.
189
+ * - Requires the Velt SDK to be available (window.Velt).
190
+ * - Fails silently if the SDK is unavailable or the selection is invalid.
191
+ */
192
+ declare function addComment({ editor: view, editorId, context: clientContext, }: AddCommentRequest): Promise<void>;
193
+
194
+ /**
195
+ * Render comments feature module.
196
+ *
197
+ * Purpose: public API entry point for rendering comment annotations.
198
+ * Orchestrates state updates, subscriptions, and delegates to commentRenderer.
199
+ *
200
+ * Key responsibilities:
201
+ * - Update state with new annotations (filtered to this editor)
202
+ * - Subscribe to selected annotations from Velt (singleton per editor)
203
+ * - Delegate rendering logic to commentRenderer
204
+ *
205
+ * IMPORTANT: Highlights are view-only decorations. After recreating the editor
206
+ * state (e.g. reloading document content) you MUST call renderComments() again
207
+ * to re-apply the highlights.
208
+ *
209
+ * Dependencies:
210
+ * - adapters/velt.ts, adapters/host/doc.ts
211
+ * - core/state.ts
212
+ * - features/commentRenderer.ts
213
+ */
214
+
215
+ /**
216
+ * Renders comment annotations as decoration highlights in the editor.
217
+ *
218
+ * @param request Object containing editor, editorId (optional), and commentAnnotations.
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * renderComments({ editor, commentAnnotations });
223
+ * ```
224
+ */
225
+ declare const renderComments: ({ editor: view, editorId, commentAnnotations, }: RenderCommentsRequest) => void;
226
+
227
+ export { VeltCommentsPlugin, addComment, renderComments, veltCommentsPluginKey };
228
+ export type { AddCommentRequest, CommentAnnotationContext, RenderCommentsRequest, VeltCommentsPluginConfig };
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@veltdev/prosemirror-velt-comments",
3
+ "version": "1.0.0",
4
+ "description": "ProseMirror library to add Google Docs-style overlay comments to your ProseMirror editor. Works with the Velt Collaboration SDK.",
5
+ "homepage": "https://velt.dev",
6
+ "keywords": [
7
+ "prosemirror",
8
+ "rich-text",
9
+ "editor",
10
+ "react",
11
+ "velt",
12
+ "real-time",
13
+ "realtime",
14
+ "multiplayer",
15
+ "collaboration",
16
+ "collaborative",
17
+ "presence",
18
+ "documents",
19
+ "comment",
20
+ "comments",
21
+ "annotations",
22
+ "notifications"
23
+ ],
24
+ "scripts": {
25
+ "test": "echo \"Error: no test specified\" && exit 1",
26
+ "version:update": "node ../update-npm-package.mjs",
27
+ "publish:extension": "npm publish --access public"
28
+ },
29
+ "author": "Velt",
30
+ "license": "Proprietary",
31
+ "main": "cjs/index.js",
32
+ "module": "esm/index.js",
33
+ "types": "index.d.ts",
34
+ "peerDependencies": {
35
+ "prosemirror-model": "^1.19.0",
36
+ "prosemirror-state": "^1.4.0",
37
+ "prosemirror-view": "^1.30.0"
38
+ }
39
+ }