From 12e7bf692084e14563ea53b34d3135d2fd1cc11b Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 11 Apr 2024 20:45:18 +0200 Subject: feat(web): embed SVG into HTML directly * Makes sure element IDs and CSS do not interfere with other diagrams in the same HTML document. * Disables SVGO to allow embedding in Docusaurus with CSS intact. * Replaces PNG figures with SVG in documentation. --- subprojects/docs/docusaurus.config.ts | 1 + subprojects/docs/src/css/custom.css | 4 + .../docs/src/learn/tutorials/file-system/fig1.png | Bin 20110 -> 0 bytes .../learn/tutorials/file-system/fig1.png.license | 3 - .../docs/src/learn/tutorials/file-system/fig1.svg | 72 ++++++++++ .../learn/tutorials/file-system/fig1.svg.license | 3 + .../docs/src/learn/tutorials/file-system/fig2.png | Bin 44020 -> 0 bytes .../learn/tutorials/file-system/fig2.png.license | 3 - .../docs/src/learn/tutorials/file-system/fig2.svg | 145 +++++++++++++++++++++ .../learn/tutorials/file-system/fig2.svg.license | 3 + .../docs/src/learn/tutorials/file-system/fig3.png | Bin 26950 -> 0 bytes .../learn/tutorials/file-system/fig3.png.license | 3 - .../docs/src/learn/tutorials/file-system/fig3.svg | 124 ++++++++++++++++++ .../learn/tutorials/file-system/fig3.svg.license | 3 + .../docs/src/learn/tutorials/file-system/fig4.png | Bin 38143 -> 0 bytes .../learn/tutorials/file-system/fig4.png.license | 3 - .../docs/src/learn/tutorials/file-system/fig4.svg | 131 +++++++++++++++++++ .../learn/tutorials/file-system/fig4.svg.license | 3 + .../docs/src/learn/tutorials/file-system/index.md | 16 ++- subprojects/docs/src/plugins/loadersPlugin.ts | 72 ++++++++++ .../frontend/src/graph/export/ExportPanel.tsx | 52 ++++++-- .../src/graph/export/ExportSettingsStore.ts | 28 +++- .../frontend/src/graph/export/exportDiagram.tsx | 122 +++++++++++++---- yarn.lock | 132 +++++++++++-------- 24 files changed, 813 insertions(+), 110 deletions(-) delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig1.png delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig1.png.license create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig1.svg create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig1.svg.license delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig2.png delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig2.png.license create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig2.svg create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig2.svg.license delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig3.png delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig3.png.license create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig3.svg create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig3.svg.license delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig4.png delete mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig4.png.license create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig4.svg create mode 100644 subprojects/docs/src/learn/tutorials/file-system/fig4.svg.license create mode 100644 subprojects/docs/src/plugins/loadersPlugin.ts diff --git a/subprojects/docs/docusaurus.config.ts b/subprojects/docs/docusaurus.config.ts index ed5e450e..62d963a1 100644 --- a/subprojects/docs/docusaurus.config.ts +++ b/subprojects/docs/docusaurus.config.ts @@ -52,6 +52,7 @@ export default { markdownOptions satisfies PagesOptions, ], '@docusaurus/plugin-sitemap', + './src/plugins/loadersPlugin.ts', './src/plugins/swcMinifyPlugin.ts', ], themes: [ diff --git a/subprojects/docs/src/css/custom.css b/subprojects/docs/src/css/custom.css index f9c14bc4..51d9e698 100644 --- a/subprojects/docs/src/css/custom.css +++ b/subprojects/docs/src/css/custom.css @@ -125,3 +125,7 @@ code { .hero__title { font-weight: 800; } + +.markdown svg { + max-width: 100%; +} diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig1.png b/subprojects/docs/src/learn/tutorials/file-system/fig1.png deleted file mode 100644 index da30af3c..00000000 Binary files a/subprojects/docs/src/learn/tutorials/file-system/fig1.png and /dev/null differ diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig1.png.license b/subprojects/docs/src/learn/tutorials/file-system/fig1.png.license deleted file mode 100644 index ff75bc7c..00000000 --- a/subprojects/docs/src/learn/tutorials/file-system/fig1.png.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 The Refinery Authors - -SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig1.svg b/subprojects/docs/src/learn/tutorials/file-system/fig1.svg new file mode 100644 index 00000000..f39a43fe --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig1.svg @@ -0,0 +1,72 @@ + + + + + + + + +FileSystem::new + +FileSystem + + + + + + + + + +File::new + +File + + + + + + + + + +root + + + + + + +Dir::new + +File + + +Dir + + + + + + + + + +root + + + + + + +element + + + + + + +element + + + \ No newline at end of file diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig1.svg.license b/subprojects/docs/src/learn/tutorials/file-system/fig1.svg.license new file mode 100644 index 00000000..ff75bc7c --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig1.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The Refinery Authors + +SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig2.png b/subprojects/docs/src/learn/tutorials/file-system/fig2.png deleted file mode 100644 index f42e3d3e..00000000 Binary files a/subprojects/docs/src/learn/tutorials/file-system/fig2.png and /dev/null differ diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig2.png.license b/subprojects/docs/src/learn/tutorials/file-system/fig2.png.license deleted file mode 100644 index ff75bc7c..00000000 --- a/subprojects/docs/src/learn/tutorials/file-system/fig2.png.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 The Refinery Authors - -SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig2.svg b/subprojects/docs/src/learn/tutorials/file-system/fig2.svg new file mode 100644 index 00000000..f7e85fd5 --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig2.svg @@ -0,0 +1,145 @@ + + + + + + + + +FileSystem::new + +FileSystem + + + + + + + + + +File::new + +File + + + + + + + + + +root + + + + + + +Dir::new + +File + + +Dir + + + + + + + + + +root + + + + + + + +element + + + + +resources + +File + + +Dir + + + + + + + + + + + +element + + + + +root + + + + + + + + +element + + + + + + +element + + + + + + +img + +File + + +Dir + + + + + + + + + +element + + + + + + +element + + + + + + +element + + + \ No newline at end of file diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig2.svg.license b/subprojects/docs/src/learn/tutorials/file-system/fig2.svg.license new file mode 100644 index 00000000..ff75bc7c --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig2.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The Refinery Authors + +SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig3.png b/subprojects/docs/src/learn/tutorials/file-system/fig3.png deleted file mode 100644 index 9506417a..00000000 Binary files a/subprojects/docs/src/learn/tutorials/file-system/fig3.png and /dev/null differ diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig3.png.license b/subprojects/docs/src/learn/tutorials/file-system/fig3.png.license deleted file mode 100644 index ff75bc7c..00000000 --- a/subprojects/docs/src/learn/tutorials/file-system/fig3.png.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 The Refinery Authors - -SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig3.svg b/subprojects/docs/src/learn/tutorials/file-system/fig3.svg new file mode 100644 index 00000000..4137e035 --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig3.svg @@ -0,0 +1,124 @@ + + + + + + + + +FileSystem::new + +FileSystem +exists + + + + + + + + + + + +File::new + +File +exists + + + + + + + + + +equals + + + + + + +Dir::new + +File +exists + + + + +Dir + + + + + + + + + + +equals + + + + + + +resources + +File +exists + + + + +Dir + + + + + + + +equals + + + + + + + + +equals + + + + + + +img + +File +exists + + + + +Dir + + + + + + + + + + +equals + + + \ No newline at end of file diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig3.svg.license b/subprojects/docs/src/learn/tutorials/file-system/fig3.svg.license new file mode 100644 index 00000000..ff75bc7c --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig3.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The Refinery Authors + +SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig4.png b/subprojects/docs/src/learn/tutorials/file-system/fig4.png deleted file mode 100644 index cc012f24..00000000 Binary files a/subprojects/docs/src/learn/tutorials/file-system/fig4.png and /dev/null differ diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig4.png.license b/subprojects/docs/src/learn/tutorials/file-system/fig4.png.license deleted file mode 100644 index ff75bc7c..00000000 --- a/subprojects/docs/src/learn/tutorials/file-system/fig4.png.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2023 The Refinery Authors - -SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig4.svg b/subprojects/docs/src/learn/tutorials/file-system/fig4.svg new file mode 100644 index 00000000..704f9404 --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig4.svg @@ -0,0 +1,131 @@ + + + + + + + + +FileSystem::new + +FileSystem + + + + + + + + + +File::new + +File + + + + + + + + + +Dir::new + +File + + + +Dir + + + + + + +root + + + + + + + + + +resources + +File + + + +Dir + + + + + + + + +root + + + + + + +element + + + + + + + +element + + + + + + +img + +File +invalidContainer + + + + + + + + + +root + + + + + +element + + + + + + + +element + + + + + + + +element + + + \ No newline at end of file diff --git a/subprojects/docs/src/learn/tutorials/file-system/fig4.svg.license b/subprojects/docs/src/learn/tutorials/file-system/fig4.svg.license new file mode 100644 index 00000000..ff75bc7c --- /dev/null +++ b/subprojects/docs/src/learn/tutorials/file-system/fig4.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 The Refinery Authors + +SPDX-License-Identifier: EPL-2.0 diff --git a/subprojects/docs/src/learn/tutorials/file-system/index.md b/subprojects/docs/src/learn/tutorials/file-system/index.md index 1d15512f..365d0fba 100644 --- a/subprojects/docs/src/learn/tutorials/file-system/index.md +++ b/subprojects/docs/src/learn/tutorials/file-system/index.md @@ -42,7 +42,9 @@ import Link from '@docusaurus/Link'; - Notice that the syntax is essentially identical to [Xcore](https://wiki.eclipse.org/Xcore). - Review the partial model visualization. You should get something like this: -![Initial model](fig1.png) +import Fig1 from './fig1.svg'; + + - Add some statements about a partial model: @@ -64,7 +66,9 @@ File(img). scope node = 10. ``` -![Partial model extended with new facts](fig2.png) +import Fig2 from './fig2.svg'; + + ### Partial models @@ -72,7 +76,9 @@ scope node = 10. - Check the disabled `equals` and `exist` predicates. check the visual annotation of those predicates in the visualization (dashed line, shadow). -![Object existence and equality](fig3.png) +import Fig3 from './fig3.svg'; + + ### Information merging @@ -95,7 +101,9 @@ element(resources, img). - Inconsistent models parts in a partial model typically make the problem trivially unsatisfiable. -![Inconsistent partial model](fig4.png) +import Fig4 from './fig4.svg'; + + - However, the model can be saved if the inconsistent part may not exist... diff --git a/subprojects/docs/src/plugins/loadersPlugin.ts b/subprojects/docs/src/plugins/loadersPlugin.ts new file mode 100644 index 00000000..28474511 --- /dev/null +++ b/subprojects/docs/src/plugins/loadersPlugin.ts @@ -0,0 +1,72 @@ +/* + * SPDX-FileCopyrightText: 2024 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ + +import type { Plugin } from '@docusaurus/types'; + +export default function loadersPlugin(): Plugin { + return { + name: 'refinery-loaders-plugin', + configureWebpack(config) { + let svgoDisabled = false; + const rules = [...(config.module?.rules ?? [])]; + rules.forEach((rule) => { + // Compare with + // https://github.com/facebook/docusaurus/blob/73016d4936164ba38d4b86ec2aa8c168b5904a21/packages/docusaurus-utils/src/webpackUtils.ts#L128-L166 + if ( + typeof rule !== 'object' || + rule === null || + !('test' in rule) || + !(rule.test instanceof RegExp) || + !rule.test.test('.svg') || + !('oneOf' in rule) + ) { + return; + } + const { + oneOf: [svgLoader], + } = rule; + if ( + typeof svgLoader !== 'object' || + svgLoader === null || + !('use' in svgLoader) || + typeof svgLoader.use !== 'object' || + svgLoader.use === null || + !(0 in svgLoader.use) + ) { + return; + } + const { + use: [loader], + } = svgLoader; + if ( + typeof loader !== 'object' || + loader === null || + !('options' in loader) + ) { + return; + } + loader.options = { + ...(typeof loader.options === 'object' ? loader.options : {}), + // Disable SVGO, because it interferes styling figures exported from Refinery with CSS. + svgo: false, + svgoConfig: undefined, + }; + svgoDisabled = true; + }); + if (!svgoDisabled) { + throw new Error('Failed to disable SVGO.'); + } + return { + mergeStrategy: { + 'module.rules': 'replace', + }, + module: { + rules, + }, + }; + }, + }; +} diff --git a/subprojects/frontend/src/graph/export/ExportPanel.tsx b/subprojects/frontend/src/graph/export/ExportPanel.tsx index c93fa837..8d82b95c 100644 --- a/subprojects/frontend/src/graph/export/ExportPanel.tsx +++ b/subprojects/frontend/src/graph/export/ExportPanel.tsx @@ -6,6 +6,7 @@ import ChevronRightIcon from '@mui/icons-material/ChevronRight'; import ContentCopyIcon from '@mui/icons-material/ContentCopy'; +import ContrastIcon from '@mui/icons-material/Contrast'; import DarkModeIcon from '@mui/icons-material/DarkMode'; import ImageIcon from '@mui/icons-material/Image'; import InsertDriveFileOutlinedIcon from '@mui/icons-material/InsertDriveFileOutlined'; @@ -50,6 +51,13 @@ const SwitchButtonGroup = styled(ToggleButtonGroup, { }, })); +const AutoThemeMessage = styled(Typography, { + name: 'ExportPanel-AutoThemeMessage', +})(({ theme }) => ({ + width: '260px', + marginInline: theme.spacing(2), +})); + function getLabel(value: number): string { return `${value}%`; } @@ -155,29 +163,40 @@ function ExportPanel({ exportSettingsStore.setTheme('light')} > Light exportSettingsStore.setTheme('dark')} > Dark + {exportSettingsStore.canSetDynamicTheme && ( + exportSettingsStore.setTheme('dynamic')} + > + Auto + + )} - exportSettingsStore.toggleTransparent()} - /> - } - label="Transparent background" - /> + {exportSettingsStore.canChangeTransparency && ( + exportSettingsStore.toggleTransparent()} + /> + } + label="Transparent background" + /> + )} {exportSettingsStore.canEmbedFonts && ( )} + {exportSettingsStore.theme === 'dynamic' && ( + <> + + For embedding into HTML directly + + + Set data-theme="dark" on a containing element + to use a dark theme + + + )} {exportSettingsStore.canScale && ( (); + let i = 0; + svgDocument.querySelectorAll('[id]').forEach((node) => { + const oldId = node.getAttribute('id'); + if (oldId === null) { + return; + } + if (oldId.endsWith(',clip')) { + const newId = `refinery-${id}-clip-${i}`; + i += 1; + idMap.set(`url(#${oldId})`, `url(#${newId})`); + node.setAttribute('id', newId); + } else { + node.setAttribute('id', ''); + } + }); + svgDocument.querySelectorAll('[clip-path]').forEach((node) => { + const oldPath = node.getAttribute('clip-path'); + if (oldPath === null) { + return; + } + const newPath = idMap.get(oldPath); + if (newPath === undefined) { + return; + } + node.setAttribute('clip-path', newPath); + }); +} + function addBackground( svgDocument: XMLDocument, svg: SVGSVGElement, @@ -142,40 +173,54 @@ async function fetchVariableFontCSS(): Promise { return variableFontCSS; } +interface ThemeVariant { + selector: string; + theme: Theme; +} + function appendStyles( + id: string, svgDocument: XMLDocument, svg: SVGSVGElement, - theme: Theme, + themes: ThemeVariant[], colorNodes: boolean, hexTypeHashes: string[], fontsCSS: string, ): void { - const cache = createCache({ - key: 'refinery', - container: svg, - prepend: true, - }); - // @ts-expect-error `CSSObject` types don't match up between `@mui/material` and - // `@emotion/serialize`, but they are compatible in practice. - const styles = serializeStyles([createGraphTheme], cache.registered, { - theme, - colorNodes, - hexTypeHashes, - noEmbedIcons: true, - }); + const className = `refinery-${id}`; + svg.classList.add(className); const rules: string[] = [fontsCSS]; - const sheet = { - insert(rule) { - rules.push(rule); - }, - } as StyleSheet; - cache.insert('', styles, sheet, false); + themes.forEach(({ selector, theme }) => { + const cache = createCache({ + key: 'refinery', + container: svg, + prepend: true, + }); + // @ts-expect-error `CSSObject` types don't match up between `@mui/material` and + // `@emotion/serialize`, but they are compatible in practice. + const styles = serializeStyles([createGraphTheme], cache.registered, { + theme, + colorNodes, + hexTypeHashes, + noEmbedIcons: true, + }); + const sheet = { + insert(rule) { + rules.push(rule); + }, + } as StyleSheet; + cache.insert(`${selector} .${className}`, styles, sheet, false); + }); const styleElement = svgDocument.createElementNS(SVG_NS, 'style'); svg.prepend(styleElement); styleElement.innerHTML = rules.join(''); } -function fixForeignObjects(svgDocument: XMLDocument, svg: SVGSVGElement): void { +function fixForeignObjects( + id: string, + svgDocument: XMLDocument, + svg: SVGSVGElement, +): void { const foreignObjects: SVGForeignObjectElement[] = []; svg .querySelectorAll('foreignObject') @@ -197,7 +242,7 @@ function fixForeignObjects(svgDocument: XMLDocument, svg: SVGSVGElement): void { object.children[0]?.classList?.forEach((className) => { useElement.classList.add(className); if (ICONS.has(className)) { - useElement.setAttribute('href', `#${className}`); + useElement.setAttribute('href', `#refinery-${id}-${className}`); } }); object.replaceWith(useElement); @@ -206,6 +251,7 @@ function fixForeignObjects(svgDocument: XMLDocument, svg: SVGSVGElement): void { svg.prepend(defs); ICONS.forEach((value) => { const importedValue = svgDocument.importNode(value, true); + importedValue.id = `refinery-${id}-${importedValue.id}`; defs.appendChild(importedValue); }); } @@ -322,12 +368,37 @@ export default async function exportDiagram( svgDocument.replaceChild(copyOfSVG, originalRoot); } - const theme = settings.theme === 'light' ? lightTheme : darkTheme; + const id = nanoid(); + fixIDs(id, svgDocument); + + let theme: Theme; + let themes: ThemeVariant[]; + if (settings.theme === 'dynamic') { + theme = lightTheme; + themes = [ + { + selector: '', + theme: lightTheme, + }, + { + selector: '[data-theme="dark"]', + theme: darkTheme, + }, + ]; + } else { + theme = settings.theme === 'light' ? lightTheme : darkTheme; + themes = [ + { + selector: '', + theme, + }, + ]; + } if (!settings.transparent) { addBackground(svgDocument, copyOfSVG, theme); } - fixForeignObjects(svgDocument, copyOfSVG); + fixForeignObjects(id, svgDocument, copyOfSVG); const { colorNodes } = graph; let fontsCSS = ''; @@ -339,9 +410,10 @@ export default async function exportDiagram( fontsCSS = await fetchFontCSS(); } appendStyles( + id, svgDocument, copyOfSVG, - theme, + themes, colorNodes, graph.hexTypeHashes, fontsCSS, diff --git a/yarn.lock b/yarn.lock index 25d0919d..0dd63986 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3141,93 +3141,107 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.13.0" +"@rollup/rollup-android-arm-eabi@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.14.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-android-arm64@npm:4.13.0" +"@rollup/rollup-android-arm64@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-android-arm64@npm:4.14.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.13.0" +"@rollup/rollup-darwin-arm64@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.14.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.13.0" +"@rollup/rollup-darwin-x64@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.14.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.14.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.13.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.14.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.13.0" +"@rollup/rollup-linux-arm64-musl@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.14.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.13.0" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.14.1" + conditions: os=linux & cpu=ppc64le & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.14.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.13.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.14.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.14.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.13.0" +"@rollup/rollup-linux-x64-musl@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.14.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.13.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.14.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.13.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.14.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.13.0": - version: 4.13.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.13.0" +"@rollup/rollup-win32-x64-msvc@npm:4.14.1": + version: 4.14.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.14.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -14138,22 +14152,24 @@ __metadata: linkType: hard "rollup@npm:^4.13.0": - version: 4.13.0 - resolution: "rollup@npm:4.13.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.13.0" - "@rollup/rollup-android-arm64": "npm:4.13.0" - "@rollup/rollup-darwin-arm64": "npm:4.13.0" - "@rollup/rollup-darwin-x64": "npm:4.13.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.13.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.13.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.13.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.13.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.13.0" - "@rollup/rollup-linux-x64-musl": "npm:4.13.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.13.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.13.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.13.0" + version: 4.14.1 + resolution: "rollup@npm:4.14.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.14.1" + "@rollup/rollup-android-arm64": "npm:4.14.1" + "@rollup/rollup-darwin-arm64": "npm:4.14.1" + "@rollup/rollup-darwin-x64": "npm:4.14.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.14.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.14.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.14.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.14.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.14.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.14.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.14.1" + "@rollup/rollup-linux-x64-musl": "npm:4.14.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.14.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.14.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.14.1" "@types/estree": "npm:1.0.5" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -14171,8 +14187,12 @@ __metadata: optional: true "@rollup/rollup-linux-arm64-musl": optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true "@rollup/rollup-linux-riscv64-gnu": optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true "@rollup/rollup-linux-x64-gnu": optional: true "@rollup/rollup-linux-x64-musl": @@ -14187,7 +14207,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/90f8cdf9c2115223cbcfe91d932170a85c0928ae1943f45af6877907ea150585b80f656cf2bc471c6f809cb7e158dd85dbea9f91ab4fd5bce0eaf6c3f5f4fd92 + checksum: 10c0/c9028c04537f7f16f9b5e4d75c84d2f0dc960d280fc4eca5960f0d67e786d993b8b707a63fc8b2e054b018fdb3a5a98d5eb7ed5674635c7612dd0b66696805fa languageName: node linkType: hard -- cgit v1.2.3-54-g00ecf