diff --git a/demo/package.json b/demo/package.json index 9b9f87a..07724fd 100644 --- a/demo/package.json +++ b/demo/package.json @@ -11,7 +11,7 @@ "@superdoc-dev/template-builder": "link:../.", "react": "^19.2.0", "react-dom": "^19.2.0", - "superdoc": "^0.31.2" + "superdoc": "^0.35.3" }, "devDependencies": { "@types/react": "^19.2.6", diff --git a/demo/pnpm-lock.yaml b/demo/pnpm-lock.yaml index bae0666..ce72126 100644 --- a/demo/pnpm-lock.yaml +++ b/demo/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^19.2.0 version: 19.2.0(react@19.2.0) superdoc: - specifier: ^0.31.2 - version: 0.31.2(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(canvas@2.11.2)(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) + specifier: ^0.35.3 + version: 0.35.3(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(canvas@2.11.2)(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) devDependencies: '@types/react': specifier: ^19.2.6 @@ -1249,8 +1249,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - superdoc@0.31.2: - resolution: {integrity: sha512-3mWHJnww23UQKiuNZqVX+Gv14on11UuSZYNpHJ7GmTFeXvTF+aakFU+Z8sZGq6ZPhq2vlVreR6hZ8V2MXnHMEA==} + superdoc@0.35.3: + resolution: {integrity: sha512-6vyHmb4dSnEeD3RvWVZLuhGrFdp7tSnMp7sn8sdA52ApjU6AuAf7rr4OSdZtdqs5YbYZ1J2CMyg2FKcUI+6Eig==} peerDependencies: '@hocuspocus/provider': ^2.13.6 pdfjs-dist: '>=4.3.136 <=4.6.82' @@ -2717,7 +2717,7 @@ snapshots: ansi-regex: 5.0.1 optional: true - superdoc@0.31.2(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(canvas@2.11.2)(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): + superdoc@0.35.3(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(canvas@2.11.2)(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): dependencies: '@hocuspocus/provider': 2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19) buffer-crc32: 1.0.0 diff --git a/package.json b/package.json index 0757899..90d05b4 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "superdoc": "^0.31.2" + "superdoc": "^0.35.3" }, "devDependencies": { "@commitlint/cli": "^20.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52335ba..1a984aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: superdoc: - specifier: ^0.31.2 - version: 0.31.2(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) + specifier: ^0.35.3 + version: 0.35.3(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19) devDependencies: '@commitlint/cli': specifier: ^20.1.0 @@ -3537,8 +3537,8 @@ packages: resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==} engines: {node: '>=18'} - superdoc@0.31.2: - resolution: {integrity: sha512-3mWHJnww23UQKiuNZqVX+Gv14on11UuSZYNpHJ7GmTFeXvTF+aakFU+Z8sZGq6ZPhq2vlVreR6hZ8V2MXnHMEA==} + superdoc@0.35.3: + resolution: {integrity: sha512-6vyHmb4dSnEeD3RvWVZLuhGrFdp7tSnMp7sn8sdA52ApjU6AuAf7rr4OSdZtdqs5YbYZ1J2CMyg2FKcUI+6Eig==} peerDependencies: '@hocuspocus/provider': ^2.13.6 pdfjs-dist: '>=4.3.136 <=4.6.82' @@ -7984,7 +7984,7 @@ snapshots: function-timeout: 1.0.2 time-span: 5.1.0 - superdoc@0.31.2(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): + superdoc@0.35.3(@hocuspocus/provider@2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(pdfjs-dist@4.6.82)(typescript@5.9.3)(y-prosemirror@1.3.7(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3)(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19))(yjs@13.6.19): dependencies: '@hocuspocus/provider': 2.15.3(y-protocols@1.0.6(yjs@13.6.19))(yjs@13.6.19) buffer-crc32: 1.0.0 diff --git a/src/index.tsx b/src/index.tsx index 44c5a93..56db740 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -367,101 +367,100 @@ const SuperDocTemplateBuilder = forwardRef< const initSuperDoc = async () => { const { SuperDoc } = await import('superdoc'); - const config: Record = { - selector: containerRef.current!, - document: document?.source, - documentMode: document?.mode || 'editing', - onReady: () => { - if (instance.activeEditor) { - const editor = instance.activeEditor; - - editor.on('update', ({ editor: e }: any) => { - const { state } = e; - const { from } = state.selection; - - if (from >= trigger.length) { - const triggerStart = from - trigger.length; - const text = state.doc.textBetween(triggerStart, from); - - if (text === trigger) { - const coords = e.view.coordsAtPos(from); - const bounds = clampToViewport(new DOMRect(coords.left, coords.top, 0, 0)); - - const cleanup = () => { - const editor = superdocRef.current?.activeEditor; - if (!editor) return; - const currentPos = editor.state.selection.from; - const tr = editor.state.tr.delete(triggerStart, currentPos); - (editor as any).view.dispatch(tr); - }; - - triggerCleanupRef.current = cleanup; - menuTriggerFromRef.current = from; - setMenuPosition(bounds); - setMenuVisible(true); - resetMenuFilter(); - - onTrigger?.({ - position: { from: triggerStart, to: from }, - bounds, - cleanup, - }); - - return; - } - } - - if (!menuVisibleRef.current) { - return; - } + const modules: Record = { + comments: false, + ...(toolbarSettings && { + toolbar: { + selector: toolbarSettings.selector, + toolbarGroups: toolbarSettings.config.toolbarGroups || ['center'], + excludeItems: toolbarSettings.config.excludeItems || [], + ...toolbarSettings.config, + }, + }), + }; - if (menuTriggerFromRef.current == null) { - setMenuVisible(false); + const handleReady = () => { + if (instance.activeEditor) { + const editor = instance.activeEditor; + + editor.on('update', ({ editor: e }: any) => { + const { state } = e; + const { from } = state.selection; + + if (from >= trigger.length) { + const triggerStart = from - trigger.length; + const text = state.doc.textBetween(triggerStart, from); + + if (text === trigger) { + const coords = e.view.coordsAtPos(from); + const bounds = clampToViewport(new DOMRect(coords.left, coords.top, 0, 0)); + + const cleanup = () => { + const editor = superdocRef.current?.activeEditor; + if (!editor) return; + const currentPos = editor.state.selection.from; + const tr = editor.state.tr.delete(triggerStart, currentPos); + (editor as any).view.dispatch(tr); + }; + + triggerCleanupRef.current = cleanup; + menuTriggerFromRef.current = from; + setMenuPosition(bounds); + setMenuVisible(true); resetMenuFilter(); - return; - } - if (from < menuTriggerFromRef.current) { - setMenuVisible(false); - menuTriggerFromRef.current = null; - resetMenuFilter(); + onTrigger?.({ + position: { from: triggerStart, to: from }, + bounds, + cleanup, + }); + return; } + } + + if (!menuVisibleRef.current) { + return; + } + + if (menuTriggerFromRef.current == null) { + setMenuVisible(false); + resetMenuFilter(); + return; + } + + if (from < menuTriggerFromRef.current) { + setMenuVisible(false); + menuTriggerFromRef.current = null; + resetMenuFilter(); + return; + } + + const queryText = state.doc.textBetween(menuTriggerFromRef.current, from); + updateMenuFilter(queryText); + + const coords = e.view.coordsAtPos(from); + const bounds = clampToViewport(new DOMRect(coords.left, coords.top, 0, 0)); + setMenuPosition(bounds); + }); - const queryText = state.doc.textBetween(menuTriggerFromRef.current, from); - updateMenuFilter(queryText); - - const coords = e.view.coordsAtPos(from); - const bounds = clampToViewport(new DOMRect(coords.left, coords.top, 0, 0)); - setMenuPosition(bounds); - }); - - editor.on('update', () => { - discoverFields(editor); - }); - + editor.on('update', () => { discoverFields(editor); - } + }); + + discoverFields(editor); + } - onReady?.(); - }, + onReady?.(); }; const instance = new SuperDoc({ selector: containerRef.current!, + document: document?.source, documentMode: document?.mode || 'editing', - ...config, - ...(toolbarSettings && { - toolbar: toolbarSettings.selector, - modules: { - toolbar: { - selector: toolbarSettings.selector, - toolbarGroups: toolbarSettings.config.toolbarGroups || ['center'], - excludeItems: toolbarSettings.config.excludeItems || [], - ...toolbarSettings.config, - }, - }, - }), + modules, + toolbar: toolbarSettings?.selector, + onReady: handleReady, }); superdocRef.current = instance;