authorgravatar for maria@kuuro.netmaria <maria@kuuro.net> 2026-10-03 18:06:48-03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-10-03 18:06:48-03:00
log5e35272fda7cc94d9c140377bc8db70580295133
tree27d5aca78eb5b799644f05f857efc55233b9d074
parent429c625a8515f9c2e4af28c488fbf32ce7789645
signature Signed by PGP key B5690EEEBB952194

feat(web): render mermaid code blocks as diagrams (#15067)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

5 files changed, 1215 insertions(+), 49 deletions(-)

apps/web/package.json+2
......@@ -40,6 +40,7 @@
4040 "@tiptap/starter-kit": "^3.31.3",
4141 "class-variance-authority": "^0.7.1",
4242 "culori": "^4.0.2",
43 "dompurify": "^3.4.16",
4344 "effect": "catalog:",
4445 "hast-util-to-html": "^9.0.5",
4546 "hast-util-to-jsx-runtime": "^2.3.6",
......@@ -48,6 +49,7 @@
4849 "jsonc-parser": "3.3.1",
4950 "jszip": "3.10.1",
5051 "lucide-react": "^0.564.0",
52 "mermaid": "^11.17.2",
5153 "react": "19.2.6",
5254 "react-dom": "19.2.6",
5355 "react-markdown": "^10.1.0",
apps/web/src/components/ChatMarkdown.tsx+163-47
......@@ -7,6 +7,7 @@ import {
77import {
88 CheckIcon,
99 ChevronRightIcon,
10 CodeIcon,
1011 CopyIcon,
1112 FileSpreadsheetIcon,
1213 FileTextIcon,
......@@ -24,6 +25,7 @@ import {
2425 PresentationIcon,
2526 SparklesIcon,
2627 TriangleAlertIcon,
28 WorkflowIcon,
2729 WrapTextIcon,
2830 type LucideIcon,
2931} from "lucide-react";
......@@ -141,6 +143,7 @@ import { GitHubIcon } from "./Icons";
141143import { createIncrementalHighlightedDocument } from "../lib/incrementalHighlighting";
142144import { HighlightedCodeLines } from "./chat/HighlightedCodeLines";
143145import { RenderErrorBoundary } from "./RenderErrorBoundary";
146import { MermaidDiagram } from "./chat/MermaidDiagram";
144147import { useTheme } from "../hooks/useTheme";
145148import { getClientSettings, useClientSettings } from "../hooks/useSettings";
146149import {
......@@ -975,6 +978,9 @@ function MarkdownCodeBlock({
975978 theme,
976979 onRunShellCommand,
977980 isStreaming,
981 leadingActions,
982 canWrap = true,
983 diagram = false,
978984 children,
979985}: {
980986 code: string;
......@@ -983,6 +989,10 @@ function MarkdownCodeBlock({
983989 theme: "light" | "dark";
984990 onRunShellCommand?: ((command: string) => void) | undefined;
985991 isStreaming: boolean;
992 leadingActions?: ReactNode;
993 canWrap?: boolean;
994 /** Renders content instead of code, with actions below it like tables. */
995 diagram?: boolean;
986996 children: ReactNode;
987997}) {
988998 const [copied, setCopied] = useState(false);
......@@ -1040,6 +1050,37 @@ function MarkdownCodeBlock({
10401050 [],
10411051 );
10421052
1053 const copyButton = (
1054 <Tooltip>
1055 <TooltipTrigger
1056 render={
1057 <Button
1058 type="button"
1059 variant="ghost-muted"
1060 size="icon-xs"
1061 onClick={handleCopy}
1062 aria-label={copyLabel}
1063 />
1064 }
1065 >
1066 {copied ? <CheckIcon className="size-3" /> : <CopyIcon className="size-3" />}
1067 </TooltipTrigger>
1068 <TooltipPopup side="top">{copyLabel}</TooltipPopup>
1069 </Tooltip>
1070 );
1071
1072 if (diagram) {
1073 return (
1074 <div className="my-[0.65rem]" data-language={language}>
1075 {children}
1076 <div className="mt-0.5 flex items-center justify-between select-none">
1077 {leadingActions}
1078 {copyButton}
1079 </div>
1080 </div>
1081 );
1082 }
1083
10431084 return (
10441085 <div
10451086 className="chat-markdown-codeblock my-[0.65rem] overflow-hidden rounded-lg border border-border/70 bg-secondary leading-snug dark:border-transparent dark:bg-input/32"
......@@ -1055,23 +1096,26 @@ function MarkdownCodeBlock({
10551096 />
10561097 </span>
10571098 <span className="flex items-center gap-0.5" role="toolbar" aria-label="Code block actions">
1058 <Tooltip>
1059 <TooltipTrigger
1060 render={
1061 <Button
1062 type="button"
1063 variant={wrapped ? "secondary" : "ghost-muted"}
1064 size="icon-xs"
1065 aria-pressed={wrapped}
1066 onClick={() => setWrapped((value) => !value)}
1067 aria-label={wrapLabel}
1068 />
1069 }
1070 >
1071 <WrapTextIcon className="size-3" />
1072 </TooltipTrigger>
1073 <TooltipPopup side="top">{wrapLabel}</TooltipPopup>
1074 </Tooltip>
1099 {leadingActions}
1100 {canWrap ? (
1101 <Tooltip>
1102 <TooltipTrigger
1103 render={
1104 <Button
1105 type="button"
1106 variant={wrapped ? "secondary" : "ghost-muted"}
1107 size="icon-xs"
1108 aria-pressed={wrapped}
1109 onClick={() => setWrapped((value) => !value)}
1110 aria-label={wrapLabel}
1111 />
1112 }
1113 >
1114 <WrapTextIcon className="size-3" />
1115 </TooltipTrigger>
1116 <TooltipPopup side="top">{wrapLabel}</TooltipPopup>
1117 </Tooltip>
1118 ) : null}
10751119 {canRun ? (
10761120 <Tooltip>
10771121 <TooltipTrigger
......@@ -1090,6 +1134,47 @@ function MarkdownCodeBlock({
10901134 <TooltipPopup side="top">Run in terminal</TooltipPopup>
10911135 </Tooltip>
10921136 ) : null}
1137 {copyButton}
1138 </span>
1139 </div>
1140 {children}
1141 </div>
1142 );
1143}
1144
1145/**
1146 * Mermaid fences render as a diagram once the response settles; streaming and
1147 * the code toggle keep the highlighted source.
1148 */
1149function MarkdownMermaidCodeBlock({
1150 code,
1151 fenceTitle,
1152 theme,
1153 isStreaming,
1154 onExpand,
1155 children,
1156}: {
1157 code: string;
1158 fenceTitle: string | null;
1159 theme: "light" | "dark";
1160 isStreaming: boolean;
1161 onExpand: (imageUrl: string) => void;
1162 children: ReactNode;
1163}) {
1164 const [showCode, setShowCode] = useState(false);
1165 const showDiagram = !showCode && !isStreaming && code.trim().length > 0;
1166 const toggleLabel = showCode ? "Show diagram" : "Show code";
1167 return (
1168 <MarkdownCodeBlock
1169 code={code}
1170 language="mermaid"
1171 fenceTitle={fenceTitle}
1172 theme={theme}
1173 isStreaming={isStreaming}
1174 canWrap={!showDiagram}
1175 diagram={showDiagram}
1176 leadingActions={
1177 isStreaming ? null : (
10931178 <Tooltip>
10941179 <TooltipTrigger
10951180 render={
......@@ -1097,19 +1182,34 @@ function MarkdownCodeBlock({
10971182 type="button"
10981183 variant="ghost-muted"
10991184 size="icon-xs"
1100 onClick={handleCopy}
1101 aria-label={copyLabel}
1185 onClick={() => setShowCode((value) => !value)}
1186 aria-label={toggleLabel}
11021187 />
11031188 }
11041189 >
1105 {copied ? <CheckIcon className="size-3" /> : <CopyIcon className="size-3" />}
1190 {showCode ? <WorkflowIcon className="size-3" /> : <CodeIcon className="size-3" />}
11061191 </TooltipTrigger>
1107 <TooltipPopup side="top">{copyLabel}</TooltipPopup>
1192 <TooltipPopup side="top">{toggleLabel}</TooltipPopup>
11081193 </Tooltip>
1109 </span>
1110 </div>
1111 {children}
1112 </div>
1194 )
1195 }
1196 >
1197 {showDiagram ? (
1198 <RenderErrorBoundary resetKeys={[code, theme]} fallback={children}>
1199 <Suspense
1200 fallback={
1201 <div className="flex min-h-36 items-center justify-center text-xs text-muted-foreground">
1202 Rendering diagram
1203 </div>
1204 }
1205 >
1206 <MermaidDiagram source={code} theme={theme} onExpand={onExpand} />
1207 </Suspense>
1208 </RenderErrorBoundary>
1209 ) : (
1210 children
1211 )}
1212 </MarkdownCodeBlock>
11131213 );
11141214}
11151215
......@@ -3300,7 +3400,7 @@ const CHAT_MARKDOWN_COMPONENTS = {
33003400 return <MarkdownDetails open={detailsOpen}>{children}</MarkdownDetails>;
33013401 },
33023402 pre: function MarkdownPre({ node, children, ...props }) {
3303 const { resolvedTheme, diffThemeName, isStreaming, onRunShellCommand, text } = use(
3403 const { resolvedTheme, diffThemeName, expandMedia, isStreaming, onRunShellCommand, text } = use(
33043404 ChatMarkdownRendererContext,
33053405 );
33063406 const codeBlock = extractCodeBlock(children);
......@@ -3310,6 +3410,42 @@ const CHAT_MARKDOWN_COMPONENTS = {
33103410
33113411 const language = extractFenceLanguage(codeBlock.className);
33123412 const fenceTitle = extractFenceTitle(extractPreCodeMeta(node));
3413 const highlightedCode = (
3414 <RenderErrorBoundary
3415 resetKeys={[codeBlock.code, language, diffThemeName, isStreaming]}
3416 fallback={<pre {...props}>{children}</pre>}
3417 >
3418 {/* Reserve the block's height but stay hidden until Shiki has colored
3419 it, so plain text never flashes before the highlighted version. */}
3420 <Suspense
3421 fallback={
3422 <pre {...props} className="invisible" aria-hidden>
3423 {children}
3424 </pre>
3425 }
3426 >
3427 <SuspenseShikiCodeBlock
3428 className={codeBlock.className}
3429 code={codeBlock.code}
3430 themeName={diffThemeName}
3431 isStreaming={isStreaming}
3432 />
3433 </Suspense>
3434 </RenderErrorBoundary>
3435 );
3436 if (language === "mermaid") {
3437 return (
3438 <MarkdownMermaidCodeBlock
3439 code={codeBlock.code}
3440 fenceTitle={fenceTitle}
3441 theme={resolvedTheme}
3442 isStreaming={isStreaming}
3443 onExpand={(src) => expandMedia({ images: [{ src, name: "Mermaid diagram" }], index: 0 })}
3444 >
3445 {highlightedCode}
3446 </MarkdownMermaidCodeBlock>
3447 );
3448 }
33133449 return (
33143450 <MarkdownCodeBlock
33153451 code={codeBlock.code}
......@@ -3323,27 +3459,7 @@ const CHAT_MARKDOWN_COMPONENTS = {
33233459 }
33243460 isStreaming={isStreaming}
33253461 >
3326 <RenderErrorBoundary
3327 resetKeys={[codeBlock.code, language, diffThemeName, isStreaming]}
3328 fallback={<pre {...props}>{children}</pre>}
3329 >
3330 {/* Reserve the block's height but stay hidden until Shiki has colored
3331 it, so plain text never flashes before the highlighted version. */}
3332 <Suspense
3333 fallback={
3334 <pre {...props} className="invisible" aria-hidden>
3335 {children}
3336 </pre>
3337 }
3338 >
3339 <SuspenseShikiCodeBlock
3340 className={codeBlock.className}
3341 code={codeBlock.code}
3342 themeName={diffThemeName}
3343 isStreaming={isStreaming}
3344 />
3345 </Suspense>
3346 </RenderErrorBoundary>
3462 {highlightedCode}
33473463 </MarkdownCodeBlock>
33483464 );
33493465 },
apps/web/src/components/chat/MermaidDiagram.tsx created+213
......@@ -0,0 +1,213 @@
1import DOMPurify from "dompurify";
2import type { Mermaid } from "mermaid";
3import { use, useState } from "react";
4
5import { Button } from "../ui/button";
6
7type MermaidRenderResult =
8 | { readonly status: "rendered"; readonly svg: string }
9 | { readonly status: "error"; readonly message: string; readonly retryable: boolean };
10
11let mermaidModulePromise: Promise<Mermaid> | null = null;
12let renderQueue: Promise<unknown> = Promise.resolve();
13let nextDiagramId = 0;
14const MAX_CACHED_RENDERS = 64;
15// Keyed by the full source so distinct diagrams never share an entry. Pending
16// renders are never evicted, because use() must get the same promise on retry.
17const renderCache = new Map<string, Promise<MermaidRenderResult>>();
18const settledRenders = new WeakSet<Promise<MermaidRenderResult>>();
19
20// Mermaid is ~1MB, so it only loads once a diagram is actually shown.
21function loadMermaid(): Promise<Mermaid> {
22 mermaidModulePromise ??= import("mermaid")
23 .then((module) => module.default)
24 .catch((error: unknown) => {
25 mermaidModulePromise = null;
26 throw error;
27 });
28 return mermaidModulePromise;
29}
30
31const REMOTE_CSS_URL = /url\(\s*(?!['"]?#)[^)]*\)/gi;
32let purifier: ReturnType<typeof DOMPurify> | null = null;
33
34// Diagrams can come from untrusted PR descriptions, so strip anything that can
35// navigate, run script, or fetch remote content on top of Mermaid's own strict
36// sanitization. CSS keeps only local url(#id) references; label text is untouched.
37function sanitizeMermaidSvg(svg: string): string {
38 if (!purifier) {
39 purifier = DOMPurify(window);
40 purifier.addHook("uponSanitizeElement", (node, data) => {
41 if (data.tagName === "style" && node.textContent) {
42 node.textContent = node.textContent.replace(REMOTE_CSS_URL, "none");
43 }
44 });
45 purifier.addHook("uponSanitizeAttribute", (_node, data) => {
46 if (data.attrName === "style")
47 data.attrValue = data.attrValue.replace(REMOTE_CSS_URL, "none");
48 });
49 }
50 return purifier.sanitize(svg, {
51 ADD_TAGS: ["foreignObject"],
52 HTML_INTEGRATION_POINTS: { foreignobject: true },
53 FORBID_ATTR: ["href", "xlink:href", "src", "srcset"],
54 FORBID_TAGS: ["a", "img", "image", "script"],
55 USE_PROFILES: { svg: true, svgFilters: true, html: true },
56 });
57}
58
59// Mermaid also lazy-loads diagram chunks inside render(); losing the network
60// there is worth a retry, unlike a syntax error.
61const CHUNK_LOAD_ERROR = /dynamically imported module|importing a module script|failed to fetch/i;
62
63async function renderMermaid(
64 source: string,
65 theme: "light" | "dark",
66): Promise<MermaidRenderResult> {
67 const id = `mermaid-diagram-${nextDiagramId++}`;
68 let mermaid: Mermaid;
69 try {
70 mermaid = await loadMermaid();
71 } catch {
72 return { status: "error", message: "Mermaid failed to load.", retryable: true };
73 }
74 try {
75 // initialize() mutates global config, so renders run one at a time.
76 mermaid.initialize({
77 startOnLoad: false,
78 securityLevel: "strict",
79 suppressErrorRendering: true,
80 // HTML labels and theme CSS are mounted while Mermaid lays the diagram
81 // out, before sanitizing, so diagram directives must not set them.
82 secure: [
83 "secure",
84 "securityLevel",
85 "startOnLoad",
86 "maxTextSize",
87 "suppressErrorRendering",
88 "maxEdges",
89 "htmlLabels",
90 "themeCSS",
91 ],
92 htmlLabels: false,
93 flowchart: { htmlLabels: false },
94 theme: theme === "dark" ? "dark" : "default",
95 fontFamily: getComputedStyle(document.body).fontFamily,
96 });
97 const { svg } = await mermaid.render(id, source);
98 return { status: "rendered", svg: sanitizeMermaidSvg(svg) };
99 } catch (error) {
100 const message = error instanceof Error ? error.message : "The diagram could not be rendered.";
101 return { status: "error", message, retryable: CHUNK_LOAD_ERROR.test(message) };
102 } finally {
103 document.getElementById(`d${id}`)?.remove();
104 }
105}
106
107function evictSettledRenders() {
108 for (const [key, result] of renderCache) {
109 if (renderCache.size <= MAX_CACHED_RENDERS) return;
110 if (settledRenders.has(result)) renderCache.delete(key);
111 }
112}
113
114function mermaidRenderKey(source: string, theme: "light" | "dark") {
115 return `${theme}\n${source}`;
116}
117
118function mermaidRenderPromise(source: string, theme: "light" | "dark") {
119 const key = mermaidRenderKey(source, theme);
120 const cached = renderCache.get(key);
121 if (cached) {
122 renderCache.delete(key);
123 renderCache.set(key, cached);
124 return cached;
125 }
126 const result = renderQueue.then(() => renderMermaid(source, theme));
127 renderQueue = result;
128 void result.then(() => {
129 settledRenders.add(result);
130 evictSettledRenders();
131 });
132 renderCache.set(key, result);
133 evictSettledRenders();
134 return result;
135}
136
137let expandedImageUrl: string | null = null;
138
139/**
140 * Converts a rendered diagram into a standalone image with fixed size and background.
141 * A blob URL, unlike a data URL, passes the desktop connect-src policy that media
142 * save and copy actions fetch through. Only one diagram is expanded at a time, so
143 * the previous URL is released.
144 */
145function mermaidImageUrl(svg: string): string {
146 const svgDocument = new DOMParser().parseFromString(svg, "image/svg+xml");
147 const element = svgDocument.documentElement;
148 const viewBox = element.getAttribute("viewBox")?.trim().split(/\s+/).map(Number);
149 if (viewBox?.length === 4 && viewBox.every(Number.isFinite)) {
150 element.setAttribute("width", String(viewBox[2]));
151 element.setAttribute("height", String(viewBox[3]));
152 }
153 element.setAttribute("xmlns", "http://www.w3.org/2000/svg");
154 element.style.maxWidth = "none";
155 element.style.backgroundColor = getComputedStyle(document.body).backgroundColor;
156 if (expandedImageUrl) URL.revokeObjectURL(expandedImageUrl);
157 expandedImageUrl = URL.createObjectURL(
158 new Blob([new XMLSerializer().serializeToString(element)], { type: "image/svg+xml" }),
159 );
160 return expandedImageUrl;
161}
162
163/** Suspends until the diagram renders; failures show the parser message above the source. */
164export function MermaidDiagram({
165 source,
166 theme,
167 onExpand,
168}: {
169 source: string;
170 theme: "light" | "dark";
171 onExpand: (imageUrl: string) => void;
172}) {
173 const [, setAttempt] = useState(0);
174 const result = use(mermaidRenderPromise(source.trim(), theme));
175
176 if (result.status === "error") {
177 return (
178 <div>
179 <div className="flex items-center justify-between gap-2">
180 <p className="m-0 text-xs text-destructive">Unable to render diagram: {result.message}</p>
181 {result.retryable ? (
182 <Button
183 type="button"
184 variant="ghost"
185 size="xs"
186 onClick={() => {
187 renderCache.delete(mermaidRenderKey(source.trim(), theme));
188 setAttempt((attempt) => attempt + 1);
189 }}
190 >
191 Retry
192 </Button>
193 ) : null}
194 </div>
195 <pre className="mt-2 mb-0 overflow-auto font-mono text-xs whitespace-pre-wrap">
196 {source}
197 </pre>
198 </div>
199 );
200 }
201
202 return (
203 <div className="overflow-x-auto">
204 <button
205 type="button"
206 aria-label="Expand diagram"
207 className="flex w-full cursor-zoom-in justify-center rounded-md focus-visible:outline-2 focus-visible:outline-ring [&_svg]:h-auto [&_svg]:max-w-full"
208 onClick={() => onExpand(mermaidImageUrl(result.svg))}
209 dangerouslySetInnerHTML={{ __html: result.svg }}
210 />
211 </div>
212 );
213}
pnpm-lock.yaml+810-2
......@@ -692,6 +692,9 @@ importers:
692692 culori:
693693 specifier: ^4.0.2
694694 version: 4.0.2
695 dompurify:
696 specifier: ^3.4.16
697 version: 3.4.16
695698 effect:
696699 specifier: 4.0.0-rc.115
697700 version: 4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)
......@@ -716,6 +719,9 @@ importers:
716719 lucide-react:
717720 specifier: ^0.564.0
718721 version: 0.564.0(react@19.2.6)
722 mermaid:
723 specifier: ^11.17.2
724 version: 11.17.2
719725 react:
720726 specifier: 19.2.6
721727 version: 19.2.6
......@@ -1169,6 +1175,9 @@ packages:
11691175 react-devtools-core:
11701176 optional: true
11711177
1178 '@antfu/install-pkg@2.1.0':
1179 resolution: {integrity: sha512-sdg9NxU3zR4Mnawfbc/x6GB5Wf17WYud5qOuEuxXjaKpYpMkISSJEjItGebXJ2bQ4DIcly4NYH23mtkGJjvKUw==}
1180
11721181 '@anthropic-ai/claude-agent-sdk@0.3.276':
11731182 resolution: {integrity: sha512-Dic43v4uuGLhibPAArWy3RSfq3zHdn+4Oh2AI2/18a5tlbNKkvChEpazyp8c+grUJvzxkzt0jETCa1wrADbkyw==}
11741183 engines: {node: '>=18.0.0'}
......@@ -1816,6 +1825,9 @@ packages:
18161825 '@blazediff/core@1.10.0':
18171826 resolution: {integrity: sha512-AOQff0zgR7cGsZL+4E7hVkmujoPUpm0J9xzWGWZj5wCjd3gmxESXAPfKyuzs93VdpQNFhHlBhfOjrcZ+XTERtQ==}
18181827
1828 '@braintree/sanitize-url@7.1.2':
1829 resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==}
1830
18191831 '@bramus/specificity@2.4.2':
18201832 resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==}
18211833 hasBin: true
......@@ -1876,6 +1888,9 @@ packages:
18761888 resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==}
18771889 engines: {node: '>=18'}
18781890
1891 '@chevrotain/types@11.1.2':
1892 resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==}
1893
18791894 '@clack/core@1.5.1':
18801895 resolution: {integrity: sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==}
18811896 engines: {node: '>= 20.12.0'}
......@@ -3084,6 +3099,12 @@ packages:
30843099 '@iarna/toml@2.2.5':
30853100 resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
30863101
3102 '@iconify/types@2.0.0':
3103 resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
3104
3105 '@iconify/utils@3.1.7':
3106 resolution: {integrity: sha512-JZHlwdID+dy+lTgbYC8NEC4zeugqeYsc6jewvzb4c58kHauJn+X7rNwQjxz5p2qSjqaEeQoLkCIQ9v/H4PK0/w==}
3107
30873108 '@img/colour@1.1.0':
30883109 resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
30893110 engines: {node: '>=18'}
......@@ -3403,6 +3424,9 @@ packages:
34033424 '@material/material-color-utilities@0.3.0':
34043425 resolution: {integrity: sha512-ztmtTd6xwnuh2/xu+Vb01btgV8SQWYCaK56CkRK8gEkWe5TuDyBcYJ0wgkMRn+2VcE9KUmhvkz+N9GHrqw/C0g==}
34053426
3427 '@mermaid-js/parser@1.2.1':
3428 resolution: {integrity: sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw==}
3429
34063430 '@modelcontextprotocol/sdk@1.29.0':
34073431 resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==}
34083432 engines: {node: '>=18'}
......@@ -5341,6 +5365,99 @@ packages:
53415365 '@types/culori@4.0.1':
53425366 resolution: {integrity: sha512-43M51r/22CjhbOXyGT361GZ9vncSVQ39u62x5eJdBQFviI8zWp2X5jzqg7k4M6PVgDQAClpy2bUe2dtwEgEDVQ==}
53435367
5368 '@types/d3-array@3.2.2':
5369 resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
5370
5371 '@types/d3-axis@3.0.6':
5372 resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
5373
5374 '@types/d3-brush@3.0.6':
5375 resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
5376
5377 '@types/d3-chord@3.0.6':
5378 resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
5379
5380 '@types/d3-color@3.1.3':
5381 resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
5382
5383 '@types/d3-contour@3.0.6':
5384 resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
5385
5386 '@types/d3-delaunay@6.0.4':
5387 resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
5388
5389 '@types/d3-dispatch@3.0.7':
5390 resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==}
5391
5392 '@types/d3-drag@3.0.7':
5393 resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
5394
5395 '@types/d3-dsv@3.0.7':
5396 resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
5397
5398 '@types/d3-ease@3.0.2':
5399 resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
5400
5401 '@types/d3-fetch@3.0.7':
5402 resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
5403
5404 '@types/d3-force@3.0.10':
5405 resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
5406
5407 '@types/d3-format@3.0.4':
5408 resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
5409
5410 '@types/d3-geo@3.1.1':
5411 resolution: {integrity: sha512-65Emv9fQiQQqphLlRkuQ5ypPsOmWPhtBGCMv61JDPEPMvsx+gzhGf74yw1a78xFKPj6zw4AgQICJoQv0vK9M2w==}
5412
5413 '@types/d3-hierarchy@3.1.7':
5414 resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
5415
5416 '@types/d3-interpolate@3.0.4':
5417 resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
5418
5419 '@types/d3-path@3.1.1':
5420 resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
5421
5422 '@types/d3-polygon@3.0.2':
5423 resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
5424
5425 '@types/d3-quadtree@3.0.6':
5426 resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
5427
5428 '@types/d3-random@3.0.4':
5429 resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==}
5430
5431 '@types/d3-scale-chromatic@3.1.0':
5432 resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
5433
5434 '@types/d3-scale@4.0.9':
5435 resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
5436
5437 '@types/d3-selection@3.0.12':
5438 resolution: {integrity: sha512-Qe/KWYhEiIIxGs7HrAAjMfShxKldx19SJtr5zu53f3afPsdZNz7HHtdTLXo/kqeiWNXVycI24kSnfzBYkTzpgw==}
5439
5440 '@types/d3-shape@3.2.0':
5441 resolution: {integrity: sha512-kVd74ta9eof3eJOvbNd1vGKS/XERRyQbT26Og63hIsvDO84cjD5gEOhsXf26w3FSoNlPVz84DOFcKv/oou+fMw==}
5442
5443 '@types/d3-time-format@4.0.3':
5444 resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
5445
5446 '@types/d3-time@3.0.4':
5447 resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
5448
5449 '@types/d3-timer@3.0.2':
5450 resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
5451
5452 '@types/d3-transition@3.0.9':
5453 resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
5454
5455 '@types/d3-zoom@3.0.9':
5456 resolution: {integrity: sha512-0sE1406XBYJGiqD3AusTl9ZqC//2mIXix51tbom25gDCA8ri4xnSZg28CaSE8Srl6FClqABUKfsn0qghgdepMA==}
5457
5458 '@types/d3@7.4.3':
5459 resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
5460
53445461 '@types/debug@4.1.13':
53455462 resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
53465463
......@@ -5365,6 +5482,9 @@ packages:
53655482 '@types/fs-extra@9.0.13':
53665483 resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
53675484
5485 '@types/geojson@7946.0.16':
5486 resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
5487
53685488 '@types/hast@3.0.4':
53695489 resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
53705490
......@@ -5448,6 +5568,9 @@ packages:
54485568 '@types/three@0.180.0':
54495569 resolution: {integrity: sha512-ykFtgCqNnY0IPvDro7h+9ZeLY+qjgUWv+qEvUt84grhenO60Hqd4hScHE7VTB9nOQ/3QM8lkbNE+4vKjEpUxKg==}
54505570
5571 '@types/trusted-types@2.0.7':
5572 resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
5573
54515574 '@types/unist@2.0.11':
54525575 resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
54535576
......@@ -5601,6 +5724,9 @@ packages:
56015724 '@ungap/structured-clone@1.3.1':
56025725 resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==}
56035726
5727 '@upsetjs/venn.js@2.0.0':
5728 resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==}
5729
56045730 '@vercel/config@0.3.0':
56055731 resolution: {integrity: sha512-Tf5k5y2F478oTiQcU5R8Ntix1UejE6NdduZnI7aa1XXxjCtifX1XdRS/D2uTjiQAwIL3pLa1LSAN80ABbba+TQ==}
56065732 hasBin: true
......@@ -6657,6 +6783,10 @@ packages:
66576783 resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
66586784 engines: {node: '>= 10'}
66596785
6786 commander@8.3.0:
6787 resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
6788 engines: {node: '>= 12'}
6789
66606790 commander@9.5.0:
66616791 resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
66626792 engines: {node: ^12.20.0 || >=14}
......@@ -6738,6 +6868,12 @@ packages:
67386868 resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==}
67396869 engines: {node: '>= 0.10'}
67406870
6871 cose-base@1.0.3:
6872 resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
6873
6874 cose-base@2.2.0:
6875 resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
6876
67416877 cross-dirname@0.1.0:
67426878 resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==}
67436879
......@@ -6794,6 +6930,162 @@ packages:
67946930 resolution: {integrity: sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==}
67956931 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
67966932
6933 cytoscape-cose-bilkent@4.1.0:
6934 resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
6935 peerDependencies:
6936 cytoscape: ^3.2.0
6937
6938 cytoscape-fcose@2.2.0:
6939 resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
6940 peerDependencies:
6941 cytoscape: ^3.2.0
6942
6943 cytoscape@3.34.3:
6944 resolution: {integrity: sha512-yfYGhRcGAntq6YBD583j4n0Eg3jIxvWmZtz/5uz9UYkeIStSlMxuUja+ec5j3iBD8nv1rwaOAYMW09tBdkSeaQ==}
6945 engines: {node: '>=0.10'}
6946
6947 d3-array@2.12.1:
6948 resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
6949
6950 d3-array@3.2.4:
6951 resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
6952 engines: {node: '>=12'}
6953
6954 d3-axis@3.0.0:
6955 resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
6956 engines: {node: '>=12'}
6957
6958 d3-brush@3.0.0:
6959 resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
6960 engines: {node: '>=12'}
6961
6962 d3-chord@3.0.1:
6963 resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
6964 engines: {node: '>=12'}
6965
6966 d3-color@3.1.0:
6967 resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
6968 engines: {node: '>=12'}
6969
6970 d3-contour@4.0.2:
6971 resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
6972 engines: {node: '>=12'}
6973
6974 d3-delaunay@6.0.4:
6975 resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
6976 engines: {node: '>=12'}
6977
6978 d3-dispatch@3.0.1:
6979 resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
6980 engines: {node: '>=12'}
6981
6982 d3-drag@3.0.0:
6983 resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
6984 engines: {node: '>=12'}
6985
6986 d3-dsv@3.0.1:
6987 resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
6988 engines: {node: '>=12'}
6989 hasBin: true
6990
6991 d3-ease@3.0.1:
6992 resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
6993 engines: {node: '>=12'}
6994
6995 d3-fetch@3.0.1:
6996 resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
6997 engines: {node: '>=12'}
6998
6999 d3-force@3.0.0:
7000 resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
7001 engines: {node: '>=12'}
7002
7003 d3-format@3.1.2:
7004 resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==}
7005 engines: {node: '>=12'}
7006
7007 d3-geo@3.1.1:
7008 resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
7009 engines: {node: '>=12'}
7010
7011 d3-hierarchy@3.1.2:
7012 resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
7013 engines: {node: '>=12'}
7014
7015 d3-interpolate@3.0.1:
7016 resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
7017 engines: {node: '>=12'}
7018
7019 d3-path@1.0.9:
7020 resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
7021
7022 d3-path@3.1.0:
7023 resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
7024 engines: {node: '>=12'}
7025
7026 d3-polygon@3.0.1:
7027 resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
7028 engines: {node: '>=12'}
7029
7030 d3-quadtree@3.0.1:
7031 resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
7032 engines: {node: '>=12'}
7033
7034 d3-random@3.0.1:
7035 resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
7036 engines: {node: '>=12'}
7037
7038 d3-sankey@0.12.3:
7039 resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
7040
7041 d3-scale-chromatic@3.1.0:
7042 resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
7043 engines: {node: '>=12'}
7044
7045 d3-scale@4.0.2:
7046 resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
7047 engines: {node: '>=12'}
7048
7049 d3-selection@3.0.0:
7050 resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
7051 engines: {node: '>=12'}
7052
7053 d3-shape@1.3.7:
7054 resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
7055
7056 d3-shape@3.2.0:
7057 resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
7058 engines: {node: '>=12'}
7059
7060 d3-time-format@4.1.0:
7061 resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
7062 engines: {node: '>=12'}
7063
7064 d3-time@3.1.0:
7065 resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
7066 engines: {node: '>=12'}
7067
7068 d3-timer@3.0.1:
7069 resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
7070 engines: {node: '>=12'}
7071
7072 d3-transition@3.0.1:
7073 resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
7074 engines: {node: '>=12'}
7075 peerDependencies:
7076 d3-selection: 2 - 3
7077
7078 d3-zoom@3.0.0:
7079 resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
7080 engines: {node: '>=12'}
7081
7082 d3@7.9.0:
7083 resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
7084 engines: {node: '>=12'}
7085
7086 dagre-d3-es@7.0.14:
7087 resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==}
7088
67977089 data-urls@7.0.0:
67987090 resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==}
67997091 engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
......@@ -6801,6 +7093,9 @@ packages:
68017093 date-fns@4.4.0:
68027094 resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==}
68037095
7096 dayjs@1.11.23:
7097 resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==}
7098
68047099 dbus-next@0.10.2:
68057100 resolution: {integrity: sha512-kLNQoadPstLgKKGIXKrnRsMgtAK/o+ix3ZmcfTfvBHzghiO9yHXpoKImGnB50EXwnfSFaSAullW/7UrSkAISSQ==}
68067101
......@@ -6873,6 +7168,9 @@ packages:
68737168 defu@6.1.7:
68747169 resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
68757170
7171 delaunator@5.1.0:
7172 resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==}
7173
68767174 delayed-stream@1.0.0:
68777175 resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
68787176 engines: {node: '>=0.4.0'}
......@@ -6943,6 +7241,9 @@ packages:
69437241 resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
69447242 engines: {node: '>= 4'}
69457243
7244 dompurify@3.4.16:
7245 resolution: {integrity: sha512-sqo+pNp3qRhCIpbgRi1y8Tgk27Bo2Ry7w0dC1NBeNTdZChWjz9Xb/KOoZbRP/R6pQZ80Qw8YhXw13hWWBbMRnQ==}
7246
69467247 domutils@3.2.2:
69477248 resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
69487249
......@@ -7237,6 +7538,9 @@ packages:
72377538 resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
72387539 engines: {node: '>= 0.4'}
72397540
7541 es-toolkit@1.52.0:
7542 resolution: {integrity: sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==}
7543
72407544 es6-error@4.1.1:
72417545 resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
72427546
......@@ -7682,6 +7986,9 @@ packages:
76827986 resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==}
76837987 hasBin: true
76847988
7989 fastdom@1.0.12:
7990 resolution: {integrity: sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg==}
7991
76857992 fastest-levenshtein@1.0.16:
76867993 resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
76877994 engines: {node: '>= 4.9.1'}
......@@ -7913,6 +8220,9 @@ packages:
79138220 h3@1.15.11:
79148221 resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==}
79158222
8223 hachure-fill@0.5.2:
8224 resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
8225
79168226 has-flag@3.0.0:
79178227 resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
79188228 engines: {node: '>=4'}
......@@ -8051,6 +8361,9 @@ packages:
80518361 immediate@3.0.6:
80528362 resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
80538363
8364 import-meta-resolve@4.2.0:
8365 resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==}
8366
80548367 inflight@1.0.6:
80558368 resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
80568369 deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
......@@ -8061,6 +8374,13 @@ packages:
80618374 inline-style-parser@0.2.7:
80628375 resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
80638376
8377 internmap@1.0.1:
8378 resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
8379
8380 internmap@2.0.3:
8381 resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
8382 engines: {node: '>=12'}
8383
80648384 invariant@2.2.4:
80658385 resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
80668386
......@@ -8292,9 +8612,16 @@ packages:
82928612 jszip@3.10.1:
82938613 resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
82948614
8615 katex@0.16.47:
8616 resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==}
8617 hasBin: true
8618
82958619 keyv@4.5.4:
82968620 resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
82978621
8622 khroma@2.1.0:
8623 resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
8624
82988625 kleur@3.0.3:
82998626 resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
83008627 engines: {node: '>=6'}
......@@ -8312,6 +8639,12 @@ packages:
83128639 resolution: {integrity: sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A==}
83138640 hasBin: true
83148641
8642 layout-base@1.0.2:
8643 resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
8644
8645 layout-base@2.0.1:
8646 resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
8647
83158648 lazy-val@1.0.5:
83168649 resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
83178650
......@@ -8414,6 +8747,9 @@ packages:
84148747 resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
84158748 engines: {node: '>=6'}
84168749
8750 lodash-es@4.18.1:
8751 resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
8752
84178753 lodash.debounce@4.0.8:
84188754 resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
84198755
......@@ -8500,6 +8836,11 @@ packages:
85008836 markdown-table@3.0.4:
85018837 resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
85028838
8839 marked@16.4.2:
8840 resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==}
8841 engines: {node: '>= 20'}
8842 hasBin: true
8843
85038844 matcher@3.0.0:
85048845 resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
85058846 engines: {node: '>=10'}
......@@ -8585,6 +8926,9 @@ packages:
85858926 merge-stream@2.0.0:
85868927 resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
85878928
8929 mermaid@11.17.2:
8930 resolution: {integrity: sha512-V6K3C8EBdEsPFZXSKMJe6ppQOENxuHARr9GvHX4hh47lAbhMRD9qf4oEK7LoaRQxULMa80/qt5gHO73aCleBBg==}
8931
85888932 meshoptimizer@0.22.0:
85898933 resolution: {integrity: sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==}
85908934
......@@ -9187,6 +9531,9 @@ packages:
91879531 path-browserify@1.0.1:
91889532 resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
91899533
9534 path-data-parser@0.1.0:
9535 resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
9536
91909537 path-exists@3.0.0:
91919538 resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
91929539 engines: {node: '>=4'}
......@@ -9317,6 +9664,12 @@ packages:
93179664 resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
93189665 engines: {node: '>=14.19.0'}
93199666
9667 points-on-curve@0.2.0:
9668 resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
9669
9670 points-on-path@0.2.1:
9671 resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
9672
93209673 postcss@8.5.28:
93219674 resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==}
93229675 engines: {node: ^10 || ^12 || >=14}
......@@ -9816,6 +10169,9 @@ packages:
981610169 resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
981710170 engines: {node: '>=8.0'}
981810171
10172 robust-predicates@3.0.3:
10173 resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==}
10174
981910175 rolldown@1.0.0-rc.17:
982010176 resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==}
982110177 engines: {node: ^20.19.0 || >=22.12.0}
......@@ -9829,10 +10185,16 @@ packages:
982910185 rope-sequence@1.3.4:
983010186 resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
983110187
10188 roughjs@4.6.6:
10189 resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
10190
983210191 router@2.2.0:
983310192 resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
983410193 engines: {node: '>= 18'}
983510194
10195 rw@1.3.3:
10196 resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
10197
983610198 safe-buffer@5.1.2:
983710199 resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
983810200
......@@ -10132,6 +10494,9 @@ packages:
1013210494 resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
1013310495 engines: {node: '>=4'}
1013410496
10497 strictdom@1.0.1:
10498 resolution: {integrity: sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==}
10499
1013510500 string-width@4.2.3:
1013610501 resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1013710502 engines: {node: '>=8'}
......@@ -10178,6 +10543,9 @@ packages:
1017810543 style-to-object@1.0.14:
1017910544 resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
1018010545
10546 stylis@4.4.0:
10547 resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==}
10548
1018110549 sumchecker@3.0.1:
1018210550 resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
1018310551 engines: {node: '>= 8.0'}
......@@ -10358,6 +10726,10 @@ packages:
1035810726 ts-algebra@2.0.0:
1035910727 resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==}
1036010728
10729 ts-dedent@2.3.0:
10730 resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==}
10731 engines: {node: '>=6.10'}
10732
1036110733 tslib@2.8.1:
1036210734 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1036310735
......@@ -10624,6 +10996,10 @@ packages:
1062410996 resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
1062510997 engines: {node: '>= 0.4.0'}
1062610998
10999 uuid@14.0.2:
11000 resolution: {integrity: sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==}
11001 hasBin: true
11002
1062711003 uuid@7.0.3:
1062811004 resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==}
1062911005 deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
......@@ -11145,6 +11521,11 @@ snapshots:
1114511521 '@types/react': 19.3.0
1114611522 react-devtools-core: 6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1114711523
11524 '@antfu/install-pkg@2.1.0':
11525 dependencies:
11526 package-manager-detector: 1.8.0
11527 tinyexec: 1.3.1
11528
1114811529 '@anthropic-ai/claude-agent-sdk@0.3.276(@anthropic-ai/sdk@0.93.0(zod@4.6.5))(@modelcontextprotocol/sdk@1.29.0(zod@4.6.5))(zod@4.6.5)':
1114911530 dependencies:
1115011531 '@anthropic-ai/sdk': 0.93.0(zod@4.6.5)
......@@ -12029,6 +12410,8 @@ snapshots:
1202912410
1203012411 '@blazediff/core@1.10.0': {}
1203112412
12413 '@braintree/sanitize-url@7.1.2': {}
12414
1203212415 '@bramus/specificity@2.4.2':
1203312416 dependencies:
1203412417 css-tree: 3.2.1
......@@ -12070,6 +12453,8 @@ snapshots:
1207012453 dependencies:
1207112454 fontkitten: 1.0.3
1207212455
12456 '@chevrotain/types@11.1.2': {}
12457
1207312458 '@clack/core@1.5.1':
1207412459 dependencies:
1207512460 fast-wrap-ansi: 0.2.2
......@@ -13406,6 +13791,14 @@ snapshots:
1340613791
1340713792 '@iarna/toml@2.2.5': {}
1340813793
13794 '@iconify/types@2.0.0': {}
13795
13796 '@iconify/utils@3.1.7':
13797 dependencies:
13798 '@antfu/install-pkg': 2.1.0
13799 '@iconify/types': 2.0.0
13800 import-meta-resolve: 4.2.0
13801
1340913802 '@img/colour@1.1.0': {}
1341013803
1341113804 '@img/sharp-darwin-arm64@0.35.4':
......@@ -13683,6 +14076,10 @@ snapshots:
1368314076
1368414077 '@material/material-color-utilities@0.3.0': {}
1368514078
14079 '@mermaid-js/parser@1.2.1':
14080 dependencies:
14081 '@chevrotain/types': 11.1.2
14082
1368614083 '@modelcontextprotocol/sdk@1.29.0(zod@4.6.5)':
1368714084 dependencies:
1368814085 '@hono/node-server': 1.19.17(hono@4.13.7)
......@@ -14773,7 +15170,7 @@ snapshots:
1477315170 '@shikijs/types@4.3.0':
1477415171 dependencies:
1477515172 '@shikijs/vscode-textmate': 10.0.2
14776 '@types/hast': 3.0.4
15173 '@types/hast': 3.0.5
1477715174
1477815175 '@shikijs/vscode-textmate@10.0.2': {}
1477915176
......@@ -15314,6 +15711,123 @@ snapshots:
1531415711
1531515712 '@types/culori@4.0.1': {}
1531615713
15714 '@types/d3-array@3.2.2': {}
15715
15716 '@types/d3-axis@3.0.6':
15717 dependencies:
15718 '@types/d3-selection': 3.0.12
15719
15720 '@types/d3-brush@3.0.6':
15721 dependencies:
15722 '@types/d3-selection': 3.0.12
15723
15724 '@types/d3-chord@3.0.6': {}
15725
15726 '@types/d3-color@3.1.3': {}
15727
15728 '@types/d3-contour@3.0.6':
15729 dependencies:
15730 '@types/d3-array': 3.2.2
15731 '@types/geojson': 7946.0.16
15732
15733 '@types/d3-delaunay@6.0.4': {}
15734
15735 '@types/d3-dispatch@3.0.7': {}
15736
15737 '@types/d3-drag@3.0.7':
15738 dependencies:
15739 '@types/d3-selection': 3.0.12
15740
15741 '@types/d3-dsv@3.0.7': {}
15742
15743 '@types/d3-ease@3.0.2': {}
15744
15745 '@types/d3-fetch@3.0.7':
15746 dependencies:
15747 '@types/d3-dsv': 3.0.7
15748
15749 '@types/d3-force@3.0.10': {}
15750
15751 '@types/d3-format@3.0.4': {}
15752
15753 '@types/d3-geo@3.1.1':
15754 dependencies:
15755 '@types/geojson': 7946.0.16
15756
15757 '@types/d3-hierarchy@3.1.7': {}
15758
15759 '@types/d3-interpolate@3.0.4':
15760 dependencies:
15761 '@types/d3-color': 3.1.3
15762
15763 '@types/d3-path@3.1.1': {}
15764
15765 '@types/d3-polygon@3.0.2': {}
15766
15767 '@types/d3-quadtree@3.0.6': {}
15768
15769 '@types/d3-random@3.0.4': {}
15770
15771 '@types/d3-scale-chromatic@3.1.0': {}
15772
15773 '@types/d3-scale@4.0.9':
15774 dependencies:
15775 '@types/d3-time': 3.0.4
15776
15777 '@types/d3-selection@3.0.12': {}
15778
15779 '@types/d3-shape@3.2.0':
15780 dependencies:
15781 '@types/d3-path': 3.1.1
15782
15783 '@types/d3-time-format@4.0.3': {}
15784
15785 '@types/d3-time@3.0.4': {}
15786
15787 '@types/d3-timer@3.0.2': {}
15788
15789 '@types/d3-transition@3.0.9':
15790 dependencies:
15791 '@types/d3-selection': 3.0.12
15792
15793 '@types/d3-zoom@3.0.9':
15794 dependencies:
15795 '@types/d3-interpolate': 3.0.4
15796 '@types/d3-selection': 3.0.12
15797
15798 '@types/d3@7.4.3':
15799 dependencies:
15800 '@types/d3-array': 3.2.2
15801 '@types/d3-axis': 3.0.6
15802 '@types/d3-brush': 3.0.6
15803 '@types/d3-chord': 3.0.6
15804 '@types/d3-color': 3.1.3
15805 '@types/d3-contour': 3.0.6
15806 '@types/d3-delaunay': 6.0.4
15807 '@types/d3-dispatch': 3.0.7
15808 '@types/d3-drag': 3.0.7
15809 '@types/d3-dsv': 3.0.7
15810 '@types/d3-ease': 3.0.2
15811 '@types/d3-fetch': 3.0.7
15812 '@types/d3-force': 3.0.10
15813 '@types/d3-format': 3.0.4
15814 '@types/d3-geo': 3.1.1
15815 '@types/d3-hierarchy': 3.1.7
15816 '@types/d3-interpolate': 3.0.4
15817 '@types/d3-path': 3.1.1
15818 '@types/d3-polygon': 3.0.2
15819 '@types/d3-quadtree': 3.0.6
15820 '@types/d3-random': 3.0.4
15821 '@types/d3-scale': 4.0.9
15822 '@types/d3-scale-chromatic': 3.1.0
15823 '@types/d3-selection': 3.0.12
15824 '@types/d3-shape': 3.2.0
15825 '@types/d3-time': 3.0.4
15826 '@types/d3-time-format': 4.0.3
15827 '@types/d3-timer': 3.0.2
15828 '@types/d3-transition': 3.0.9
15829 '@types/d3-zoom': 3.0.9
15830
1531715831 '@types/debug@4.1.13':
1531815832 dependencies:
1531915833 '@types/ms': 2.1.0
......@@ -15345,6 +15859,8 @@ snapshots:
1534515859 dependencies:
1534615860 '@types/node': 24.12.4
1534715861
15862 '@types/geojson@7946.0.16': {}
15863
1534815864 '@types/hast@3.0.4':
1534915865 dependencies:
1535015866 '@types/unist': 3.0.3
......@@ -15441,6 +15957,9 @@ snapshots:
1544115957 fflate: 0.8.3
1544215958 meshoptimizer: 0.22.0
1544315959
15960 '@types/trusted-types@2.0.7':
15961 optional: true
15962
1544415963 '@types/unist@2.0.11': {}
1544515964
1544615965 '@types/unist@3.0.3': {}
......@@ -15533,6 +16052,11 @@ snapshots:
1553316052
1553416053 '@ungap/structured-clone@1.3.1': {}
1553516054
16055 '@upsetjs/venn.js@2.0.0':
16056 optionalDependencies:
16057 d3-selection: 3.0.0
16058 d3-transition: 3.0.1(d3-selection@3.0.0)
16059
1553616060 '@vercel/config@0.3.0':
1553716061 dependencies:
1553816062 '@vercel/routing-utils': 6.2.0
......@@ -16618,6 +17142,8 @@ snapshots:
1661817142
1661917143 commander@7.2.0: {}
1662017144
17145 commander@8.3.0: {}
17146
1662117147 commander@9.5.0:
1662217148 optional: true
1662317149
......@@ -16699,6 +17225,14 @@ snapshots:
1669917225 object-assign: 4.1.1
1670017226 vary: 1.1.2
1670117227
17228 cose-base@1.0.3:
17229 dependencies:
17230 layout-base: 1.0.2
17231
17232 cose-base@2.2.0:
17233 dependencies:
17234 layout-base: 2.0.1
17235
1670217236 cross-dirname@0.1.0:
1670317237 optional: true
1670417238
......@@ -16762,6 +17296,190 @@ snapshots:
1676217296
1676317297 culori@4.0.2: {}
1676417298
17299 cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.3):
17300 dependencies:
17301 cose-base: 1.0.3
17302 cytoscape: 3.34.3
17303
17304 cytoscape-fcose@2.2.0(cytoscape@3.34.3):
17305 dependencies:
17306 cose-base: 2.2.0
17307 cytoscape: 3.34.3
17308
17309 cytoscape@3.34.3: {}
17310
17311 d3-array@2.12.1:
17312 dependencies:
17313 internmap: 1.0.1
17314
17315 d3-array@3.2.4:
17316 dependencies:
17317 internmap: 2.0.3
17318
17319 d3-axis@3.0.0: {}
17320
17321 d3-brush@3.0.0:
17322 dependencies:
17323 d3-dispatch: 3.0.1
17324 d3-drag: 3.0.0
17325 d3-interpolate: 3.0.1
17326 d3-selection: 3.0.0
17327 d3-transition: 3.0.1(d3-selection@3.0.0)
17328
17329 d3-chord@3.0.1:
17330 dependencies:
17331 d3-path: 3.1.0
17332
17333 d3-color@3.1.0: {}
17334
17335 d3-contour@4.0.2:
17336 dependencies:
17337 d3-array: 3.2.4
17338
17339 d3-delaunay@6.0.4:
17340 dependencies:
17341 delaunator: 5.1.0
17342
17343 d3-dispatch@3.0.1: {}
17344
17345 d3-drag@3.0.0:
17346 dependencies:
17347 d3-dispatch: 3.0.1
17348 d3-selection: 3.0.0
17349
17350 d3-dsv@3.0.1:
17351 dependencies:
17352 commander: 7.2.0
17353 iconv-lite: 0.6.3
17354 rw: 1.3.3
17355
17356 d3-ease@3.0.1: {}
17357
17358 d3-fetch@3.0.1:
17359 dependencies:
17360 d3-dsv: 3.0.1
17361
17362 d3-force@3.0.0:
17363 dependencies:
17364 d3-dispatch: 3.0.1
17365 d3-quadtree: 3.0.1
17366 d3-timer: 3.0.1
17367
17368 d3-format@3.1.2: {}
17369
17370 d3-geo@3.1.1:
17371 dependencies:
17372 d3-array: 3.2.4
17373
17374 d3-hierarchy@3.1.2: {}
17375
17376 d3-interpolate@3.0.1:
17377 dependencies:
17378 d3-color: 3.1.0
17379
17380 d3-path@1.0.9: {}
17381
17382 d3-path@3.1.0: {}
17383
17384 d3-polygon@3.0.1: {}
17385
17386 d3-quadtree@3.0.1: {}
17387
17388 d3-random@3.0.1: {}
17389
17390 d3-sankey@0.12.3:
17391 dependencies:
17392 d3-array: 2.12.1
17393 d3-shape: 1.3.7
17394
17395 d3-scale-chromatic@3.1.0:
17396 dependencies:
17397 d3-color: 3.1.0
17398 d3-interpolate: 3.0.1
17399
17400 d3-scale@4.0.2:
17401 dependencies:
17402 d3-array: 3.2.4
17403 d3-format: 3.1.2
17404 d3-interpolate: 3.0.1
17405 d3-time: 3.1.0
17406 d3-time-format: 4.1.0
17407
17408 d3-selection@3.0.0: {}
17409
17410 d3-shape@1.3.7:
17411 dependencies:
17412 d3-path: 1.0.9
17413
17414 d3-shape@3.2.0:
17415 dependencies:
17416 d3-path: 3.1.0
17417
17418 d3-time-format@4.1.0:
17419 dependencies:
17420 d3-time: 3.1.0
17421
17422 d3-time@3.1.0:
17423 dependencies:
17424 d3-array: 3.2.4
17425
17426 d3-timer@3.0.1: {}
17427
17428 d3-transition@3.0.1(d3-selection@3.0.0):
17429 dependencies:
17430 d3-color: 3.1.0
17431 d3-dispatch: 3.0.1
17432 d3-ease: 3.0.1
17433 d3-interpolate: 3.0.1
17434 d3-selection: 3.0.0
17435 d3-timer: 3.0.1
17436
17437 d3-zoom@3.0.0:
17438 dependencies:
17439 d3-dispatch: 3.0.1
17440 d3-drag: 3.0.0
17441 d3-interpolate: 3.0.1
17442 d3-selection: 3.0.0
17443 d3-transition: 3.0.1(d3-selection@3.0.0)
17444
17445 d3@7.9.0:
17446 dependencies:
17447 d3-array: 3.2.4
17448 d3-axis: 3.0.0
17449 d3-brush: 3.0.0
17450 d3-chord: 3.0.1
17451 d3-color: 3.1.0
17452 d3-contour: 4.0.2
17453 d3-delaunay: 6.0.4
17454 d3-dispatch: 3.0.1
17455 d3-drag: 3.0.0
17456 d3-dsv: 3.0.1
17457 d3-ease: 3.0.1
17458 d3-fetch: 3.0.1
17459 d3-force: 3.0.0
17460 d3-format: 3.1.2
17461 d3-geo: 3.1.1
17462 d3-hierarchy: 3.1.2
17463 d3-interpolate: 3.0.1
17464 d3-path: 3.1.0
17465 d3-polygon: 3.0.1
17466 d3-quadtree: 3.0.1
17467 d3-random: 3.0.1
17468 d3-scale: 4.0.2
17469 d3-scale-chromatic: 3.1.0
17470 d3-selection: 3.0.0
17471 d3-shape: 3.2.0
17472 d3-time: 3.1.0
17473 d3-time-format: 4.1.0
17474 d3-timer: 3.0.1
17475 d3-transition: 3.0.1(d3-selection@3.0.0)
17476 d3-zoom: 3.0.0
17477
17478 dagre-d3-es@7.0.14:
17479 dependencies:
17480 d3: 7.9.0
17481 lodash-es: 4.18.1
17482
1676517483 data-urls@7.0.0(@noble/hashes@1.8.0):
1676617484 dependencies:
1676717485 whatwg-mimetype: 5.0.0
......@@ -16771,6 +17489,8 @@ snapshots:
1677117489
1677217490 date-fns@4.4.0: {}
1677317491
17492 dayjs@1.11.23: {}
17493
1677417494 dbus-next@0.10.2(patch_hash=cfff57561b0ee59b5addb3b2e6c6f20906e967507a530ab67e8db8108e520ba4):
1677517495 dependencies:
1677617496 '@nornagon/put': 0.0.8
......@@ -16835,6 +17555,10 @@ snapshots:
1683517555
1683617556 defu@6.1.7: {}
1683717557
17558 delaunator@5.1.0:
17559 dependencies:
17560 robust-predicates: 3.0.3
17561
1683817562 delayed-stream@1.0.0: {}
1683917563
1684017564 denque@2.1.0:
......@@ -16896,6 +17620,10 @@ snapshots:
1689617620 dependencies:
1689717621 domelementtype: 2.3.0
1689817622
17623 dompurify@3.4.16:
17624 optionalDependencies:
17625 '@types/trusted-types': 2.0.7
17626
1689917627 domutils@3.2.2:
1690017628 dependencies:
1690117629 dom-serializer: 2.0.0
......@@ -17097,6 +17825,8 @@ snapshots:
1709717825 has-tostringtag: 1.0.2
1709817826 hasown: 2.0.4
1709917827
17828 es-toolkit@1.52.0: {}
17829
1710017830 es6-error@4.1.1:
1710117831 optional: true
1710217832
......@@ -17676,6 +18406,10 @@ snapshots:
1767618406 path-expression-matcher: 1.6.2
1767718407 strnum: 2.4.2
1767818408
18409 fastdom@1.0.12:
18410 dependencies:
18411 strictdom: 1.0.1
18412
1767918413 fastest-levenshtein@1.0.16: {}
1768018414
1768118415 fb-dotslash@0.5.8: {}
......@@ -17952,6 +18686,8 @@ snapshots:
1795218686 ufo: 1.6.4
1795318687 uncrypto: 0.1.3
1795418688
18689 hachure-fill@0.5.2: {}
18690
1795518691 has-flag@3.0.0: {}
1795618692
1795718693 has-flag@4.0.0: {}
......@@ -18135,7 +18871,6 @@ snapshots:
1813518871 iconv-lite@0.6.3:
1813618872 dependencies:
1813718873 safer-buffer: 2.1.2
18138 optional: true
1813918874
1814018875 iconv-lite@0.7.2:
1814118876 dependencies:
......@@ -18150,6 +18885,8 @@ snapshots:
1815018885
1815118886 immediate@3.0.6: {}
1815218887
18888 import-meta-resolve@4.2.0: {}
18889
1815318890 inflight@1.0.6:
1815418891 dependencies:
1815518892 once: 1.4.0
......@@ -18159,6 +18896,10 @@ snapshots:
1815918896
1816018897 inline-style-parser@0.2.7: {}
1816118898
18899 internmap@1.0.1: {}
18900
18901 internmap@2.0.3: {}
18902
1816218903 invariant@2.2.4:
1816318904 dependencies:
1816418905 loose-envify: 1.4.0
......@@ -18372,10 +19113,16 @@ snapshots:
1837219113 readable-stream: 2.3.8
1837319114 setimmediate: 1.0.5
1837419115
19116 katex@0.16.47:
19117 dependencies:
19118 commander: 8.3.0
19119
1837519120 keyv@4.5.4:
1837619121 dependencies:
1837719122 json-buffer: 3.0.1
1837819123
19124 khroma@2.1.0: {}
19125
1837919126 kleur@3.0.3: {}
1838019127
1838119128 kleur@4.1.5: {}
......@@ -18398,6 +19145,10 @@ snapshots:
1839819145
1839919146 lan-network@0.2.1: {}
1840019147
19148 layout-base@1.0.2: {}
19149
19150 layout-base@2.0.1: {}
19151
1840119152 lazy-val@1.0.5: {}
1840219153
1840319154 leven@3.1.0: {}
......@@ -18483,6 +19234,8 @@ snapshots:
1848319234 p-locate: 3.0.0
1848419235 path-exists: 3.0.0
1848519236
19237 lodash-es@4.18.1: {}
19238
1848619239 lodash.debounce@4.0.8: {}
1848719240
1848819241 lodash.escaperegexp@4.1.2: {}
......@@ -18556,6 +19309,8 @@ snapshots:
1855619309
1855719310 markdown-table@3.0.4: {}
1855819311
19312 marked@16.4.2: {}
19313
1855919314 matcher@3.0.0:
1856019315 dependencies:
1856119316 escape-string-regexp: 4.0.0
......@@ -18752,6 +19507,31 @@ snapshots:
1875219507
1875319508 merge-stream@2.0.0: {}
1875419509
19510 mermaid@11.17.2:
19511 dependencies:
19512 '@braintree/sanitize-url': 7.1.2
19513 '@iconify/utils': 3.1.7
19514 '@mermaid-js/parser': 1.2.1
19515 '@types/d3': 7.4.3
19516 '@upsetjs/venn.js': 2.0.0
19517 cytoscape: 3.34.3
19518 cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.3)
19519 cytoscape-fcose: 2.2.0(cytoscape@3.34.3)
19520 d3: 7.9.0
19521 d3-sankey: 0.12.3
19522 dagre-d3-es: 7.0.14
19523 dayjs: 1.11.23
19524 dompurify: 3.4.16
19525 es-toolkit: 1.52.0
19526 fastdom: 1.0.12
19527 katex: 0.16.47
19528 khroma: 2.1.0
19529 marked: 16.4.2
19530 roughjs: 4.6.6
19531 stylis: 4.4.0
19532 ts-dedent: 2.3.0
19533 uuid: 14.0.2
19534
1875519535 meshoptimizer@0.22.0: {}
1875619536
1875719537 metro-babel-transformer@0.87.1:
......@@ -19653,6 +20433,8 @@ snapshots:
1965320433
1965420434 path-browserify@1.0.1: {}
1965520435
20436 path-data-parser@0.1.0: {}
20437
1965620438 path-exists@3.0.0: {}
1965720439
1965820440 path-expression-matcher@1.6.2: {}
......@@ -19769,6 +20551,13 @@ snapshots:
1976920551
1977020552 pngjs@7.0.0: {}
1977120553
20554 points-on-curve@0.2.0: {}
20555
20556 points-on-path@0.2.1:
20557 dependencies:
20558 path-data-parser: 0.1.0
20559 points-on-curve: 0.2.0
20560
1977220561 postcss@8.5.28:
1977320562 dependencies:
1977420563 nanoid: 3.3.19
......@@ -20386,6 +21175,8 @@ snapshots:
2038621175 sprintf-js: 1.1.3
2038721176 optional: true
2038821177
21178 robust-predicates@3.0.3: {}
21179
2038921180 rolldown@1.0.0-rc.17:
2039021181 dependencies:
2039121182 '@oxc-project/types': 0.127.0
......@@ -20431,6 +21222,13 @@ snapshots:
2043121222
2043221223 rope-sequence@1.3.4: {}
2043321224
21225 roughjs@4.6.6:
21226 dependencies:
21227 hachure-fill: 0.5.2
21228 path-data-parser: 0.1.0
21229 points-on-curve: 0.2.0
21230 points-on-path: 0.2.1
21231
2043421232 router@2.2.0:
2043521233 dependencies:
2043621234 debug: 4.4.3
......@@ -20441,6 +21239,8 @@ snapshots:
2044121239 transitivePeerDependencies:
2044221240 - supports-color
2044321241
21242 rw@1.3.3: {}
21243
2044421244 safe-buffer@5.1.2: {}
2044521245
2044621246 safe-buffer@5.2.1: {}
......@@ -20791,6 +21591,8 @@ snapshots:
2079121591
2079221592 strict-uri-encode@2.0.0: {}
2079321593
21594 strictdom@1.0.1: {}
21595
2079421596 string-width@4.2.3:
2079521597 dependencies:
2079621598 emoji-regex: 8.0.0
......@@ -20845,6 +21647,8 @@ snapshots:
2084521647 dependencies:
2084621648 inline-style-parser: 0.2.7
2084721649
21650 stylis@4.4.0: {}
21651
2084821652 sumchecker@3.0.1:
2084921653 dependencies:
2085021654 debug: 4.4.3
......@@ -21018,6 +21822,8 @@ snapshots:
2101821822
2101921823 ts-algebra@2.0.0: {}
2102021824
21825 ts-dedent@2.3.0: {}
21826
2102121827 tslib@2.8.1: {}
2102221828
2102321829 type-fest@0.13.1:
......@@ -21240,6 +22046,8 @@ snapshots:
2124022046
2124122047 utils-merge@1.0.1: {}
2124222048
22049 uuid@14.0.2: {}
22050
2124322051 uuid@7.0.3: {}
2124422052
2124522053 valibot@1.2.0(typescript@7.0.2):
third-party-licenses.config.json+27
......@@ -599,6 +599,33 @@
599599 "licenseId": "MIT",
600600 "copyrights": ["Copyright (c) 2015-present 650 Industries, Inc. (aka Expo)"]
601601 }
602 },
603 {
604 "license": "MIT",
605 "name": "fastdom",
606 "sourceUrl": "https://github.com/wilsonpage/fastdom",
607 "generatedNotice": {
608 "licenseId": "MIT",
609 "copyrights": ["Copyright (c) 2016 Wilson Page"]
610 }
611 },
612 {
613 "license": "MIT",
614 "name": "strictdom",
615 "sourceUrl": "https://github.com/wilsonpage/strictdom",
616 "generatedNotice": {
617 "licenseId": "MIT",
618 "copyrights": ["Copyright (c) 2013 Wilson Page"]
619 }
620 },
621 {
622 "license": "MIT",
623 "name": "khroma",
624 "sourceUrl": "https://github.com/fabiospampinato/khroma",
625 "generatedNotice": {
626 "licenseId": "MIT",
627 "copyrights": ["Copyright (c) 2019-present Fabio Spampinato, Andrew Maney"]
628 }
602629 }
603630 ]
604631}