🐛(frontend) fix svg not rendering export pdf

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.
This commit is contained in:
Anthony LC
2025-03-12 17:37:48 +01:00
committed by Anthony LC
parent cb8bd4b937
commit 0405e6a3f6
9 changed files with 220 additions and 27 deletions

View File

@@ -0,0 +1,8 @@
<svg width="100" height="100" viewBox="0 0 100 100">
<circle cx="50" cy="30" r="20" fill="#3498db" />
<polygon
points="50,10 55,20 65,20 58,30 60,40 50,35 40,40 42,30 35,20 45,20"
fill="#f1c40f"
/>
<text x="50" y="70" text-anchor="middle" fill="white">Hello svg</text>
</svg>

After

Width:  |  Height:  |  Size: 292 B

View File

@@ -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();

View File

@@ -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",

View File

@@ -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 (
<View wrap={false}>
<Image
src={pngConverted || blob}
style={{
width: block.props.previewWidth * PIXELS_PER_POINT,
maxWidth: '100%',
}}
/>
{caption(block.props)}
</View>
);
};
function caption(
props: Partial<DefaultProps & { caption: string; previewWidth: number }>,
) {
if (!props.caption) {
return undefined;
}
return (
<Text
style={{
width: props.previewWidth
? props.previewWidth * PIXELS_PER_POINT
: undefined,
fontSize: FONT_SIZE * 0.8 * PIXELS_PER_POINT,
maxWidth: '100%',
}}
>
{props.caption}
</Text>
);
}

View File

@@ -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';

View File

@@ -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,

View File

@@ -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<DefaultProps>,
colors: typeof COLORS_DEFAULT,

View File

@@ -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",

View File

@@ -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==