@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 +62 -0
- package/cjs/index.js +2 -0
- package/cjs/index.js.map +1 -0
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -0
- package/index.d.ts +228 -0
- package/package.json +39 -0
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
|
package/cjs/index.js.map
ADDED
|
@@ -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
|
package/esm/index.js.map
ADDED
|
@@ -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
|
+
}
|