@@ -73,12 +73,11 @@ export const YCursorExtension = createExtension(
7373 NonNullable < BlockNoteEditorOptions < any , any , any > [ "collaboration" ] >
7474 > ) => {
7575 const recentlyUpdatedCursors = new Map ( ) ;
76-
77- if (
76+ const hasAwareness =
7877 options . provider &&
7978 "awareness" in options . provider &&
80- typeof options . provider . awareness === "object"
81- ) {
79+ typeof options . provider . awareness === "object" ;
80+ if ( hasAwareness ) {
8281 if (
8382 "setLocalStateField" in options . provider . awareness &&
8483 typeof options . provider . awareness . setLocalStateField === "function"
@@ -126,54 +125,56 @@ export const YCursorExtension = createExtension(
126125 return {
127126 key : "yCursor" ,
128127 prosemirrorPlugins : [
129- yCursorPlugin ( options . provider . awareness , {
130- selectionBuilder : defaultSelectionBuilder ,
131- cursorBuilder ( user : CollaborationUser , clientID : number ) {
132- let cursorData = recentlyUpdatedCursors . get ( clientID ) ;
133-
134- if ( ! cursorData ) {
135- const cursorElement = (
136- options . renderCursor ?? defaultCursorRender
137- ) ( user ) ;
138-
139- if ( options . showCursorLabels !== "always" ) {
140- cursorElement . addEventListener ( "mouseenter" , ( ) => {
141- const cursor = recentlyUpdatedCursors . get ( clientID ) ! ;
142- cursor . element . setAttribute ( "data-active" , "" ) ;
143-
144- if ( cursor . hideTimeout ) {
145- clearTimeout ( cursor . hideTimeout ) ;
146- recentlyUpdatedCursors . set ( clientID , {
147- element : cursor . element ,
148- hideTimeout : undefined ,
128+ hasAwareness
129+ ? yCursorPlugin ( options . provider . awareness , {
130+ selectionBuilder : defaultSelectionBuilder ,
131+ cursorBuilder ( user : CollaborationUser , clientID : number ) {
132+ let cursorData = recentlyUpdatedCursors . get ( clientID ) ;
133+
134+ if ( ! cursorData ) {
135+ const cursorElement = (
136+ options . renderCursor ?? defaultCursorRender
137+ ) ( user ) ;
138+
139+ if ( options . showCursorLabels !== "always" ) {
140+ cursorElement . addEventListener ( "mouseenter" , ( ) => {
141+ const cursor = recentlyUpdatedCursors . get ( clientID ) ! ;
142+ cursor . element . setAttribute ( "data-active" , "" ) ;
143+
144+ if ( cursor . hideTimeout ) {
145+ clearTimeout ( cursor . hideTimeout ) ;
146+ recentlyUpdatedCursors . set ( clientID , {
147+ element : cursor . element ,
148+ hideTimeout : undefined ,
149+ } ) ;
150+ }
149151 } ) ;
150- }
151- } ) ;
152152
153- cursorElement . addEventListener ( "mouseleave" , ( ) => {
154- const cursor = recentlyUpdatedCursors . get ( clientID ) ! ;
153+ cursorElement . addEventListener ( "mouseleave" , ( ) => {
154+ const cursor = recentlyUpdatedCursors . get ( clientID ) ! ;
155155
156- recentlyUpdatedCursors . set ( clientID , {
157- element : cursor . element ,
158- hideTimeout : setTimeout ( ( ) => {
159- cursor . element . removeAttribute ( "data-active" ) ;
160- } , 2000 ) ,
161- } ) ;
162- } ) ;
163- }
156+ recentlyUpdatedCursors . set ( clientID , {
157+ element : cursor . element ,
158+ hideTimeout : setTimeout ( ( ) => {
159+ cursor . element . removeAttribute ( "data-active" ) ;
160+ } , 2000 ) ,
161+ } ) ;
162+ } ) ;
163+ }
164164
165- cursorData = {
166- element : cursorElement ,
167- hideTimeout : undefined ,
168- } ;
165+ cursorData = {
166+ element : cursorElement ,
167+ hideTimeout : undefined ,
168+ } ;
169169
170- recentlyUpdatedCursors . set ( clientID , cursorData ) ;
171- }
170+ recentlyUpdatedCursors . set ( clientID , cursorData ) ;
171+ }
172172
173- return cursorData . element ;
174- } ,
175- } ) ,
176- ] ,
173+ return cursorData . element ;
174+ } ,
175+ } )
176+ : undefined ,
177+ ] . filter ( Boolean ) ,
177178 dependsOn : [ "ySync" ] ,
178179 updateUser ( user : { name : string ; color : string ; [ key : string ] : string } ) {
179180 options . provider . awareness . setLocalStateField ( "user" , user ) ;
0 commit comments