From 0405e6a3f69488f7f18a21866e9e7be61a5c6b5c Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 12 Mar 2025 17:37:48 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(frontend)=20fix=20svg=20not=20rend?= =?UTF-8?q?ering=20export=20pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The svg was not rendering in the pdf export. We overwrite the default mapping to convert the svg to png before rendering. The images could be out of the page as well, we fixed this issue by adding a maxWidth to the image. --- .../e2e/__tests__/app-impress/assets/test.svg | 8 + .../__tests__/app-impress/doc-export.spec.ts | 6 +- src/frontend/apps/impress/package.json | 11 +- .../doc-export/blocks-mapping/imagePDF.tsx | 54 +++++++ .../docs/doc-export/blocks-mapping/index.ts | 1 + .../features/docs/doc-export/mappingPDF.tsx | 2 + .../src/features/docs/doc-export/utils.ts | 21 +++ src/frontend/package.json | 5 - src/frontend/yarn.lock | 139 ++++++++++++++++-- 9 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 src/frontend/apps/e2e/__tests__/app-impress/assets/test.svg create mode 100644 src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/imagePDF.tsx diff --git a/src/frontend/apps/e2e/__tests__/app-impress/assets/test.svg b/src/frontend/apps/e2e/__tests__/app-impress/assets/test.svg new file mode 100644 index 00000000..6da84dcd --- /dev/null +++ b/src/frontend/apps/e2e/__tests__/app-impress/assets/test.svg @@ -0,0 +1,8 @@ + + + + Hello svg + diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-export.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-export.spec.ts index c7f799aa..8b921ad7 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-export.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-export.spec.ts @@ -157,11 +157,9 @@ test.describe('Doc Export', () => { await page.getByText('Upload image').click(); const fileChooser = await fileChooserPromise; - await fileChooser.setFiles( - path.join(__dirname, 'assets/logo-suite-numerique.png'), - ); + await fileChooser.setFiles(path.join(__dirname, 'assets/test.svg')); - const image = page.getByRole('img', { name: 'logo-suite-numerique.png' }); + const image = page.getByRole('img', { name: 'test.svg' }); await expect(image).toBeVisible(); diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json index d1eec73a..540b9f4b 100644 --- a/src/frontend/apps/impress/package.json +++ b/src/frontend/apps/impress/package.json @@ -16,17 +16,18 @@ }, "dependencies": { "@ag-media/react-pdf-table": "2.0.1", - "@blocknote/core": "*", - "@blocknote/mantine": "*", - "@blocknote/react": "*", - "@blocknote/xl-docx-exporter": "*", - "@blocknote/xl-pdf-exporter": "*", + "@blocknote/core": "0.23.2-hotfix.0", + "@blocknote/mantine": "0.23.2-hotfix.0", + "@blocknote/react": "0.23.2-hotfix.0", + "@blocknote/xl-docx-exporter": "0.23.2-hotfix.0", + "@blocknote/xl-pdf-exporter": "0.23.2-hotfix.0", "@gouvfr-lasuite/integration": "1.0.2", "@hocuspocus/provider": "2.15.2", "@openfun/cunningham-react": "3.0.0", "@react-pdf/renderer": "4.1.6", "@sentry/nextjs": "9.3.0", "@tanstack/react-query": "5.67.1", + "canvg": "4.0.2", "cmdk": "1.0.4", "crisp-sdk-web": "1.0.25", "docx": "9.1.1", diff --git a/src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/imagePDF.tsx b/src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/imagePDF.tsx new file mode 100644 index 00000000..134bf391 --- /dev/null +++ b/src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/imagePDF.tsx @@ -0,0 +1,54 @@ +/* eslint-disable jsx-a11y/alt-text */ +import { DefaultProps } from '@blocknote/core'; +import { Image, Text, View } from '@react-pdf/renderer'; + +import { DocsExporterPDF } from '../types'; +import { convertSvgToPng } from '../utils'; + +const PIXELS_PER_POINT = 0.75; +const FONT_SIZE = 16; + +export const blockMappingImagePDF: DocsExporterPDF['mappings']['blockMapping']['image'] = + async (block, exporter) => { + const blob = await exporter.resolveFile(block.props.url); + let pngConverted: string | undefined; + + if (blob.type.includes('svg')) { + const svgText = await blob.text(); + pngConverted = await convertSvgToPng(svgText); + } + + return ( + + + {caption(block.props)} + + ); + }; + +function caption( + props: Partial, +) { + if (!props.caption) { + return undefined; + } + return ( + + {props.caption} + + ); +} diff --git a/src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/index.ts b/src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/index.ts index 38d4ba84..69eb7da2 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/index.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/index.ts @@ -1,6 +1,7 @@ export * from './dividerDocx'; export * from './dividerPDF'; export * from './headingPDF'; +export * from './imagePDF'; export * from './paragraphPDF'; export * from './quoteDocx'; export * from './quotePDF'; diff --git a/src/frontend/apps/impress/src/features/docs/doc-export/mappingPDF.tsx b/src/frontend/apps/impress/src/features/docs/doc-export/mappingPDF.tsx index de16a6c3..380e2f1a 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-export/mappingPDF.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-export/mappingPDF.tsx @@ -3,6 +3,7 @@ import { pdfDefaultSchemaMappings } from '@blocknote/xl-pdf-exporter'; import { blockMappingDividerPDF, blockMappingHeadingPDF, + blockMappingImagePDF, blockMappingParagraphPDF, blockMappingQuotePDF, blockMappingTablePDF, @@ -14,6 +15,7 @@ export const pdfDocsSchemaMappings: DocsExporterPDF['mappings'] = { blockMapping: { ...pdfDefaultSchemaMappings.blockMapping, heading: blockMappingHeadingPDF, + image: blockMappingImagePDF, paragraph: blockMappingParagraphPDF, divider: blockMappingDividerPDF, quote: blockMappingQuotePDF, diff --git a/src/frontend/apps/impress/src/features/docs/doc-export/utils.ts b/src/frontend/apps/impress/src/features/docs/doc-export/utils.ts index 248b7033..bdebc052 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-export/utils.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-export/utils.ts @@ -3,6 +3,7 @@ import { DefaultProps, UnreachableCaseError, } from '@blocknote/core'; +import { Canvg } from 'canvg'; import { IParagraphOptions, ShadingType } from 'docx'; export function downloadFile(blob: Blob, filename: string) { @@ -17,6 +18,26 @@ export function downloadFile(blob: Blob, filename: string) { window.URL.revokeObjectURL(url); } +/** + * Convert SVG to PNG + * @param svgText - The SVG text to convert + * @returns The PNG data URL + */ +export async function convertSvgToPng(svgText: string) { + // Create a canvas and render the SVG onto it + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + + if (!ctx) { + throw new Error('Canvas context is null'); + } + + const svg = Canvg.fromString(ctx, svgText); + await svg.render(); + + return canvas.toDataURL('image/png'); +} + export function docxBlockPropsToStyles( props: Partial, colors: typeof COLORS_DEFAULT, diff --git a/src/frontend/package.json b/src/frontend/package.json index 44efdba6..2029c548 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -28,11 +28,6 @@ "server:test": "yarn COLLABORATION_SERVER run test" }, "resolutions": { - "@blocknote/core": "0.23.2-hotfix.0", - "@blocknote/mantine": "0.23.2-hotfix.0", - "@blocknote/react": "0.23.2-hotfix.0", - "@blocknote/xl-docx-exporter": "0.23.2-hotfix.0", - "@blocknote/xl-pdf-exporter": "0.23.2-hotfix.0", "@types/node": "22.13.9", "@types/react": "19.0.0", "@types/react-dom": "19.0.0", diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock index efbfd5b5..ca70db98 100644 --- a/src/frontend/yarn.lock +++ b/src/frontend/yarn.lock @@ -1004,7 +1004,7 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@blocknote/core@*", "@blocknote/core@0.23.2-hotfix.0", "@blocknote/core@^0.23.2", "@blocknote/core@^0.23.2-hotfix.0": +"@blocknote/core@0.23.2-hotfix.0", "@blocknote/core@^0.23.2-hotfix.0": version "0.23.2-hotfix.0" resolved "https://registry.yarnpkg.com/@blocknote/core/-/core-0.23.2-hotfix.0.tgz#f95e64dfa6a481baac27414242b08b593bf6383d" integrity sha512-y+fAV7YBwRQYonITjcSYiydTqZMA2VePBkcurLGDGU/OV3V/ihSsS8TjhABVf3l+w5bX3bp1i1ZuyhiGopyFBg== @@ -1053,7 +1053,56 @@ y-protocols "^1.0.6" yjs "^13.6.15" -"@blocknote/mantine@*", "@blocknote/mantine@0.23.2-hotfix.0": +"@blocknote/core@^0.23.2", "@blocknote/core@^0.23.6": + version "0.23.6" + resolved "https://registry.yarnpkg.com/@blocknote/core/-/core-0.23.6.tgz#3cffea4549b77a6d6a9406ad9bb3e56e8c76d3ab" + integrity sha512-X5bxzFCgAG42lT2NhKJQdEQp0DEWaY4DJdGo76d2o3xef+bNGCLRe4i2XkGty2B9B3uYElgHqz6GYGeF0Hfn5g== + dependencies: + "@emoji-mart/data" "^1.2.1" + "@tiptap/core" "^2.7.1" + "@tiptap/extension-bold" "^2.7.1" + "@tiptap/extension-code" "^2.7.1" + "@tiptap/extension-collaboration" "^2.7.1" + "@tiptap/extension-collaboration-cursor" "^2.7.1" + "@tiptap/extension-gapcursor" "^2.7.1" + "@tiptap/extension-hard-break" "^2.7.1" + "@tiptap/extension-history" "^2.7.1" + "@tiptap/extension-horizontal-rule" "^2.7.1" + "@tiptap/extension-italic" "^2.7.1" + "@tiptap/extension-link" "^2.7.1" + "@tiptap/extension-paragraph" "^2.7.1" + "@tiptap/extension-strike" "^2.7.1" + "@tiptap/extension-table-cell" "^2.7.1" + "@tiptap/extension-table-header" "^2.7.1" + "@tiptap/extension-table-row" "^2.7.1" + "@tiptap/extension-text" "^2.7.1" + "@tiptap/extension-underline" "^2.7.1" + "@tiptap/pm" "^2.7.1" + emoji-mart "^5.6.0" + hast-util-from-dom "^4.2.0" + prosemirror-dropcursor "^1.8.1" + prosemirror-highlight "^0.9.0" + prosemirror-model "^1.23.0" + prosemirror-state "^1.4.3" + prosemirror-tables "^1.6.1" + prosemirror-transform "^1.10.2" + prosemirror-view "^1.38.0" + rehype-format "^5.0.0" + rehype-parse "^8.0.4" + rehype-remark "^9.1.2" + rehype-stringify "^9.0.3" + remark-gfm "^3.0.1" + remark-parse "^10.0.1" + remark-rehype "^10.1.0" + remark-stringify "^10.0.2" + shiki "^1.22.0" + unified "^10.1.2" + uuid "^8.3.2" + y-prosemirror "1.2.13" + y-protocols "^1.0.6" + yjs "^13.6.15" + +"@blocknote/mantine@0.23.2-hotfix.0": version "0.23.2-hotfix.0" resolved "https://registry.yarnpkg.com/@blocknote/mantine/-/mantine-0.23.2-hotfix.0.tgz#695a6b44b92fab91ee0dcaa93c4224bc573374f4" integrity sha512-8SNBzgdOiYz+of/BfZY15nG71fmB0jk2eKjVliU4fWbhyKCM5ZJ86I2/5Ap8yBNP6ZtrV7QEEKyUqelg7/U/PA== @@ -1065,7 +1114,7 @@ "@mantine/utils" "^6.0.21" react-icons "^5.2.1" -"@blocknote/react@*", "@blocknote/react@0.23.2-hotfix.0", "@blocknote/react@^0.23.2", "@blocknote/react@^0.23.2-hotfix.0": +"@blocknote/react@0.23.2-hotfix.0", "@blocknote/react@^0.23.2-hotfix.0": version "0.23.2-hotfix.0" resolved "https://registry.yarnpkg.com/@blocknote/react/-/react-0.23.2-hotfix.0.tgz#4fc52986b6b22598ee89a5ab1cafbe3d2d04ae0b" integrity sha512-POcDQHc4VsNrGxDH6DPcm2SeAaSnqQgWgGKCGljR1+4HaaqdK56WbHYeFw4W70jJcj5W6zY0keoev+r3lNH86Q== @@ -1077,6 +1126,18 @@ lodash.merge "^4.6.2" react-icons "^5.2.1" +"@blocknote/react@^0.23.2": + version "0.23.6" + resolved "https://registry.yarnpkg.com/@blocknote/react/-/react-0.23.6.tgz#359272d4a7116822254c32710ec889f6ae503a72" + integrity sha512-HHlutNtgDNuSLYPyDjbyAGSimSY+CTG3Uvga5J8E4aky2XvxDQhrp1w2iPdOX5IAcLbpuqTOpDbdRj5pfTvveA== + dependencies: + "@blocknote/core" "^0.23.6" + "@floating-ui/react" "^0.26.4" + "@tiptap/core" "^2.7.1" + "@tiptap/react" "^2.7.1" + lodash.merge "^4.6.2" + react-icons "^5.2.1" + "@blocknote/server-util@0.23.2": version "0.23.2" resolved "https://registry.yarnpkg.com/@blocknote/server-util/-/server-util-0.23.2.tgz#aa2123b71027b8db1f98e7e3073c87361902fd19" @@ -1091,7 +1152,7 @@ y-protocols "^1.0.6" yjs "^13.6.15" -"@blocknote/xl-docx-exporter@*", "@blocknote/xl-docx-exporter@0.23.2-hotfix.0": +"@blocknote/xl-docx-exporter@0.23.2-hotfix.0": version "0.23.2-hotfix.0" resolved "https://registry.yarnpkg.com/@blocknote/xl-docx-exporter/-/xl-docx-exporter-0.23.2-hotfix.0.tgz#4be683d38da35d7b056f759e033a59335746c88b" integrity sha512-LXodW2toxtjx2WE7ZOUFdrqnuahjpt5+12EkA1n3BeMIoApv7BKsPKmwkvMLmjg3S+8VX29tiOxFqRUOUL75lQ== @@ -1101,7 +1162,7 @@ docx "^9.0.2" sharp "^0.33.5" -"@blocknote/xl-pdf-exporter@*", "@blocknote/xl-pdf-exporter@0.23.2-hotfix.0": +"@blocknote/xl-pdf-exporter@0.23.2-hotfix.0": version "0.23.2-hotfix.0" resolved "https://registry.yarnpkg.com/@blocknote/xl-pdf-exporter/-/xl-pdf-exporter-0.23.2-hotfix.0.tgz#a9a64e66e0d3f87a28efc9de689c3a14ce573025" integrity sha512-1QPOSv+2OeUAEGY2yDxRsZopv/rdpZZ2U6amvipwGXwH9KmXqenFOuM8ZrrHf/UAens9vXGRx4ezKaAkdm/Nmw== @@ -6188,7 +6249,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@22.13.9", "@types/node@^22.7.5": +"@types/node@*", "@types/node@^22.7.5": version "22.13.9" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.9.tgz#5d9a8f7a975a5bd3ef267352deb96fb13ec02eca" integrity sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw== @@ -6240,12 +6301,17 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== +"@types/raf@^3.4.0": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" + integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== + "@types/range-parser@*": version "1.2.7" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@*", "@types/react-dom@19.0.0": +"@types/react-dom@*": version "19.0.0" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.0.tgz#e7f5d618a080486eaf9952246dbf59eaa2c64130" integrity sha512-1KfiQKsH1o00p9m5ag12axHQSb3FOU9H20UTrujVSkNhuCrRHiQWFqgEnTNK5ZNfnzZv8UWrnXVqCmCF9fgY3w== @@ -6264,7 +6330,7 @@ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@*", "@types/react@19.0.0": +"@types/react@*": version "19.0.0" resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.0.tgz#fbbb53ce223f4e2b750ad5dd09580b2c43522bbf" integrity sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg== @@ -6382,7 +6448,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@*", "@typescript-eslint/eslint-plugin@8.26.0", "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": +"@typescript-eslint/eslint-plugin@*", "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version "8.26.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz#7e880faf91f89471c30c141951e15f0eb3a0599e" integrity sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q== @@ -6397,7 +6463,7 @@ natural-compare "^1.4.0" ts-api-utils "^2.0.1" -"@typescript-eslint/parser@*", "@typescript-eslint/parser@8.26.0", "@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": +"@typescript-eslint/parser@*", "@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version "8.26.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.0.tgz#9b4d2198e89f64fb81e83167eedd89a827d843a9" integrity sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA== @@ -7312,6 +7378,17 @@ caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001688: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz#00c30a2fc11e3c98c25e5125418752af3ae2f49f" integrity sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ== +canvg@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/canvg/-/canvg-4.0.2.tgz#e08a6b100aa69f908933476cecf4bcc558d741de" + integrity sha512-/7kIZger/mdFci4KXdtMr+NQB4GU1InkJ4RwSyDBRcvy4BUlg1hD+ZUWo550sWPyWaKZ8purqby6kjf09qVriw== + dependencies: + "@types/raf" "^3.4.0" + raf "^3.4.1" + rgbcolor "^1.0.1" + stackblur-canvas "^2.0.0" + svg-pathdata "^6.0.3" + ccount@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" @@ -8613,7 +8690,7 @@ eslint-visitor-keys@^4.2.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== -eslint@*, eslint@8.57.0: +eslint@*: version "8.57.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -12254,6 +12331,11 @@ pdf-parse@1.1.1: debug "^3.1.0" node-ensure "^0.0.0" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" @@ -12696,6 +12778,15 @@ prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, pros prosemirror-state "^1.0.0" prosemirror-transform "^1.1.0" +prosemirror-view@^1.38.0: + version "1.38.1" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.38.1.tgz#566d30cc8b00a68d6b4c60f5d8a6ab97c82990b3" + integrity sha512-4FH/uM1A4PNyrxXbD+RAbAsf0d/mM0D/wAKSVVWK7o0A9Q/oOXJBrw786mBf2Vnrs/Edly6dH6Z2gsb7zWwaUw== + dependencies: + prosemirror-model "^1.20.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -12786,6 +12877,13 @@ quick-temp@^0.1.8: rimraf "^2.5.4" underscore.string "~3.3.4" +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -13572,6 +13670,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rgbcolor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" + integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw== + rimraf@^2.5.4: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -14049,6 +14152,11 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +stackblur-canvas@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" + integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ== + stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -14400,6 +14508,11 @@ svg-parser@^2.0.4: resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== +svg-pathdata@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac" + integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== + svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" @@ -14806,7 +14919,7 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typescript@*, typescript@5.8.2, typescript@^5.0.4: +typescript@*, typescript@^5.0.4: version "5.8.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== @@ -15823,7 +15936,7 @@ yargs@17.7.2, yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" -yjs@*, yjs@13.6.23, yjs@^13.6.15: +yjs@*, yjs@^13.6.15: version "13.6.23" resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.6.23.tgz#62358dfa52e92dc870b8a0bedcf0d4cbd4c5ffa8" integrity sha512-ExtnT5WIOVpkL56bhLeisG/N5c4fmzKn4k0ROVfJa5TY2QHbH7F0Wu2T5ZhR7ErsFWQEFafyrnSI8TPKVF9Few==