From 6828e061c1f5b844719ada59d74ad857a47d560b Mon Sep 17 00:00:00 2001 From: Prashant-7718 Date: Mon, 10 Feb 2025 21:22:25 +0530 Subject: [PATCH 1/6] download diagram from project explorer --- package.json | 11 +++++++ src/extension.ts | 58 ++++++++++++++++++++++--------------- src/mermaidChartProvider.ts | 10 ++++++- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index 772a318..504ea9b 100644 --- a/package.json +++ b/package.json @@ -442,6 +442,13 @@ "when": "view == mermaidChart" } ], + "view/item/context": [ + { + "command": "mermaidChart.downloadDiagram", + "when": "viewItem == document", + "group": "inline" + } + ], "editor/context": [ { "command": "mermaidChart.preview", @@ -464,6 +471,10 @@ } ], "commands": [ + { + "command": "mermaidChart.downloadDiagram", + "title": "Download" + }, { "command": "mermaidChart.syncDiagramWithMermaid", "title": "MermaidChart: Sync Diagram" diff --git a/src/extension.ts b/src/extension.ts index c1c447a..af116e2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,5 +1,5 @@ import * as vscode from "vscode"; -import { MermaidChartProvider, MCTreeItem, getAllTreeViewProjectsCache } from "./mermaidChartProvider"; +import { MermaidChartProvider, MCTreeItem, getAllTreeViewProjectsCache, Document } from "./mermaidChartProvider"; import { MermaidChartVSCode } from "./mermaidChartVSCode"; import { applyMermaidChartTokenHighlighting, @@ -193,35 +193,36 @@ context.subscriptions.push( } }) ); - -context.subscriptions.push( + + context.subscriptions.push( vscode.commands.registerCommand('mermaid.connectDiagram',async(uri:vscode.Uri, range:vscode.Range)=>{ - const document = await vscode.workspace.openTextDocument(uri); - const content = document.getText(); - const fileExt = path.extname(document.fileName); - const blockContent = content.substring(document.offsetAt(range.start), document.offsetAt(range.end)); - const diagramCode = extractMermaidCode(blockContent, fileExt).join("\n\n"); - const projects = getAllTreeViewProjectsCache(); - - const selectedProject = await vscode.window.showQuickPick( - projects.map((p) => ({ label: p.title, description: p.title, projectId: p.uuid })), - { placeHolder: "Select a project to save the diagram" } - ); - - if (!selectedProject || !selectedProject?.projectId) { - vscode.window.showInformationMessage("Operation cancelled."); - return; - } + const document = await vscode.workspace.openTextDocument(uri); + const content = document.getText(); + const fileExt = path.extname(document.fileName); + const blockContent = content.substring(document.offsetAt(range.start), document.offsetAt(range.end)); + const diagramCode = extractMermaidCode(blockContent, fileExt).join("\n\n"); + const projects = getAllTreeViewProjectsCache(); - const response = await mcAPI.createDocumentWithDiagram(diagramCode, selectedProject.projectId) + const selectedProject = await vscode.window.showQuickPick( + projects.map((p) => ({ label: p.title, description: p.title, projectId: p.uuid })), + { placeHolder: "Select a project to save the diagram" } + ); + + if (!selectedProject || !selectedProject?.projectId) { + vscode.window.showInformationMessage("Operation cancelled."); + return; + } + + const response = await mcAPI.createDocumentWithDiagram(diagramCode, selectedProject.projectId) - const processedCode = ensureConfigBlock(diagramCode, response.documentID); + const processedCode = ensureConfigBlock(diagramCode, response.documentID); const editor= await await createMermaidFile(context, processedCode, true); if(editor){ syncAuxFile(editor.document.uri.toString(), uri,range); - } - }) -) + } + }) + ) + vscode.workspace.onWillSaveTextDocument(async (event) => { if (event.document.languageId.startsWith("mermaid")) { event.waitUntil(Promise.resolve([])); @@ -264,6 +265,15 @@ context.subscriptions.push( } }; + vscode.commands.registerCommand("mermaidChart.downloadDiagram", async (item: Document) => { + if (!item || !item.code) { + vscode.window.showErrorMessage("No code found for this diagram."); + return; + } + const processedCode = ensureConfigBlock(item.code, item.uuid); + createMermaidFile(context, processedCode, false) + }); + function showSyncWarning(editor: vscode.TextEditor) { const panel = vscode.window.createWebviewPanel( "syncWarning", diff --git a/src/mermaidChartProvider.ts b/src/mermaidChartProvider.ts index e3d7917..a1a855b 100644 --- a/src/mermaidChartProvider.ts +++ b/src/mermaidChartProvider.ts @@ -42,7 +42,7 @@ export class MCTreeItem extends vscode.TreeItem { } } -class Document implements MCTreeItem { +export class Document implements MCTreeItem { uuid: string; range: vscode.Range; title: string; @@ -169,6 +169,14 @@ export class MermaidChartProvider title: "Insert UUID into Editor", arguments: [element.uuid], }; + + if (element.children) { + treeItem.contextValue = "project"; + } else { + treeItem.contextValue = element.children ? "project" : "document"; + } + + return treeItem; } From 2f3af8e058f0222f4868181abb1ee8866e4ad2d0 Mon Sep 17 00:00:00 2001 From: Prashant-7718 Date: Tue, 11 Feb 2025 12:50:40 +0530 Subject: [PATCH 2/6] added new command for connecting local diagrams --- package.json | 9 +++++ src/commands/createFile.ts | 10 ------ src/extension.ts | 72 +++++++++++++++++++++++++------------ src/mermaidChartProvider.ts | 7 +--- src/util.ts | 5 +++ 5 files changed, 64 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 504ea9b..81899a1 100644 --- a/package.json +++ b/package.json @@ -454,6 +454,11 @@ "command": "mermaidChart.preview", "when": "resourceExtname =~ /^\\.(mmd|mermaid)$/ || resourceLangId =~ /^mermaid/", "group": "navigation" + }, + { + "command": "mermaid.connectDiagramToMermaidChart", + "when": "resourceExtname =~ /^\\.(mmd|mermaid)$/ || resourceLangId =~ /^mermaid/", + "group": "navigation" } ] }, @@ -515,6 +520,10 @@ { "command": "mermaidChart.refresh", "title": "Refresh" + }, + { + "command": "mermaid.connectDiagramToMermaidChart", + "title": "MermaidChart: Connect Diagram" } ] }, diff --git a/src/commands/createFile.ts b/src/commands/createFile.ts index 68cc8d8..afc4d40 100644 --- a/src/commands/createFile.ts +++ b/src/commands/createFile.ts @@ -51,16 +51,6 @@ export function createMermaidFile( }); } -function showSyncNotification() { - const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); - statusBarItem.text = "⚡ This file is in sync with the remote Mermaid chart. Changes will be saved remotely."; - statusBarItem.backgroundColor = new vscode.ThemeColor("statusBarItem.warningBackground"); - statusBarItem.show(); - - // Automatically hide the notification after 10 seconds - setTimeout(() => statusBarItem.hide(), 10000); -} - export function getPreview() { const activeEditor = vscode.window.activeTextEditor; diff --git a/src/extension.ts b/src/extension.ts index af116e2..e6698c0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -10,6 +10,7 @@ import { findComments, findMermaidChartTokens, findMermaidChartTokensFromAuxFiles, + hasConfigId, insertMermaidChartToken, isAuxFile, syncAuxFile, @@ -20,6 +21,7 @@ import { createMermaidFile, getPreview } from "./commands/createFile"; import { handleTextDocumentChange } from "./eventHandlers"; import path = require("path"); import { TempFileCache } from "./cache/tempFileCache"; +import { PreviewPanel } from "./panels/previewPanel"; let diagramMappings: { [key: string]: string[] } = require('../src/diagramTypeWords.json'); let isExtensionStarted = false; @@ -195,7 +197,7 @@ context.subscriptions.push( ); context.subscriptions.push( - vscode.commands.registerCommand('mermaid.connectDiagram',async(uri:vscode.Uri, range:vscode.Range)=>{ + vscode.commands.registerCommand('mermaid.connectDiagram',async(uri: vscode.Uri, range:vscode.Range)=>{ const document = await vscode.workspace.openTextDocument(uri); const content = document.getText(); const fileExt = path.extname(document.fileName); @@ -265,6 +267,52 @@ context.subscriptions.push( } }; +context.subscriptions.push( + vscode.commands.registerCommand('mermaid.connectDiagramToMermaidChart', async () => { + const activeEditor = vscode.window.activeTextEditor; + const document = activeEditor?.document; + + if (!document) { + vscode.window.showErrorMessage("No active document found."); + return; + } + + const content = document.getText(); + + // Check if the document is already connected + if (hasConfigId(content)) { + vscode.window.showWarningMessage("This diagram is already connected to Mermaid Chart."); + return; + } + + const projects = getAllTreeViewProjectsCache(); + const selectedProject = await vscode.window.showQuickPick( + projects.map((p) => ({ label: p.title, description: p.title, projectId: p.uuid })), + { placeHolder: "Select a project to save the diagram" } + ); + + if (!selectedProject || !selectedProject.projectId) { + vscode.window.showInformationMessage("Operation cancelled."); + return; + } + + const response = await mcAPI.createDocumentWithDiagram(content, selectedProject.projectId); + + const processedCode = ensureConfigBlock(content, response.documentID); + + // Apply the new processedCode to the document + await activeEditor.edit((editBuilder) => { + const fullRange = new vscode.Range( + activeEditor.document.positionAt(0), + activeEditor.document.positionAt(content.length) + ); + editBuilder.replace(fullRange, processedCode); + }); + + PreviewPanel.createOrShow(document); + }) +); + vscode.commands.registerCommand("mermaidChart.downloadDiagram", async (item: Document) => { if (!item || !item.code) { vscode.window.showErrorMessage("No code found for this diagram."); @@ -274,28 +322,6 @@ context.subscriptions.push( createMermaidFile(context, processedCode, false) }); - function showSyncWarning(editor: vscode.TextEditor) { - const panel = vscode.window.createWebviewPanel( - "syncWarning", - "", - { viewColumn: vscode.ViewColumn.Beside, preserveFocus: true }, - { enableScripts: true, retainContextWhenHidden: true } - ); - - panel.webview.html = ` - - - ⚡ This file is in sync with the remote Mermaid chart. You cannot save it locally. Changes will be saved remotely. - - `; - } - - // vscode.window.onDidChangeActiveTextEditor((editor) => { - // if (editor) { - // showSyncWarning(editor); - // } - // }); - context.subscriptions.push( vscode.commands.registerCommand("mermaidChart.focus", () => { const emptyMermaidChartToken: MCTreeItem = { diff --git a/src/mermaidChartProvider.ts b/src/mermaidChartProvider.ts index a1a855b..5410120 100644 --- a/src/mermaidChartProvider.ts +++ b/src/mermaidChartProvider.ts @@ -170,12 +170,7 @@ export class MermaidChartProvider arguments: [element.uuid], }; - if (element.children) { - treeItem.contextValue = "project"; - } else { - treeItem.contextValue = element.children ? "project" : "document"; - } - + treeItem.contextValue = element.children ? "project" : "document"; return treeItem; } diff --git a/src/util.ts b/src/util.ts index 34f1cf3..fff8f78 100644 --- a/src/util.ts +++ b/src/util.ts @@ -8,6 +8,7 @@ import { } from "./mermaidChartProvider"; import path = require("path"); +const configIdPattern = /^---\s*config:\s*([\s\S]*?)id:\s*(\S+)\s*\n/m; const activeListeners = new Map(); @@ -323,6 +324,10 @@ export function ensureConfigBlock(code: string, diagramId: string): string { } } +export function hasConfigId(code: string): boolean { + return configIdPattern.test(code); +} + // Function to extract the 'id' from the code block using a regex export function extractIdFromCode(code: string): string | null { const configPattern = /^---\s*config:\s*([\s\S]*?)---/m; From f3e8bc622f51c92b0195e7ff33e78b78ee8e5277 Mon Sep 17 00:00:00 2001 From: Prashant-7718 Date: Tue, 11 Feb 2025 18:39:59 +0530 Subject: [PATCH 3/6] code snippets integrated --- package.json | 3 + src/constants/condSnippets.ts | 455 ++++++++++++++++++++++++++++++++++ src/extension.ts | 38 +++ 3 files changed, 496 insertions(+) create mode 100644 src/constants/condSnippets.ts diff --git a/package.json b/package.json index 81899a1..9d7ec13 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,9 @@ ], "main": "./out/extension.js", "contributes": { + "completionProvider": { + "triggerCharacters": ["m"] + }, "languages": [ { "id": "mermaid", diff --git a/src/constants/condSnippets.ts b/src/constants/condSnippets.ts new file mode 100644 index 0000000..e12ad1c --- /dev/null +++ b/src/constants/condSnippets.ts @@ -0,0 +1,455 @@ +export interface SnippetData { + id: string; + diagram: "flowchart" | "sequenceDiagram"; + section: "shapes" | "notes" | "edges" | "other" | "messages"; + name: string; + code?: string; + completion?: string; + sample?: string; + image: string; +} + +const snippets: SnippetData[] = [ + { + id: "mmflrect", + diagram: "flowchart", + section: "shapes", + name: "Rectangle", + completion: '${1:rectId}["`${2:label}`"] $0', + sample: 'rectId["`label`"]', + image: "/img/flowchart/shape_rectangle", + }, + { + id: "mmflrounded", + diagram: "flowchart", + section: "shapes", + name: "Rounded", + completion: '${1:roundedId}("`${2:label}`") $0', + sample: 'roundedId("`label`")', + image: "/img/flowchart/shape_rounded", + }, + { + id: "mmflstadium", + diagram: "flowchart", + section: "shapes", + name: "Stadium", + completion: '${1:stadiumId}(["`${2:label}`"]) $0', + sample: 'stadiumId(["`label`"])', + image: "/img/flowchart/shape_stadium", + }, + { + id: "mmflsubroutine", + diagram: "flowchart", + section: "shapes", + name: "Subroutine", + completion: '${1:subId}[["`${2:label}`"]] $0', + sample: 'subId[["`label`"]]', + image: "/img/flowchart/shape_subroutine", + }, + { + id: "mmfldatabase", + diagram: "flowchart", + section: "shapes", + name: "Database", + completion: '${1:dbId}[("`${2:label}`")] $0', + sample: 'dbId[["`label`"]]', + image: "/img/flowchart/shape_database", + }, + { + id: "mmfldecision", + diagram: "flowchart", + section: "shapes", + name: "Decision", + completion: '${1:decisionId}{"`${2:label}`"} $0', + sample: 'decisionId{"`label`"}', + image: "/img/flowchart/shape_decision", + }, + { + id: "mmflcircle", + diagram: "flowchart", + section: "shapes", + name: "Circle", + completion: '${1:circleId}(("`${2:label}`")) $0', + sample: 'circleId(("`label`"))', + image: "/img/flowchart/shape_circle", + }, + { + id: "mmflasymetric", + diagram: "flowchart", + section: "shapes", + name: "Asymmetric", + completion: '${1:asymmetricId}>"`${2:label}`"] $0', + sample: 'asymmetricId>"`label`"]', + image: "/img/flowchart/shape_asymmetric", + }, + { + id: "mmflhexagon", + diagram: "flowchart", + section: "shapes", + name: "Hexagon", + code: "mmflhexagon", + completion: '${1:hexId}{{"`${2:label}`"}} $0', + sample: 'hexId{{"`label`"}}', + image: "/img/flowchart/shape_hexagon", + }, + { + id: "mmflparallelogram", + diagram: "flowchart", + section: "shapes", + name: "Parallelogram", + completion: '${1:paraId}[/"`${2:label}`"/]$0', + sample: 'paraId[/"`label`"/]', + image: "/img/flowchart/shape_parallelogram", + }, + { + id: "mmflparallelogramrev", + diagram: "flowchart", + section: "shapes", + name: "Parallelogram reversed", + completion: '${1:paraRevId}[\\"`${2:label}`"\\] $0', + sample: 'paraRevId[\\"`label`"\\]', + image: "/img/flowchart/shape_alt-parallelogram", + }, + { + id: "mmfltrapezoid", + diagram: "flowchart", + section: "shapes", + name: "Trapezoid", + completion: '${1:trapId}[/"`${2:label}`"\\]$0', + sample: 'trapId[/"`label`"\\]', + image: "/img/flowchart/shape_trapezoid", + }, + { + id: "mmfltrapezoidrev", + diagram: "flowchart", + section: "shapes", + name: "Trapezoid reversed", + completion: '${1:trapRevId}[\\"`${2:label}`"/]$0', + sample: 'trapRevId[\\"`label`"/]', + image: "/img/flowchart/shape_alt-trapezoid", + }, + { + id: "mmfldoublecircle", + diagram: "flowchart", + section: "shapes", + name: "Double Circle", + completion: '${1:doubleCircleId}((("`${2:label}`")))$0', + sample: 'doubleCircleId((("`label`")))', + image: "/img/flowchart/shape_double-circle", + }, + /* Arrows */ + { + id: "mmflarr", + diagram: "flowchart", + section: "edges", + name: "Arrow", + sample: "-->", + completion: "-->$0", + image: "/img/flowchart/edge_arrow", + }, + { + id: "mmflthkarr", + diagram: "flowchart", + section: "edges", + name: "Thick Arrow", + sample: "==>", + completion: "==>$0", + image: "/img/flowchart/edge_thick-arrow", + }, + { + id: "mmfldaarr", + diagram: "flowchart", + section: "edges", + name: "Dashed arrow", + sample: "-.->", + completion: "-.->$0", + image: "/img/flowchart/edge_dashed-arrow", + }, + { + id: "mmflarrlabel", + diagram: "flowchart", + section: "edges", + name: "Arrow with Label", + sample: "-- label -->", + completion: "-- ${1:label} -->$0", + image: "/img/flowchart/edge_arrow-with-label", + }, + { + id: "mmfltharrlabel", + diagram: "flowchart", + section: "edges", + name: "Thick Arrow with Label", + sample: "== label ==>", + completion: "== ${1:label} ==>$0", + image: "/img/flowchart/edge_thick-arrow-with-label", + }, + { + id: "mmfldaarrlabel", + diagram: "flowchart", + section: "edges", + name: "Dashed arrow with Label", + sample: "-. Label .->", + completion: "-. ${1:label} .->$0", + image: "/img/flowchart/edge_dashed-arrow-with-label", + }, + { + id: "mmflsubgraph", + diagram: "flowchart", + section: "other", + name: "Subgraph", + code: "mmflsubgraph", + sample: `subgraph one + a1-->a2 + end`, + completion: "subgraph ${1:subgraphName}\n ${2:nodeId}\nend$0", + image: "/img/flowchart/other_subgraph", + }, + { + id: "mmflclassadd", + diagram: "flowchart", + section: "other", + name: "Add class to a node", + sample: `A:::theclass`, + completion: "${1:A}:::${2:theclass}$0", + image: "/img/flowchart/other_add-class-to-a-node", + }, + { + id: "mmflclassdef", + diagram: "flowchart", + section: "other", + name: "Add class definition", + sample: `classDef theclass fill:#f96`, + completion: "classDef ${1:theclass} ${2: fill:#f96, stroke:#303;}$0", + image: "/img/flowchart/other_add-class-definition", + }, + /* Sequence Diagram */ + { + id: "mmsdpart", + diagram: "sequenceDiagram", + section: "shapes", + name: "Participant", + completion: "participant ${1:aId} as ${2:Alice}\n$0", + sample: "participant aId as Alice", + image: "/img/sequenceDiagram/shape_participant", + }, + { + id: "mmsdact", + diagram: "sequenceDiagram", + section: "shapes", + name: "Actor", + completion: "actor ${1:jId} as ${2:John}\n$0", + sample: "actor jId as John", + image: "/img/sequenceDiagram/shape_actor", + }, + { + id: "mmsdnoteleft", + diagram: "sequenceDiagram", + section: "notes", + name: "Note left of", + completion: "Note left of ${1:Alice}: ${2:A typical message}\n$0", + sample: "Note left of Alice: A typical message", + image: "/img/sequenceDiagram/note_left_of", + }, + /* Notes */ + { + id: "mmsdnoteover", + diagram: "sequenceDiagram", + section: "notes", + name: "Note over life line", + code: "mmsdnoteover", + completion: "Note over ${1:Alice},${2:John}: ${3:A typical message}\n$0", + sample: "Note over Alice,John: A typical message", + image: "/img/sequenceDiagram/note_over", + }, + { + id: "mmsdnoteright", + diagram: "sequenceDiagram", + section: "notes", + name: "Note right of", + completion: "Note right of ${1:Alice}: ${2:A typical message}\n$0", + sample: "Note right of Alice: A typical message", + image: "/img/sequenceDiagram/note_right_of", + }, + /* Other */ + { + id: "mmsdloop", + diagram: "sequenceDiagram", + section: "other", + name: "Loop", + completion: + "loop ${1:Title} \n ${2:From} ->> ${3:To}:${4:Message text}\nend\n$0", + sample: `loop Loop text + Alice->>John: Normal line + end`, + image: "/img/sequenceDiagram/other_loop", + }, + { + id: "mmsdalt", + diagram: "sequenceDiagram", + section: "other", + name: "Alt", + completion: + "alt ${1:Title}\n ${2:From} ->> ${3:To}:${4:Message text}\nelse ${5:Another Title}\n ${6:From} ->> ${7:To}:${8:Message text}\nend\n$0", + sample: `alt Alt text + Alice->>John: First case + else + Alice->>John: Second case + end + `, + image: "/img/sequenceDiagram/other_alt", + }, + { + id: "mmsdopt", + diagram: "sequenceDiagram", + section: "other", + name: "Opt", + completion: + "opt ${1:Title} \n ${2:From} ->> ${3:To}:${4:Message text} \nend\n$0", + sample: `opt Opt text + Alice->>John: First case + end + `, + image: "/img/sequenceDiagram/other_opt", + }, + { + id: "mmsdpar", + diagram: "sequenceDiagram", + section: "other", + name: "Par", + completion: + "par ${1:Title} \n ${2:From} ->> ${3:To}:${4:Message text} \nand\n ${5:From} ->> ${7:To}:${8:Message text}\nend\n$0", + sample: `par Title + Alice->>John: First parallel flow + and + Alice->>John: Second parallel flow + end + `, + image: "/img/sequenceDiagram/other_par", + }, + { + id: "mmsdhigh", + diagram: "sequenceDiagram", + section: "other", + name: "Highlight", + completion: + "rect rgb(191, 223, 255)\n ${1:From} ->> ${2:To}:${3:Message text}\nend\n$0", + sample: `rect rgb(191, 223, 255)\n + Alice->>John: Normal line + end + `, + image: "/img/sequenceDiagram/highlight", + }, + { + id: "mmsdcrit", + diagram: "sequenceDiagram", + section: "other", + name: "Critical Region", + completion: + "critical ${1:Action} \n ${2:From} ->> ${3:To}:${4:Message text}\noption ${5: Action}\n ${6:From} ->> ${7:To}:${8:Message text}\nend\n$0", + sample: `critical Action + Alice->>John: First parallel flow + option Another action + Alice->>John: Second parallel flow + end`, + image: "/img/sequenceDiagram/other_critical-region", + }, + { + id: "mmsdbreak", + diagram: "sequenceDiagram", + section: "other", + name: "Break", + completion: + "break ${1:Some reason} \n ${2:From} ->> ${3:To}:${4:Message text}\nend\n$0", + sample: `break Some reason + Alice->>John: First parallel flow + end + `, + image: "/img/sequenceDiagram/other_break", + }, + + /* Messages */ + { + id: "mmsdsolid", + diagram: "sequenceDiagram", + section: "messages", + name: "Solid Line", + completion: "${1:aId} -> ${2:jId}: ${3:Message text}\n$0", + sample: "aId -> jId: Message text\n", + image: "/img/sequenceDiagram/message_solid", + }, + { + id: "mmsddotted", + diagram: "sequenceDiagram", + section: "messages", + name: "Dotted Line", + completion: "${1:aId} --> ${2:jId}: ${3:Message text}\n$0", + sample: "aId --> jId: Message text\n", + image: "/img/sequenceDiagram/message_dotted", + }, + { + id: "mmsdsolidarr", + diagram: "sequenceDiagram", + section: "messages", + name: "Solid Line Arrow", + completion: "${1:aId} ->> ${2:jId}: ${3:Message text}\n$0", + sample: "aId ->> jId: Message text\n", + image: "/img/sequenceDiagram/message_solid_arrow", + }, + { + id: "mmsddotarr", + diagram: "sequenceDiagram", + section: "messages", + name: "Dotted Line Arrow", + completion: "${1:aId} -->> ${2:jId}: ${3:Message text}\n$0", + sample: "aId -->> jId: Message text\n", + image: "/img/sequenceDiagram/message_dotted_arrow", + }, + { + id: "mmsdmsolcross", + diagram: "sequenceDiagram", + section: "messages", + name: "Solid Line Cross", + completion: "${1:aId} -x ${2:jId}: ${3: Message text}\n$0", + sample: "aId -x jId: Message text\n", + image: "/img/sequenceDiagram/message_solid_cross", + }, + { + id: "mmsdmdotcross", + diagram: "sequenceDiagram", + section: "messages", + name: "Dotted Line Cross", + completion: "${1:aId} --x ${2:jId}: ${3:Message text}\n$0", + sample: "aId --x jId: Message text\n", + image: "/img/sequenceDiagram/message_dotted_cross", + }, + { + id: "mmsdmsolasync", + diagram: "sequenceDiagram", + section: "messages", + name: "Solid Line Async", + completion: "${1:aId} -) ${2:jId}: ${3:Message text}\n$0", + sample: "aId -) jId: Message text\n", + image: "/img/sequenceDiagram/message_solid_async", + }, + { + id: "mmsdmdotasync", + diagram: "sequenceDiagram", + section: "messages", + name: "Dotted Line Async", + completion: "${1:aId} --) ${2:jId}: ${3:Message text}\n$0", + sample: "aId --) jId: Message text\n", + image: "/img/sequenceDiagram/message_dotted_async", + }, +]; + +export const getSnippetsBasedOnDiagram = (languageId: string) => { + const parts = languageId.split('.'); + + // Ensure there is a second part (diagram type) + if (parts.length < 2) { + return []; // Return an empty array if no diagram type is found + } + + const diagramType = parts[1]; + return snippets.filter((item) => item.diagram.toLocaleLowerCase() === diagramType.toLocaleLowerCase()); +}; \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index e6698c0..76f12ff 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -22,6 +22,7 @@ import { handleTextDocumentChange } from "./eventHandlers"; import path = require("path"); import { TempFileCache } from "./cache/tempFileCache"; import { PreviewPanel } from "./panels/previewPanel"; +import { getSnippetsBasedOnDiagram } from "./constants/condSnippets"; let diagramMappings: { [key: string]: string[] } = require('../src/diagramTypeWords.json'); let isExtensionStarted = false; @@ -370,6 +371,43 @@ context.subscriptions.push( ); mermaidChartProvider.refresh(); + + const provider = vscode.languages.registerCompletionItemProvider( + [ + { scheme: 'file' }, + { scheme: 'untitled' } + ], + { + provideCompletionItems(document, position, token, context) { + const languageId = document.languageId.toLowerCase(); + + // Ensure the languageId is exactly "mermaid" or starts with "mermaid" + if (!(languageId === 'mermaid' || languageId.startsWith('mermaid'))) { + return []; + } + + const snippets = getSnippetsBasedOnDiagram(languageId); + + const suggestions: vscode.CompletionItem[] = snippets.map(snippet => { + const item = new vscode.CompletionItem( + snippet.id, + vscode.CompletionItemKind.Snippet + ); + item.insertText = new vscode.SnippetString(snippet.completion); + item.documentation = new vscode.MarkdownString( + `**${snippet.name}**\n\n\`\`\`mermaid\n${snippet.sample}\n\`\`\`` + ); + return item; + }); + + return suggestions; + }, + }, + 'm' +); + +context.subscriptions.push(provider); + console.log("Mermaid Charts view registered"); } From f0d1776f02310d7d19148c30ab152a179e9c1f60 Mon Sep 17 00:00:00 2001 From: Prashant-7718 Date: Wed, 12 Feb 2025 19:20:25 +0530 Subject: [PATCH 4/6] Resolved small bug for saving code twice --- pnpm-lock.yaml | 102 +++++++------- src/extension.ts | 2 +- webview/pnpm-lock.yaml | 300 ++++++++++++++++++++--------------------- 3 files changed, 202 insertions(+), 202 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e66f4d8..8fa4f61 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,13 +23,13 @@ importers: version: 10.0.10 '@types/node': specifier: 18.x - version: 18.19.74 + version: 18.19.75 '@types/uuid': specifier: ^9.0.2 version: 9.0.8 '@types/vscode': specifier: ^1.77.0 - version: 1.96.0 + version: 1.97.0 '@typescript-eslint/eslint-plugin': specifier: ^5.56.0 version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) @@ -72,8 +72,8 @@ packages: resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} engines: {node: '>=18.0.0'} - '@azure/core-rest-pipeline@1.18.2': - resolution: {integrity: sha512-IkTf/DWKyCklEtN/WYW3lqEsIaUDshlzWRlZNNwSYtFcCBQz++OtOjxNpm8rr1VcbMS6RpjybQa3u6B6nG0zNw==} + '@azure/core-rest-pipeline@1.19.0': + resolution: {integrity: sha512-bM3308LRyg5g7r3Twprtqww0R/r7+GyVxj4BafcmVPo4WQoGt5JXuaqxHEFjw2o3rvFZcUPiqJMg6WuvEEeVUA==} engines: {node: '>=18.0.0'} '@azure/core-tracing@1.2.0': @@ -92,16 +92,16 @@ packages: resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} engines: {node: '>=18.0.0'} - '@azure/msal-browser@4.0.2': - resolution: {integrity: sha512-bq6PasUpJgBSOSMeSlh8gXh4LZGgAaPoJFNcu5u0zxwueh+I8NpMb9oxlCfS/8CJHyXUhTUAMLSnvThemNdyQw==} + '@azure/msal-browser@4.2.1': + resolution: {integrity: sha512-pJX+HNVxEEvxqj3xvnFKMi/Yb6jadwOWN2QkDagj2GV2XXxJg3qq5zkE+czVw6Cmf4QiXxct+J0WF23sE8vZyA==} engines: {node: '>=0.8.0'} '@azure/msal-common@14.16.0': resolution: {integrity: sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==} engines: {node: '>=0.8.0'} - '@azure/msal-common@15.0.2': - resolution: {integrity: sha512-RQHmI5vOMYLNSO0ER7d/O9TojWWEn4m0YtWbL8mZthkKGQI7ALn5ONHUVTUSxSVYwGYdHGNrwiHAzQhboqwZzQ==} + '@azure/msal-common@15.1.1': + resolution: {integrity: sha512-bvLWYq9fleAcTJ6H+hfkG91On6vI/UhGyOB7Z6r0Bsa+KTL3zPtigmGCOJgdxrEklOYD88X9SehexLDH/5NRKQ==} engines: {node: '>=0.8.0'} '@azure/msal-node@2.16.2': @@ -295,8 +295,8 @@ packages: '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/node@18.19.74': - resolution: {integrity: sha512-HMwEkkifei3L605gFdV+/UwtpxP6JSzM+xFk2Ia6DNFSwSVBRh9qp5Tgf4lNFOMfPVuU0WnkcWpXZpgn5ufO4A==} + '@types/node@18.19.75': + resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -304,8 +304,8 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/vscode@1.96.0': - resolution: {integrity: sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==} + '@types/vscode@1.97.0': + resolution: {integrity: sha512-ueE73loeOTe7olaVyqP9mrRI54kVPJifUPjblZo9fYcv1CuVLPOEKEkqW0GkqPC454+nCEoigLWnC2Pp7prZ9w==} '@typescript-eslint/eslint-plugin@5.62.0': resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} @@ -803,8 +803,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -955,8 +955,8 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} imurmurhash@0.1.4: @@ -1196,8 +1196,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-abi@3.73.0: - resolution: {integrity: sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==} + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} engines: {node: '>=10'} node-addon-api@4.3.0: @@ -1210,8 +1210,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} once@1.4.0: @@ -1374,8 +1374,8 @@ packages: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true @@ -1635,7 +1635,7 @@ snapshots: dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.9.0 - '@azure/core-rest-pipeline': 1.18.2 + '@azure/core-rest-pipeline': 1.19.0 '@azure/core-tracing': 1.2.0 '@azure/core-util': 1.11.0 '@azure/logger': 1.1.4 @@ -1643,7 +1643,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/core-rest-pipeline@1.18.2': + '@azure/core-rest-pipeline@1.19.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.9.0 @@ -1670,11 +1670,11 @@ snapshots: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.9.0 '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.18.2 + '@azure/core-rest-pipeline': 1.19.0 '@azure/core-tracing': 1.2.0 '@azure/core-util': 1.11.0 '@azure/logger': 1.1.4 - '@azure/msal-browser': 4.0.2 + '@azure/msal-browser': 4.2.1 '@azure/msal-node': 2.16.2 events: 3.3.0 jws: 4.0.0 @@ -1688,13 +1688,13 @@ snapshots: dependencies: tslib: 2.8.1 - '@azure/msal-browser@4.0.2': + '@azure/msal-browser@4.2.1': dependencies: - '@azure/msal-common': 15.0.2 + '@azure/msal-common': 15.1.1 '@azure/msal-common@14.16.0': {} - '@azure/msal-common@15.0.2': {} + '@azure/msal-common@15.1.1': {} '@azure/msal-node@2.16.2': dependencies: @@ -1782,7 +1782,7 @@ snapshots: espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 @@ -1813,12 +1813,12 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 + fastq: 1.19.0 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.74 + '@types/node': 18.19.75 '@types/json-schema@7.0.15': {} @@ -1826,7 +1826,7 @@ snapshots: '@types/mocha@10.0.10': {} - '@types/node@18.19.74': + '@types/node@18.19.75': dependencies: undici-types: 5.26.5 @@ -1834,7 +1834,7 @@ snapshots: '@types/uuid@9.0.8': {} - '@types/vscode@1.96.0': {} + '@types/vscode@1.97.0': {} '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)': dependencies: @@ -1848,7 +1848,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 - semver: 7.6.3 + semver: 7.7.1 tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 @@ -1893,7 +1893,7 @@ snapshots: debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 + semver: 7.7.1 tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 @@ -1910,7 +1910,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript @@ -1928,7 +1928,7 @@ snapshots: https-proxy-agent: 7.0.6 jszip: 3.10.1 ora: 7.0.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -1990,7 +1990,7 @@ snapshots: minimatch: 3.1.2 parse-semver: 1.1.1 read: 1.0.7 - semver: 7.6.3 + semver: 7.7.1 tmp: 0.2.3 typed-rest-client: 1.8.11 url-join: 4.0.1 @@ -2439,7 +2439,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.18.0: + fastq@1.19.0: dependencies: reusify: 1.0.4 @@ -2600,7 +2600,7 @@ snapshots: immediate@3.0.6: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 @@ -2674,7 +2674,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.3 + semver: 7.7.1 jszip@3.10.1: dependencies: @@ -2844,9 +2844,9 @@ snapshots: natural-compare@1.4.0: {} - node-abi@3.73.0: + node-abi@3.74.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 optional: true node-addon-api@4.3.0: @@ -2858,7 +2858,7 @@ snapshots: dependencies: boolbase: 1.0.0 - object-inspect@1.13.3: {} + object-inspect@1.13.4: {} once@1.4.0: dependencies: @@ -2946,7 +2946,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.73.0 + node-abi: 3.74.0 pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 @@ -3039,7 +3039,7 @@ snapshots: semver@5.7.2: {} - semver@7.6.3: {} + semver@7.7.1: {} serialize-javascript@6.0.2: dependencies: @@ -3056,27 +3056,27 @@ snapshots: side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map@1.0.1: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map: 1.0.1 side-channel@1.1.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 diff --git a/src/extension.ts b/src/extension.ts index 76f12ff..84e1fab 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -256,8 +256,8 @@ context.subscriptions.push( } else if (TempFileCache.hasTempUri(context, document.uri.toString())){ vscode.window.showInformationMessage('This is temporary buffer, this can not be saved locally'); } else if (!TempFileCache.hasTempUri(context, document.uri.toString()) && diagramId) { - await vscode.commands.executeCommand('workbench.action.files.save'); await mcAPI.saveDocumentCode(content, diagramId); + await vscode.commands.executeCommand('workbench.action.files.save'); vscode.window.showInformationMessage(`Diagram synced successfully with Mermaid chart. Diagram ID: ${diagramId}`); } else { await vscode.commands.executeCommand('workbench.action.files.save'); diff --git a/webview/pnpm-lock.yaml b/webview/pnpm-lock.yaml index 9cf93d2..023deee 100644 --- a/webview/pnpm-lock.yaml +++ b/webview/pnpm-lock.yaml @@ -38,16 +38,16 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.19.3)(vite@6.0.11) + version: 5.0.3(svelte@5.19.10)(vite@6.1.0) '@types/vscode-webview': specifier: ^1.57.5 version: 1.57.5 svelte: specifier: ^5.17.3 - version: 5.19.3 + version: 5.19.10 vite: specifier: ^6.0.7 - version: 6.0.11 + version: 6.1.0 packages: @@ -55,11 +55,11 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/install-pkg@0.4.1': - resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + '@antfu/install-pkg@1.0.0': + resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} - '@antfu/utils@0.7.10': - resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + '@antfu/utils@8.1.0': + resolution: {integrity: sha512-XPR7Jfwp0FFl/dFYPX8ZjpmU4/1mIXTjnZ1ba48BLMyKOV62/tiRjdsFcPs2hsYcSud4tzk7w3a3LjX8Fu3huA==} '@braintree/sanitize-url@7.1.1': resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} @@ -239,8 +239,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.2.1': - resolution: {integrity: sha512-0/7J7hk4PqXmxo5PDBDxmnecw5PxklZJfNjIVG9FM0mEfVrvfudS22rYWsqVk6gR3UJ/mSYS90X4R3znXnqfNA==} + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} @@ -283,98 +283,98 @@ packages: '@panzoom/panzoom@4.6.0': resolution: {integrity: sha512-3KxkY1lNKFn98fW5ZFR6vV0YzsXj3I4EQDyFWSXME6/cic86eSS7VjuqIjrA3PEpySo0r5fFtlX8eYCt4JPUFQ==} - '@rollup/rollup-android-arm-eabi@4.32.0': - resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==} + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.32.0': - resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==} + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.32.0': - resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==} + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.32.0': - resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==} + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.32.0': - resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==} + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.32.0': - resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==} + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': - resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==} + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.32.0': - resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==} + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.32.0': - resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==} + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.32.0': - resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==} + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': - resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==} + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': - resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.32.0': - resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==} + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.32.0': - resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==} + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.32.0': - resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==} + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.32.0': - resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==} + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.32.0': - resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==} + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.32.0': - resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==} + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.32.0': - resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==} + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} cpu: [x64] os: [win32] @@ -448,8 +448,8 @@ packages: '@types/d3-interpolate@3.0.4': resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - '@types/d3-path@3.1.0': - resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} '@types/d3-polygon@3.0.2': resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} @@ -463,8 +463,8 @@ packages: '@types/d3-scale-chromatic@3.1.0': resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} - '@types/d3-scale@4.0.8': - resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} '@types/d3-selection@3.0.11': resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} @@ -770,8 +770,8 @@ packages: resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} engines: {node: '>=0.3.1'} - dompurify@3.2.3: - resolution: {integrity: sha512-U1U5Hzc2MO0oW3DF+G9qYN0aT7atAou4AgI0XjWz061nyBPbdxkfdhfy5uMgGn6+oLFCfn44ZGbdDqCzVmlOWA==} + dompurify@3.2.4: + resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} @@ -794,8 +794,8 @@ packages: esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - esrap@1.4.3: - resolution: {integrity: sha512-Xddc1RsoFJ4z9nR7W7BFaEPIp4UXoeQ0+077UdWLxbafMQFyU79sQJMk7kxNgRwQ9/aVgaKacCHC2pUACGwmYw==} + esrap@1.4.4: + resolution: {integrity: sha512-tDN6xP/r/b3WmdpWm7LybrD252hY52IokcycPnO+WHfhFF0+n5AWtcLLK7VNV6m0uYgVRhGVs8OkZwRyfC7HzQ==} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -893,8 +893,8 @@ packages: layout-base@2.0.1: resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} - local-pkg@0.5.1: - resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + local-pkg@1.0.0: + resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==} engines: {node: '>=14'} locate-character@3.0.0: @@ -947,8 +947,8 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - package-manager-detector@0.2.8: - resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} path-data-parser@0.1.0: resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} @@ -957,8 +957,8 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - pathe@2.0.2: - resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -972,15 +972,15 @@ packages: points-on-path@0.2.1: resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup@4.32.0: - resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==} + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1008,15 +1008,15 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - stylis@4.3.5: - resolution: {integrity: sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==} + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} supports-color@5.4.0: resolution: {integrity: sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==} engines: {node: '>=4'} - svelte@5.19.3: - resolution: {integrity: sha512-rb/bkYG9jq67OCWikMvaPnfOobyGn0JizVDwHpdeBtLiNXPMcoA9GTFC3BhptP7xGNquUU8J5GiS7PlGlfDAFA==} + svelte@5.19.10: + resolution: {integrity: sha512-7lId+z36IZWzuo0N0oGOStEPi3/Wv1VQEnIzMmDaLDSlJSruKplhhVr+NaZ0Wh7ZILfOjbeU7PbTjqmQQYZF4A==} engines: {node: '>=18'} tinyexec@0.3.2: @@ -1033,8 +1033,8 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - vite@6.0.11: - resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} + vite@6.1.0: + resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -1125,12 +1125,12 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/install-pkg@0.4.1': + '@antfu/install-pkg@1.0.0': dependencies: - package-manager-detector: 0.2.8 + package-manager-detector: 0.2.9 tinyexec: 0.3.2 - '@antfu/utils@0.7.10': {} + '@antfu/utils@8.1.0': {} '@braintree/sanitize-url@7.1.1': {} @@ -1234,15 +1234,15 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@2.2.1': + '@iconify/utils@2.3.0': dependencies: - '@antfu/install-pkg': 0.4.1 - '@antfu/utils': 0.7.10 + '@antfu/install-pkg': 1.0.0 + '@antfu/utils': 8.1.0 '@iconify/types': 2.0.0 debug: 4.4.0 globals: 15.14.0 kolorist: 1.8.0 - local-pkg: 0.5.1 + local-pkg: 1.0.0 mlly: 1.7.4 transitivePeerDependencies: - supports-color @@ -1285,7 +1285,7 @@ snapshots: '@mermaid-chart/mermaid@11.4.1-b.2': dependencies: '@braintree/sanitize-url': 7.1.1 - '@iconify/utils': 2.2.1 + '@iconify/utils': 2.3.0 '@mermaid-js/parser': 0.3.1-rc.1 '@types/d3': 7.4.3 cytoscape: 3.31.0 @@ -1295,13 +1295,13 @@ snapshots: d3-sankey: 0.12.3 dagre-d3-es: 7.0.11 dayjs: 1.11.13 - dompurify: 3.2.3 + dompurify: 3.2.4 katex: 0.16.21 khroma: 2.1.0 lodash-es: 4.17.21 marked: 13.0.3 roughjs: 4.6.6 - stylis: 4.3.5 + stylis: 4.3.6 ts-dedent: 2.2.0 uuid: 9.0.1 transitivePeerDependencies: @@ -1313,82 +1313,82 @@ snapshots: '@panzoom/panzoom@4.6.0': {} - '@rollup/rollup-android-arm-eabi@4.32.0': + '@rollup/rollup-android-arm-eabi@4.34.6': optional: true - '@rollup/rollup-android-arm64@4.32.0': + '@rollup/rollup-android-arm64@4.34.6': optional: true - '@rollup/rollup-darwin-arm64@4.32.0': + '@rollup/rollup-darwin-arm64@4.34.6': optional: true - '@rollup/rollup-darwin-x64@4.32.0': + '@rollup/rollup-darwin-x64@4.34.6': optional: true - '@rollup/rollup-freebsd-arm64@4.32.0': + '@rollup/rollup-freebsd-arm64@4.34.6': optional: true - '@rollup/rollup-freebsd-x64@4.32.0': + '@rollup/rollup-freebsd-x64@4.34.6': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.32.0': + '@rollup/rollup-linux-arm-musleabihf@4.34.6': optional: true - '@rollup/rollup-linux-arm64-gnu@4.32.0': + '@rollup/rollup-linux-arm64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-arm64-musl@4.32.0': + '@rollup/rollup-linux-arm64-musl@4.34.6': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.32.0': + '@rollup/rollup-linux-riscv64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-s390x-gnu@4.32.0': + '@rollup/rollup-linux-s390x-gnu@4.34.6': optional: true - '@rollup/rollup-linux-x64-gnu@4.32.0': + '@rollup/rollup-linux-x64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-x64-musl@4.32.0': + '@rollup/rollup-linux-x64-musl@4.34.6': optional: true - '@rollup/rollup-win32-arm64-msvc@4.32.0': + '@rollup/rollup-win32-arm64-msvc@4.34.6': optional: true - '@rollup/rollup-win32-ia32-msvc@4.32.0': + '@rollup/rollup-win32-ia32-msvc@4.34.6': optional: true - '@rollup/rollup-win32-x64-msvc@4.32.0': + '@rollup/rollup-win32-x64-msvc@4.34.6': optional: true - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.3)(vite@6.0.11))(svelte@5.19.3)(vite@6.0.11)': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.10)(vite@6.1.0))(svelte@5.19.10)(vite@6.1.0)': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.3)(vite@6.0.11) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.10)(vite@6.1.0) debug: 4.4.0 - svelte: 5.19.3 - vite: 6.0.11 + svelte: 5.19.10 + vite: 6.1.0 transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.3)(vite@6.0.11)': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.10)(vite@6.1.0)': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.3)(vite@6.0.11))(svelte@5.19.3)(vite@6.0.11) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.10)(vite@6.1.0))(svelte@5.19.10)(vite@6.1.0) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.19.3 - vite: 6.0.11 - vitefu: 1.0.5(vite@6.0.11) + svelte: 5.19.10 + vite: 6.1.0 + vitefu: 1.0.5(vite@6.1.0) transitivePeerDependencies: - supports-color @@ -1443,7 +1443,7 @@ snapshots: dependencies: '@types/d3-color': 3.1.3 - '@types/d3-path@3.1.0': {} + '@types/d3-path@3.1.1': {} '@types/d3-polygon@3.0.2': {} @@ -1453,7 +1453,7 @@ snapshots: '@types/d3-scale-chromatic@3.1.0': {} - '@types/d3-scale@4.0.8': + '@types/d3-scale@4.0.9': dependencies: '@types/d3-time': 3.0.4 @@ -1461,7 +1461,7 @@ snapshots: '@types/d3-shape@3.1.7': dependencies: - '@types/d3-path': 3.1.0 + '@types/d3-path': 3.1.1 '@types/d3-time-format@4.0.3': {} @@ -1497,11 +1497,11 @@ snapshots: '@types/d3-geo': 3.1.0 '@types/d3-hierarchy': 3.1.7 '@types/d3-interpolate': 3.0.4 - '@types/d3-path': 3.1.0 + '@types/d3-path': 3.1.1 '@types/d3-polygon': 3.0.2 '@types/d3-quadtree': 3.0.6 '@types/d3-random': 3.0.3 - '@types/d3-scale': 4.0.8 + '@types/d3-scale': 4.0.9 '@types/d3-scale-chromatic': 3.1.0 '@types/d3-selection': 3.0.11 '@types/d3-shape': 3.1.7 @@ -1793,7 +1793,7 @@ snapshots: diff@3.5.0: {} - dompurify@3.2.3: + dompurify@3.2.4: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -1837,7 +1837,7 @@ snapshots: esm-env@1.2.2: {} - esrap@1.4.3: + esrap@1.4.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -1944,7 +1944,7 @@ snapshots: layout-base@2.0.1: {} - local-pkg@0.5.1: + local-pkg@1.0.0: dependencies: mlly: 1.7.4 pkg-types: 1.3.1 @@ -1976,7 +1976,7 @@ snapshots: mlly@1.7.4: dependencies: acorn: 8.14.0 - pathe: 2.0.2 + pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.5.4 @@ -2004,13 +2004,13 @@ snapshots: dependencies: wrappy: 1.0.2 - package-manager-detector@0.2.8: {} + package-manager-detector@0.2.9: {} path-data-parser@0.1.0: {} path-is-absolute@1.0.1: {} - pathe@2.0.2: {} + pathe@2.0.3: {} picocolors@1.1.1: {} @@ -2018,7 +2018,7 @@ snapshots: dependencies: confbox: 0.1.8 mlly: 1.7.4 - pathe: 2.0.2 + pathe: 2.0.3 points-on-curve@0.2.0: {} @@ -2027,7 +2027,7 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - postcss@8.5.1: + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -2035,29 +2035,29 @@ snapshots: robust-predicates@3.0.2: {} - rollup@4.32.0: + rollup@4.34.6: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.32.0 - '@rollup/rollup-android-arm64': 4.32.0 - '@rollup/rollup-darwin-arm64': 4.32.0 - '@rollup/rollup-darwin-x64': 4.32.0 - '@rollup/rollup-freebsd-arm64': 4.32.0 - '@rollup/rollup-freebsd-x64': 4.32.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.32.0 - '@rollup/rollup-linux-arm-musleabihf': 4.32.0 - '@rollup/rollup-linux-arm64-gnu': 4.32.0 - '@rollup/rollup-linux-arm64-musl': 4.32.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.32.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0 - '@rollup/rollup-linux-riscv64-gnu': 4.32.0 - '@rollup/rollup-linux-s390x-gnu': 4.32.0 - '@rollup/rollup-linux-x64-gnu': 4.32.0 - '@rollup/rollup-linux-x64-musl': 4.32.0 - '@rollup/rollup-win32-arm64-msvc': 4.32.0 - '@rollup/rollup-win32-ia32-msvc': 4.32.0 - '@rollup/rollup-win32-x64-msvc': 4.32.0 + '@rollup/rollup-android-arm-eabi': 4.34.6 + '@rollup/rollup-android-arm64': 4.34.6 + '@rollup/rollup-darwin-arm64': 4.34.6 + '@rollup/rollup-darwin-x64': 4.34.6 + '@rollup/rollup-freebsd-arm64': 4.34.6 + '@rollup/rollup-freebsd-x64': 4.34.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 + '@rollup/rollup-linux-arm-musleabihf': 4.34.6 + '@rollup/rollup-linux-arm64-gnu': 4.34.6 + '@rollup/rollup-linux-arm64-musl': 4.34.6 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 + '@rollup/rollup-linux-riscv64-gnu': 4.34.6 + '@rollup/rollup-linux-s390x-gnu': 4.34.6 + '@rollup/rollup-linux-x64-gnu': 4.34.6 + '@rollup/rollup-linux-x64-musl': 4.34.6 + '@rollup/rollup-win32-arm64-msvc': 4.34.6 + '@rollup/rollup-win32-ia32-msvc': 4.34.6 + '@rollup/rollup-win32-x64-msvc': 4.34.6 fsevents: 2.3.3 roughjs@4.6.6: @@ -2082,13 +2082,13 @@ snapshots: source-map@0.6.1: {} - stylis@4.3.5: {} + stylis@4.3.6: {} supports-color@5.4.0: dependencies: has-flag: 3.0.0 - svelte@5.19.3: + svelte@5.19.10: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -2099,7 +2099,7 @@ snapshots: axobject-query: 4.1.0 clsx: 2.1.1 esm-env: 1.2.2 - esrap: 1.4.3 + esrap: 1.4.4 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.17 @@ -2113,17 +2113,17 @@ snapshots: uuid@9.0.1: {} - vite@6.0.11: + vite@6.1.0: dependencies: esbuild: 0.24.2 - postcss: 8.5.1 - rollup: 4.32.0 + postcss: 8.5.2 + rollup: 4.34.6 optionalDependencies: fsevents: 2.3.3 - vitefu@1.0.5(vite@6.0.11): + vitefu@1.0.5(vite@6.1.0): optionalDependencies: - vite: 6.0.11 + vite: 6.1.0 vscode-jsonrpc@8.2.0: {} From fc4ed158623be9906121b8c779f2c3e1877dd138 Mon Sep 17 00:00:00 2001 From: Prashant-7718 Date: Thu, 13 Feb 2025 13:55:00 +0530 Subject: [PATCH 5/6] trigger code snippets on cnt + shift + k --- package.json | 13 +++++++++++-- src/extension.ts | 22 +++++++++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 9d7ec13..66cdbcb 100644 --- a/package.json +++ b/package.json @@ -459,7 +459,7 @@ "group": "navigation" }, { - "command": "mermaid.connectDiagramToMermaidChart", + "command": "mermaidChart.connectDiagramToMermaidChart", "when": "resourceExtname =~ /^\\.(mmd|mermaid)$/ || resourceLangId =~ /^mermaid/", "group": "navigation" } @@ -476,6 +476,11 @@ "command": "mermaidChart.syncDiagramWithMermaid", "when": "editorLangId =~ /^mermaid/", "mac": "cmd+s" + }, + { + "command": "mermaidChart.showCompletions", + "key": "ctrl+shift+k", + "when": "editorLangId =~ /^mermaid/" } ], "commands": [ @@ -525,8 +530,12 @@ "title": "Refresh" }, { - "command": "mermaid.connectDiagramToMermaidChart", + "command": "mermaidChart.connectDiagramToMermaidChart", "title": "MermaidChart: Connect Diagram" + }, + { + "command": "mermaidChart.showCompletions", + "title": "Trigger Mermaid Completions" } ] }, diff --git a/src/extension.ts b/src/extension.ts index 84e1fab..dab96bd 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -233,6 +233,7 @@ context.subscriptions.push( const diagramId = extractIdFromCode(content); if (diagramId) { await mcAPI.saveDocumentCode(content, diagramId); + vscode.window.showInformationMessage(`Diagram synced successfully with Mermaid chart. Diagram ID: ${diagramId}`); } } }); @@ -256,9 +257,7 @@ context.subscriptions.push( } else if (TempFileCache.hasTempUri(context, document.uri.toString())){ vscode.window.showInformationMessage('This is temporary buffer, this can not be saved locally'); } else if (!TempFileCache.hasTempUri(context, document.uri.toString()) && diagramId) { - await mcAPI.saveDocumentCode(content, diagramId); await vscode.commands.executeCommand('workbench.action.files.save'); - vscode.window.showInformationMessage(`Diagram synced successfully with Mermaid chart. Diagram ID: ${diagramId}`); } else { await vscode.commands.executeCommand('workbench.action.files.save'); } @@ -269,7 +268,7 @@ context.subscriptions.push( }; context.subscriptions.push( - vscode.commands.registerCommand('mermaid.connectDiagramToMermaidChart', async () => { + vscode.commands.registerCommand('mermaidChart.connectDiagramToMermaidChart', async () => { const activeEditor = vscode.window.activeTextEditor; const document = activeEditor?.document; @@ -311,6 +310,8 @@ context.subscriptions.push( }); PreviewPanel.createOrShow(document); + vscode.window.showInformationMessage(`Diagram connected successfully with Mermaid chart.`); + }) ); @@ -404,9 +405,20 @@ context.subscriptions.push( }, }, 'm' -); + ); + context.subscriptions.push(provider); + + const triggerCompletions = vscode.commands.registerCommand( + 'mermaidChart.showCompletions', + () => { + const editor = vscode.window.activeTextEditor; + if (editor) { + vscode.commands.executeCommand('editor.action.triggerSuggest'); + } + } + ); -context.subscriptions.push(provider); + context.subscriptions.push(provider, triggerCompletions); console.log("Mermaid Charts view registered"); } From 1268bbc2204ce4e2bd45237901a2959a7f2c0c66 Mon Sep 17 00:00:00 2001 From: Prashant-7718 Date: Thu, 13 Feb 2025 18:52:43 +0530 Subject: [PATCH 6/6] mermaid chart sdk integrated --- .vscode/settings.json | 3 +- package.json | 7 +- pnpm-lock.yaml | 138 ++++++---- src/extension.ts | 85 ++++-- src/mermaidAPI.ts | 317 ---------------------- src/mermaidChartAuthenticationProvider.ts | 13 +- src/mermaidChartProvider.ts | 9 +- src/mermaidChartVSCode.ts | 2 +- src/util.ts | 28 +- webview/pnpm-lock.yaml | 308 ++++++++++----------- 10 files changed, 332 insertions(+), 578 deletions(-) delete mode 100644 src/mermaidAPI.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 30bf8c2..ec20fef 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,5 +7,6 @@ "out": true // set this to false to include "out" folder in search results }, // Turn off tsc task auto detection since we have the necessary tasks as npm scripts - "typescript.tsc.autoDetect": "off" + "typescript.tsc.autoDetect": "off", + "cSpell.words": ["mermaidchart"] } \ No newline at end of file diff --git a/package.json b/package.json index 63484c3..e7e1ddb 100644 --- a/package.json +++ b/package.json @@ -515,7 +515,8 @@ "typescript": "^4.9.5" }, "dependencies": { - "axios": "^1.4.0", - "uuid": "^9.0.0" - } + "uuid": "^9.0.0", + "@mermaidchart/sdk": "^0.2.0" + }, + "packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e66f4d8..4b01f3c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,9 @@ importers: .: dependencies: - axios: - specifier: ^1.4.0 - version: 1.7.9 + '@mermaidchart/sdk': + specifier: ^0.2.0 + version: 0.2.0 uuid: specifier: ^9.0.0 version: 9.0.1 @@ -23,13 +23,13 @@ importers: version: 10.0.10 '@types/node': specifier: 18.x - version: 18.19.74 + version: 18.19.75 '@types/uuid': specifier: ^9.0.2 version: 9.0.8 '@types/vscode': specifier: ^1.77.0 - version: 1.96.0 + version: 1.97.0 '@typescript-eslint/eslint-plugin': specifier: ^5.56.0 version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) @@ -72,8 +72,8 @@ packages: resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} engines: {node: '>=18.0.0'} - '@azure/core-rest-pipeline@1.18.2': - resolution: {integrity: sha512-IkTf/DWKyCklEtN/WYW3lqEsIaUDshlzWRlZNNwSYtFcCBQz++OtOjxNpm8rr1VcbMS6RpjybQa3u6B6nG0zNw==} + '@azure/core-rest-pipeline@1.19.0': + resolution: {integrity: sha512-bM3308LRyg5g7r3Twprtqww0R/r7+GyVxj4BafcmVPo4WQoGt5JXuaqxHEFjw2o3rvFZcUPiqJMg6WuvEEeVUA==} engines: {node: '>=18.0.0'} '@azure/core-tracing@1.2.0': @@ -92,22 +92,26 @@ packages: resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} engines: {node: '>=18.0.0'} - '@azure/msal-browser@4.0.2': - resolution: {integrity: sha512-bq6PasUpJgBSOSMeSlh8gXh4LZGgAaPoJFNcu5u0zxwueh+I8NpMb9oxlCfS/8CJHyXUhTUAMLSnvThemNdyQw==} + '@azure/msal-browser@4.2.1': + resolution: {integrity: sha512-pJX+HNVxEEvxqj3xvnFKMi/Yb6jadwOWN2QkDagj2GV2XXxJg3qq5zkE+czVw6Cmf4QiXxct+J0WF23sE8vZyA==} engines: {node: '>=0.8.0'} '@azure/msal-common@14.16.0': resolution: {integrity: sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==} engines: {node: '>=0.8.0'} - '@azure/msal-common@15.0.2': - resolution: {integrity: sha512-RQHmI5vOMYLNSO0ER7d/O9TojWWEn4m0YtWbL8mZthkKGQI7ALn5ONHUVTUSxSVYwGYdHGNrwiHAzQhboqwZzQ==} + '@azure/msal-common@15.1.1': + resolution: {integrity: sha512-bvLWYq9fleAcTJ6H+hfkG91On6vI/UhGyOB7Z6r0Bsa+KTL3zPtigmGCOJgdxrEklOYD88X9SehexLDH/5NRKQ==} engines: {node: '>=0.8.0'} '@azure/msal-node@2.16.2': resolution: {integrity: sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==} engines: {node: '>=16'} + '@badgateway/oauth2-client@2.4.2': + resolution: {integrity: sha512-70Fmzlmn8EfCjjssls8N6E94quBUWnLhu4inPZU2pkwpc6ZvbErkLRvtkYl81KFCvVcuVC0X10QPZVNwjXo2KA==} + engines: {node: '>= 14'} + '@esbuild/android-arm64@0.18.20': resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -271,6 +275,10 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@mermaidchart/sdk@0.2.0': + resolution: {integrity: sha512-ghIeLxw9FH6WAmw3lDjwGdk0ZCtd08DSEti5OJVKCDi1iIFa/MT8M0tnzBiQvVs/YOeBwW7lzqU+rkT0lxh43g==} + engines: {node: ^18.18.0 || >= 20.0.0} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -295,8 +303,8 @@ packages: '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/node@18.19.74': - resolution: {integrity: sha512-HMwEkkifei3L605gFdV+/UwtpxP6JSzM+xFk2Ia6DNFSwSVBRh9qp5Tgf4lNFOMfPVuU0WnkcWpXZpgn5ufO4A==} + '@types/node@18.19.75': + resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -304,8 +312,8 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/vscode@1.96.0': - resolution: {integrity: sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==} + '@types/vscode@1.97.0': + resolution: {integrity: sha512-ueE73loeOTe7olaVyqP9mrRI54kVPJifUPjblZo9fYcv1CuVLPOEKEkqW0GkqPC454+nCEoigLWnC2Pp7prZ9w==} '@typescript-eslint/eslint-plugin@5.62.0': resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} @@ -526,8 +534,8 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} call-bound@1.0.3: @@ -803,8 +811,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -955,8 +963,8 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} imurmurhash@0.1.4: @@ -1196,8 +1204,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-abi@3.73.0: - resolution: {integrity: sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==} + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} engines: {node: '>=10'} node-addon-api@4.3.0: @@ -1210,8 +1218,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} once@1.4.0: @@ -1374,8 +1382,8 @@ packages: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true @@ -1635,7 +1643,7 @@ snapshots: dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.9.0 - '@azure/core-rest-pipeline': 1.18.2 + '@azure/core-rest-pipeline': 1.19.0 '@azure/core-tracing': 1.2.0 '@azure/core-util': 1.11.0 '@azure/logger': 1.1.4 @@ -1643,7 +1651,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/core-rest-pipeline@1.18.2': + '@azure/core-rest-pipeline@1.19.0': dependencies: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.9.0 @@ -1670,11 +1678,11 @@ snapshots: '@azure/abort-controller': 2.1.2 '@azure/core-auth': 1.9.0 '@azure/core-client': 1.9.2 - '@azure/core-rest-pipeline': 1.18.2 + '@azure/core-rest-pipeline': 1.19.0 '@azure/core-tracing': 1.2.0 '@azure/core-util': 1.11.0 '@azure/logger': 1.1.4 - '@azure/msal-browser': 4.0.2 + '@azure/msal-browser': 4.2.1 '@azure/msal-node': 2.16.2 events: 3.3.0 jws: 4.0.0 @@ -1688,13 +1696,13 @@ snapshots: dependencies: tslib: 2.8.1 - '@azure/msal-browser@4.0.2': + '@azure/msal-browser@4.2.1': dependencies: - '@azure/msal-common': 15.0.2 + '@azure/msal-common': 15.1.1 '@azure/msal-common@14.16.0': {} - '@azure/msal-common@15.0.2': {} + '@azure/msal-common@15.1.1': {} '@azure/msal-node@2.16.2': dependencies: @@ -1702,6 +1710,8 @@ snapshots: jsonwebtoken: 9.0.2 uuid: 8.3.2 + '@badgateway/oauth2-client@2.4.2': {} + '@esbuild/android-arm64@0.18.20': optional: true @@ -1782,7 +1792,7 @@ snapshots: espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 @@ -1803,6 +1813,14 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@mermaidchart/sdk@0.2.0': + dependencies: + '@badgateway/oauth2-client': 2.4.2 + axios: 1.7.9 + uuid: 9.0.1 + transitivePeerDependencies: + - debug + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1813,12 +1831,12 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 + fastq: 1.19.0 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.74 + '@types/node': 18.19.75 '@types/json-schema@7.0.15': {} @@ -1826,7 +1844,7 @@ snapshots: '@types/mocha@10.0.10': {} - '@types/node@18.19.74': + '@types/node@18.19.75': dependencies: undici-types: 5.26.5 @@ -1834,7 +1852,7 @@ snapshots: '@types/uuid@9.0.8': {} - '@types/vscode@1.96.0': {} + '@types/vscode@1.97.0': {} '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)': dependencies: @@ -1848,7 +1866,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 - semver: 7.6.3 + semver: 7.7.1 tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 @@ -1893,7 +1911,7 @@ snapshots: debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 + semver: 7.7.1 tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 @@ -1910,7 +1928,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript @@ -1928,7 +1946,7 @@ snapshots: https-proxy-agent: 7.0.6 jszip: 3.10.1 ora: 7.0.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color @@ -1990,7 +2008,7 @@ snapshots: minimatch: 3.1.2 parse-semver: 1.1.1 read: 1.0.7 - semver: 7.6.3 + semver: 7.7.1 tmp: 0.2.3 typed-rest-client: 1.8.11 url-join: 4.0.1 @@ -2106,14 +2124,14 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - call-bind-apply-helpers@1.0.1: + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 call-bound@1.0.3: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.2.7 callsites@3.1.0: {} @@ -2278,7 +2296,7 @@ snapshots: dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 @@ -2439,7 +2457,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.18.0: + fastq@1.19.0: dependencies: reusify: 1.0.4 @@ -2492,7 +2510,7 @@ snapshots: get-intrinsic@1.2.7: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 @@ -2600,7 +2618,7 @@ snapshots: immediate@3.0.6: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 @@ -2674,7 +2692,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.3 + semver: 7.7.1 jszip@3.10.1: dependencies: @@ -2844,9 +2862,9 @@ snapshots: natural-compare@1.4.0: {} - node-abi@3.73.0: + node-abi@3.74.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 optional: true node-addon-api@4.3.0: @@ -2858,7 +2876,7 @@ snapshots: dependencies: boolbase: 1.0.0 - object-inspect@1.13.3: {} + object-inspect@1.13.4: {} once@1.4.0: dependencies: @@ -2946,7 +2964,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.73.0 + node-abi: 3.74.0 pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 @@ -3039,7 +3057,7 @@ snapshots: semver@5.7.2: {} - semver@7.6.3: {} + semver@7.7.1: {} serialize-javascript@6.0.2: dependencies: @@ -3056,27 +3074,27 @@ snapshots: side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map@1.0.1: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map: 1.0.1 side-channel@1.1.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 diff --git a/src/extension.ts b/src/extension.ts index c1c447a..bfc0aca 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,5 +1,5 @@ import * as vscode from "vscode"; -import { MermaidChartProvider, MCTreeItem, getAllTreeViewProjectsCache } from "./mermaidChartProvider"; +import { MermaidChartProvider, MCTreeItem, getAllTreeViewProjectsCache, getProjectIdForDocument } from "./mermaidChartProvider"; import { MermaidChartVSCode } from "./mermaidChartVSCode"; import { applyMermaidChartTokenHighlighting, @@ -195,7 +195,7 @@ context.subscriptions.push( ); context.subscriptions.push( - vscode.commands.registerCommand('mermaid.connectDiagram',async(uri:vscode.Uri, range:vscode.Range)=>{ + vscode.commands.registerCommand('mermaid.connectDiagram', async (uri: vscode.Uri, range: vscode.Range) => { const document = await vscode.workspace.openTextDocument(uri); const content = document.getText(); const fileExt = path.extname(document.fileName); @@ -207,31 +207,56 @@ context.subscriptions.push( projects.map((p) => ({ label: p.title, description: p.title, projectId: p.uuid })), { placeHolder: "Select a project to save the diagram" } ); - + if (!selectedProject || !selectedProject?.projectId) { - vscode.window.showInformationMessage("Operation cancelled."); - return; + vscode.window.showInformationMessage("Operation cancelled."); + return; } - const response = await mcAPI.createDocumentWithDiagram(diagramCode, selectedProject.projectId) + try { + const newDocument = await mcAPI.createDocument(selectedProject.projectId); + + if (!newDocument || !newDocument.documentID) { + vscode.window.showErrorMessage("Failed to create a new document."); + return; + } + + await mcAPI.setDocument({ + documentID: newDocument.documentID, + projectID: selectedProject.projectId, + code: diagramCode, + }); + + const processedCode = ensureConfigBlock(diagramCode, newDocument.documentID); + mermaidChartProvider.refresh(); + const editor = await createMermaidFile(context, processedCode, true); - const processedCode = ensureConfigBlock(diagramCode, response.documentID); - const editor= await await createMermaidFile(context, processedCode, true); - if(editor){ - syncAuxFile(editor.document.uri.toString(), uri,range); - } + if (editor) { + syncAuxFile(editor.document.uri.toString(), uri, range); + } + } catch (error) { + vscode.window.showErrorMessage(`Error creating or connecting document: ${error instanceof Error ? error.message : "Unknown error occurred."}`); + } }) -) - vscode.workspace.onWillSaveTextDocument(async (event) => { - if (event.document.languageId.startsWith("mermaid")) { - event.waitUntil(Promise.resolve([])); - const content = event.document.getText(); - const diagramId = extractIdFromCode(content); - if (diagramId) { - await mcAPI.saveDocumentCode(content, diagramId); +); +vscode.workspace.onWillSaveTextDocument(async (event) => { + if (event.document.languageId.startsWith("mermaid")) { + event.waitUntil(Promise.resolve([])); + const content = event.document.getText(); + const diagramId = extractIdFromCode(content); + if (diagramId) { + const projectId = getProjectIdForDocument(diagramId); + + if (projectId) { + await mcAPI.setDocument({ + documentID: diagramId, + projectID: projectId, + code: content, + }); } } - }); + } +}); context.subscriptions.push( vscode.commands.registerCommand('mermaidChart.syncDiagramWithMermaid', async () => { @@ -247,13 +272,29 @@ context.subscriptions.push( try { const diagramId = extractIdFromCode(content); if (TempFileCache.hasTempUri(context, document.uri.toString()) && diagramId) { - await mcAPI.saveDocumentCode(content, diagramId); + const projectId = getProjectIdForDocument(diagramId); + + if (projectId) { + await mcAPI.setDocument({ + documentID: diagramId, + projectID: projectId, + code: content, + }); + } vscode.window.showInformationMessage(`Diagram synced successfully with Mermaid chart. Diagram ID: ${diagramId}`); } else if (TempFileCache.hasTempUri(context, document.uri.toString())){ vscode.window.showInformationMessage('This is temporary buffer, this can not be saved locally'); } else if (!TempFileCache.hasTempUri(context, document.uri.toString()) && diagramId) { await vscode.commands.executeCommand('workbench.action.files.save'); - await mcAPI.saveDocumentCode(content, diagramId); + const projectId = getProjectIdForDocument(diagramId); + + if (projectId) { + await mcAPI.setDocument({ + documentID: diagramId, + projectID: projectId, + code: content, + }); + } vscode.window.showInformationMessage(`Diagram synced successfully with Mermaid chart. Diagram ID: ${diagramId}`); } else { await vscode.commands.executeCommand('workbench.action.files.save'); diff --git a/src/mermaidAPI.ts b/src/mermaidAPI.ts deleted file mode 100644 index b85fd81..0000000 --- a/src/mermaidAPI.ts +++ /dev/null @@ -1,317 +0,0 @@ -/* eslint-disable @typescript-eslint/naming-convention */ -import { v4 as uuid } from "uuid"; -import defaultAxios, { AxiosInstance } from "axios"; -import { createHash } from "crypto"; - -const defaultBaseURL = "https://www.mermaidchart.com"; // "http://127.0.0.1:5174" -const authorizationURLTimeout = 60_000; - -export interface InitParams { - clientID: string; - redirectURI?: string; - baseURL?: string; -} - -export interface OAuthAuthorizationParams { - response_type: "code"; - client_id: string; - redirect_uri: string; - code_challenge_method: "S256"; - code_challenge: string; - state: string; - scope: string; -} - -interface AuthState { - codeVerifier: string; -} - -export interface MCUser { - fullName: string; - emailAddress: string; -} - -export interface MCProject { - id: string; - title: string; -} - -export interface MCDocument { - documentID: string; - projectID: string; - code: string; - major: string; - minor: string; - title: string; -} - -export interface AuthorizationData { - url: string; - state: string; - scope: string; -} -export class MermaidChart { - private clientID: string; - private baseURL!: string; - private axios!: AxiosInstance; - private pendingStates: Record = {}; - private redirectURI?: string; - private accessToken?: string; - - constructor({ clientID, baseURL, redirectURI }: InitParams) { - this.clientID = clientID; - this.setBaseURL(baseURL || defaultBaseURL); - if (redirectURI) { - this.setRedirectURI(redirectURI); - } - } - - public setRedirectURI(redirectURI: string) { - this.redirectURI = redirectURI; - } - - public setBaseURL(baseURL: string = defaultBaseURL) { - if (this.baseURL && this.baseURL === baseURL) { - return; - } - this.baseURL = baseURL; - this.accessToken = undefined; - this.axios = defaultAxios.create({ - baseURL: this.baseURL, - }); - - this.axios.interceptors.response.use((res) => { - // Reset token if a 401 is thrown - if (res.status === 401) { - this.resetAccessToken(); - } - return res; - }); - } - - public async getAuthorizationData({ - state, - scope, - }: { - state?: string; - scope?: string; - } = {}): Promise { - if (!this.redirectURI) { - throw new Error("redirectURI is not set"); - } - - const stateID = state ?? uuid(); - - this.pendingStates[stateID] = { - codeVerifier: uuid(), - }; - - const params: OAuthAuthorizationParams = { - client_id: this.clientID, - redirect_uri: this.redirectURI, - response_type: "code", - code_challenge_method: "S256", - code_challenge: getEncodedSHA256Hash( - this.pendingStates[stateID].codeVerifier - ), - state: stateID, - scope: scope ?? "email", - }; - - // Deletes the state after 60 seconds - setTimeout(() => { - delete this.pendingStates[stateID]; - }, authorizationURLTimeout); - - const url = `${this.baseURL}${this.URLS.oauth.authorize(params)}`; - return { - url, - state: stateID, - scope: params.scope, - }; - } - - public async handleAuthorizationResponse(query: URLSearchParams) { - const authorizationToken = query.get("code"); - const state = query.get("state"); - - if (!authorizationToken) { - throw new RequiredParameterMissingError("token"); - } - if (!state) { - throw new RequiredParameterMissingError("state"); - } - - const pendingState = this.pendingStates[state]; - // Check if it is a valid auth request started by the extension - if (!pendingState) { - throw new OAuthError("invalid_state"); - } - - const tokenResponse = await defaultAxios.post( - this.baseURL + this.URLS.oauth.token, - { - client_id: this.clientID, - redirect_uri: this.redirectURI, - code_verifier: pendingState.codeVerifier, - code: authorizationToken, - } - ); - - if (tokenResponse.status !== 200) { - throw new OAuthError("invalid_token"); - } - - const accessToken = tokenResponse.data.access_token; - await this.setAccessToken(accessToken); - } - - /** - * This method is used after authentication to save the access token. - * It should be called by the plugins if any update to access token is made outside this lib. - * @param accessToken access token to use for requests - */ - public async setAccessToken(accessToken: string): Promise { - this.axios.defaults.headers.common[ - "Authorization" - ] = `Bearer ${accessToken}`; - // This is to verify that the token is valid - await this.getUser(); - this.accessToken = accessToken; - } - - public async resetAccessToken(): Promise { - this.accessToken = undefined; - this.axios.defaults.headers.common["Authorization"] = `Bearer none`; - } - - /** - * This function will be called before every request to get the access token to use for the request. - * It should be overridden by the plugins to return the access token. - * @returns the access token to use for requests - */ - public async getAccessToken(): Promise { - if (!this.accessToken) { - throw new Error("No access token set. Please authenticate first."); - } - return this.accessToken; - } - - public async getUser(): Promise { - const user = await this.axios.get(this.URLS.rest.users.self); - return user.data; - } - - public async getProjects(): Promise { - const projects = await this.axios.get( - this.URLS.rest.projects.list - ); - return projects.data; - } - - public async getDocuments(projectID: string): Promise { - const projects = await this.axios.get( - this.URLS.rest.projects.get(projectID).documents - ); - return projects.data; - } - - public async getEditURL(document: Pick) { - const url = `${this.baseURL}${this.URLS.diagram(document).edit}`; - return url; - } - - public async getRawDocument( - document: Pick, - theme: "light" | "dark" - ) { - const raw = await this.axios.get( - this.URLS.raw(document, theme).svg - ); - return raw.data; - } - - public async saveDocumentCode(code: string, documentID: string): Promise { - const response = await this.axios.patch(this.URLS.rest.documents.patch(documentID), { - code: code, - }); - return response.data; - } - public async createDocumentWithDiagram(code: string, projectID: string): Promise { - const response = await this.axios.post(this.URLS.rest.projects.get(projectID).documents, { - code : code - }); - return response.data; -} - - private URLS = { - oauth: { - authorize: (params: OAuthAuthorizationParams) => - `/oauth/authorize?${new URLSearchParams( - Object.entries(params) - ).toString()}`, - token: `/oauth/token`, - }, - rest: { - users: { - self: `/rest-api/users/me`, - }, - documents: { - get: (documentID: string) => { - return `/rest-api/documents/${documentID}`; - }, - patch: (documentID : string) => { - return `/rest-api/documents/${documentID}`; - } - }, - projects: { - list: `/rest-api/projects`, - get: (projectID: string) => { - return { - documents: `/rest-api/projects/${projectID}/documents`, - }; - }, - }, - }, - raw: ( - document: Pick, - theme: "light" | "dark" - ) => { - const base = `/raw/${document.documentID}?version=v${document.major}.${document.minor}&theme=${theme}&format=`; - return { - html: base + "html", - svg: base + "svg", - png: base + "png", - }; - }, - diagram: (d: Pick) => { - // const base = `/app/projects/${d.projectID}/diagrams/${d.documentID}/version/v${d.major}.${d.minor}`; - return { - // self: base, - edit: `/app/diagrams/${d.documentID}`, - // view: base + "/view", - } as const; - }, - } as const; -} - -export class RequiredParameterMissingError extends Error { - constructor(parameterName: string) { - super(`Required parameter ${parameterName} is missing`); - } -} -export class OAuthError extends Error { - constructor(message: string) { - super(message); - } -} - -export const getEncodedSHA256Hash = (str: string) => { - const hash = createHash("sha256").update(str).digest(); - - return Buffer.from(hash) - .toString("base64") - .replace(/\+/g, "-") - .replace(/\//g, "_") - .replace(/=+$/, ""); -}; diff --git a/src/mermaidChartAuthenticationProvider.ts b/src/mermaidChartAuthenticationProvider.ts index 6f25134..f93d1b8 100644 --- a/src/mermaidChartAuthenticationProvider.ts +++ b/src/mermaidChartAuthenticationProvider.ts @@ -182,15 +182,14 @@ export class MermaidChartAuthenticationProvider const uri = Uri.parse(authData.url); await env.openExternal(uri); - let codeExchangePromise = this._codeExchangePromises.get( - authData.scope - ); + const scope = authData.scope.join(" "); + let codeExchangePromise = this._codeExchangePromises.get(scope); if (!codeExchangePromise) { codeExchangePromise = promiseFromEvent( this._uriHandler.event, this.handleUri(scopes) ); - this._codeExchangePromises.set(authData.scope, codeExchangePromise); + this._codeExchangePromises.set(scope, codeExchangePromise); } try { @@ -208,7 +207,7 @@ export class MermaidChartAuthenticationProvider ]); } finally { codeExchangePromise?.cancel.fire(); - this._codeExchangePromises.delete(authData.scope); + this._codeExchangePromises.delete(scope); } } ); @@ -223,9 +222,7 @@ export class MermaidChartAuthenticationProvider scopes: readonly string[] ) => PromiseAdapter = (scopes) => async (uri, resolve, reject) => { - await this.mcAPI.handleAuthorizationResponse( - new URLSearchParams(uri.query) - ); + await this.mcAPI.handleAuthorizationResponse(`?${uri.query}`); resolve("done"); }; diff --git a/src/mermaidChartProvider.ts b/src/mermaidChartProvider.ts index e3d7917..1bcd49f 100644 --- a/src/mermaidChartProvider.ts +++ b/src/mermaidChartProvider.ts @@ -14,6 +14,13 @@ export function setAllTreeViewProjectsCache(projects: Project[]): void { export function getAllTreeViewProjectsCache(): Project[] { return allTreeViewProjectsCache; } +export function getProjectIdForDocument(diagramId: string): string { + return ( + allTreeViewProjectsCache.find((project) => + project?.children?.some((child) => child.uuid === diagramId) + )?.uuid || "" + ); +} export class MCTreeItem extends vscode.TreeItem { uuid: string; @@ -196,7 +203,7 @@ export class MermaidChartProvider document.documentID, new vscode.Range(0, 0, 0, 1), document.title, - document.code, + document.code || "", vscode.TreeItemCollapsibleState.None ); projectDocuments.push(treeViewDocument); diff --git a/src/mermaidChartVSCode.ts b/src/mermaidChartVSCode.ts index 92d21e6..dc48d85 100644 --- a/src/mermaidChartVSCode.ts +++ b/src/mermaidChartVSCode.ts @@ -1,5 +1,5 @@ import * as vscode from "vscode"; -import { MermaidChart } from "./mermaidAPI"; +import { MermaidChart } from "@mermaidchart/sdk"; import { MermaidChartAuthenticationProvider } from "./mermaidChartAuthenticationProvider"; export class MermaidChartVSCode extends MermaidChart { diff --git a/src/util.ts b/src/util.ts index 17acdb4..d314dd4 100644 --- a/src/util.ts +++ b/src/util.ts @@ -208,8 +208,8 @@ export async function viewMermaidChart( const svgContent = await mcAPI.getRawDocument( { documentID: uuid, - major: "0", - minor: "1", + major: 0, + minor: 1, }, themeParameter ); @@ -233,17 +233,23 @@ export async function editMermaidChart( uuid: string, provider: MermaidChartProvider ) { - // const project = provider.getProjectOfDocument(uuid); - // const projectUuid = project?.uuid; - // if (!projectUuid) { - // vscode.window.showErrorMessage( - // "Diagram not found in project. Diagram might have moved to a different project." - // ); - // return; - // } + // Retrieve the document details to get the required fields + const document = await mcAPI.getDocument({ documentID: uuid }); + + if (!document || !document.projectID) { + vscode.window.showErrorMessage( + "Document details not found. Unable to edit the chart." + ); + return; + } + const editUrl = await mcAPI.getEditURL({ - documentID: uuid, + documentID: document.documentID, + major: document.major, + minor: document.minor, + projectID: document.projectID, }); + vscode.env.openExternal(vscode.Uri.parse(editUrl)); } diff --git a/webview/pnpm-lock.yaml b/webview/pnpm-lock.yaml index 9cf93d2..a72f59e 100644 --- a/webview/pnpm-lock.yaml +++ b/webview/pnpm-lock.yaml @@ -38,16 +38,16 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.19.3)(vite@6.0.11) + version: 5.0.3(svelte@5.20.0)(vite@6.1.0) '@types/vscode-webview': specifier: ^1.57.5 version: 1.57.5 svelte: specifier: ^5.17.3 - version: 5.19.3 + version: 5.20.0 vite: specifier: ^6.0.7 - version: 6.0.11 + version: 6.1.0 packages: @@ -55,11 +55,11 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/install-pkg@0.4.1': - resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + '@antfu/install-pkg@1.0.0': + resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} - '@antfu/utils@0.7.10': - resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + '@antfu/utils@8.1.0': + resolution: {integrity: sha512-XPR7Jfwp0FFl/dFYPX8ZjpmU4/1mIXTjnZ1ba48BLMyKOV62/tiRjdsFcPs2hsYcSud4tzk7w3a3LjX8Fu3huA==} '@braintree/sanitize-url@7.1.1': resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} @@ -239,8 +239,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.2.1': - resolution: {integrity: sha512-0/7J7hk4PqXmxo5PDBDxmnecw5PxklZJfNjIVG9FM0mEfVrvfudS22rYWsqVk6gR3UJ/mSYS90X4R3znXnqfNA==} + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} @@ -283,98 +283,98 @@ packages: '@panzoom/panzoom@4.6.0': resolution: {integrity: sha512-3KxkY1lNKFn98fW5ZFR6vV0YzsXj3I4EQDyFWSXME6/cic86eSS7VjuqIjrA3PEpySo0r5fFtlX8eYCt4JPUFQ==} - '@rollup/rollup-android-arm-eabi@4.32.0': - resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==} + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.32.0': - resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==} + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.32.0': - resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==} + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.32.0': - resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==} + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.32.0': - resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==} + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.32.0': - resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==} + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': - resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==} + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.32.0': - resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==} + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.32.0': - resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==} + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.32.0': - resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==} + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': - resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==} + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': - resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.32.0': - resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==} + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.32.0': - resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==} + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.32.0': - resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==} + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.32.0': - resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==} + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.32.0': - resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==} + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.32.0': - resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==} + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.32.0': - resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==} + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} cpu: [x64] os: [win32] @@ -448,8 +448,8 @@ packages: '@types/d3-interpolate@3.0.4': resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - '@types/d3-path@3.1.0': - resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} '@types/d3-polygon@3.0.2': resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} @@ -463,8 +463,8 @@ packages: '@types/d3-scale-chromatic@3.1.0': resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} - '@types/d3-scale@4.0.8': - resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} '@types/d3-selection@3.0.11': resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} @@ -770,8 +770,8 @@ packages: resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} engines: {node: '>=0.3.1'} - dompurify@3.2.3: - resolution: {integrity: sha512-U1U5Hzc2MO0oW3DF+G9qYN0aT7atAou4AgI0XjWz061nyBPbdxkfdhfy5uMgGn6+oLFCfn44ZGbdDqCzVmlOWA==} + dompurify@3.2.4: + resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} @@ -794,8 +794,8 @@ packages: esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - esrap@1.4.3: - resolution: {integrity: sha512-Xddc1RsoFJ4z9nR7W7BFaEPIp4UXoeQ0+077UdWLxbafMQFyU79sQJMk7kxNgRwQ9/aVgaKacCHC2pUACGwmYw==} + esrap@1.4.4: + resolution: {integrity: sha512-tDN6xP/r/b3WmdpWm7LybrD252hY52IokcycPnO+WHfhFF0+n5AWtcLLK7VNV6m0uYgVRhGVs8OkZwRyfC7HzQ==} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -813,8 +813,8 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - globals@15.14.0: - resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} growl@1.10.5: @@ -893,8 +893,8 @@ packages: layout-base@2.0.1: resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} - local-pkg@0.5.1: - resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + local-pkg@1.0.0: + resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==} engines: {node: '>=14'} locate-character@3.0.0: @@ -947,8 +947,8 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - package-manager-detector@0.2.8: - resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} path-data-parser@0.1.0: resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} @@ -957,8 +957,8 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - pathe@2.0.2: - resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -972,15 +972,15 @@ packages: points-on-path@0.2.1: resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup@4.32.0: - resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==} + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1008,15 +1008,15 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - stylis@4.3.5: - resolution: {integrity: sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==} + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} supports-color@5.4.0: resolution: {integrity: sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==} engines: {node: '>=4'} - svelte@5.19.3: - resolution: {integrity: sha512-rb/bkYG9jq67OCWikMvaPnfOobyGn0JizVDwHpdeBtLiNXPMcoA9GTFC3BhptP7xGNquUU8J5GiS7PlGlfDAFA==} + svelte@5.20.0: + resolution: {integrity: sha512-04HJfFLaTwTyEKdPm3vYGdaD/8ZAHcd9SEBufq0FZNIrdzJWdM1usVdm4KIlzzDfM5+aMzio6BBhpXPoPGuMjg==} engines: {node: '>=18'} tinyexec@0.3.2: @@ -1033,8 +1033,8 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - vite@6.0.11: - resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} + vite@6.1.0: + resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -1125,12 +1125,12 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/install-pkg@0.4.1': + '@antfu/install-pkg@1.0.0': dependencies: - package-manager-detector: 0.2.8 + package-manager-detector: 0.2.9 tinyexec: 0.3.2 - '@antfu/utils@0.7.10': {} + '@antfu/utils@8.1.0': {} '@braintree/sanitize-url@7.1.1': {} @@ -1234,15 +1234,15 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@2.2.1': + '@iconify/utils@2.3.0': dependencies: - '@antfu/install-pkg': 0.4.1 - '@antfu/utils': 0.7.10 + '@antfu/install-pkg': 1.0.0 + '@antfu/utils': 8.1.0 '@iconify/types': 2.0.0 debug: 4.4.0 - globals: 15.14.0 + globals: 15.15.0 kolorist: 1.8.0 - local-pkg: 0.5.1 + local-pkg: 1.0.0 mlly: 1.7.4 transitivePeerDependencies: - supports-color @@ -1285,7 +1285,7 @@ snapshots: '@mermaid-chart/mermaid@11.4.1-b.2': dependencies: '@braintree/sanitize-url': 7.1.1 - '@iconify/utils': 2.2.1 + '@iconify/utils': 2.3.0 '@mermaid-js/parser': 0.3.1-rc.1 '@types/d3': 7.4.3 cytoscape: 3.31.0 @@ -1295,13 +1295,13 @@ snapshots: d3-sankey: 0.12.3 dagre-d3-es: 7.0.11 dayjs: 1.11.13 - dompurify: 3.2.3 + dompurify: 3.2.4 katex: 0.16.21 khroma: 2.1.0 lodash-es: 4.17.21 marked: 13.0.3 roughjs: 4.6.6 - stylis: 4.3.5 + stylis: 4.3.6 ts-dedent: 2.2.0 uuid: 9.0.1 transitivePeerDependencies: @@ -1313,82 +1313,82 @@ snapshots: '@panzoom/panzoom@4.6.0': {} - '@rollup/rollup-android-arm-eabi@4.32.0': + '@rollup/rollup-android-arm-eabi@4.34.6': optional: true - '@rollup/rollup-android-arm64@4.32.0': + '@rollup/rollup-android-arm64@4.34.6': optional: true - '@rollup/rollup-darwin-arm64@4.32.0': + '@rollup/rollup-darwin-arm64@4.34.6': optional: true - '@rollup/rollup-darwin-x64@4.32.0': + '@rollup/rollup-darwin-x64@4.34.6': optional: true - '@rollup/rollup-freebsd-arm64@4.32.0': + '@rollup/rollup-freebsd-arm64@4.34.6': optional: true - '@rollup/rollup-freebsd-x64@4.32.0': + '@rollup/rollup-freebsd-x64@4.34.6': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.32.0': + '@rollup/rollup-linux-arm-musleabihf@4.34.6': optional: true - '@rollup/rollup-linux-arm64-gnu@4.32.0': + '@rollup/rollup-linux-arm64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-arm64-musl@4.32.0': + '@rollup/rollup-linux-arm64-musl@4.34.6': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.32.0': + '@rollup/rollup-linux-riscv64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-s390x-gnu@4.32.0': + '@rollup/rollup-linux-s390x-gnu@4.34.6': optional: true - '@rollup/rollup-linux-x64-gnu@4.32.0': + '@rollup/rollup-linux-x64-gnu@4.34.6': optional: true - '@rollup/rollup-linux-x64-musl@4.32.0': + '@rollup/rollup-linux-x64-musl@4.34.6': optional: true - '@rollup/rollup-win32-arm64-msvc@4.32.0': + '@rollup/rollup-win32-arm64-msvc@4.34.6': optional: true - '@rollup/rollup-win32-ia32-msvc@4.32.0': + '@rollup/rollup-win32-ia32-msvc@4.34.6': optional: true - '@rollup/rollup-win32-x64-msvc@4.32.0': + '@rollup/rollup-win32-x64-msvc@4.34.6': optional: true - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.3)(vite@6.0.11))(svelte@5.19.3)(vite@6.0.11)': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.20.0)(vite@6.1.0))(svelte@5.20.0)(vite@6.1.0)': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.3)(vite@6.0.11) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.20.0)(vite@6.1.0) debug: 4.4.0 - svelte: 5.19.3 - vite: 6.0.11 + svelte: 5.20.0 + vite: 6.1.0 transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.3)(vite@6.0.11)': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.20.0)(vite@6.1.0)': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.3)(vite@6.0.11))(svelte@5.19.3)(vite@6.0.11) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.20.0)(vite@6.1.0))(svelte@5.20.0)(vite@6.1.0) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.19.3 - vite: 6.0.11 - vitefu: 1.0.5(vite@6.0.11) + svelte: 5.20.0 + vite: 6.1.0 + vitefu: 1.0.5(vite@6.1.0) transitivePeerDependencies: - supports-color @@ -1443,7 +1443,7 @@ snapshots: dependencies: '@types/d3-color': 3.1.3 - '@types/d3-path@3.1.0': {} + '@types/d3-path@3.1.1': {} '@types/d3-polygon@3.0.2': {} @@ -1453,7 +1453,7 @@ snapshots: '@types/d3-scale-chromatic@3.1.0': {} - '@types/d3-scale@4.0.8': + '@types/d3-scale@4.0.9': dependencies: '@types/d3-time': 3.0.4 @@ -1461,7 +1461,7 @@ snapshots: '@types/d3-shape@3.1.7': dependencies: - '@types/d3-path': 3.1.0 + '@types/d3-path': 3.1.1 '@types/d3-time-format@4.0.3': {} @@ -1497,11 +1497,11 @@ snapshots: '@types/d3-geo': 3.1.0 '@types/d3-hierarchy': 3.1.7 '@types/d3-interpolate': 3.0.4 - '@types/d3-path': 3.1.0 + '@types/d3-path': 3.1.1 '@types/d3-polygon': 3.0.2 '@types/d3-quadtree': 3.0.6 '@types/d3-random': 3.0.3 - '@types/d3-scale': 4.0.8 + '@types/d3-scale': 4.0.9 '@types/d3-scale-chromatic': 3.1.0 '@types/d3-selection': 3.0.11 '@types/d3-shape': 3.1.7 @@ -1793,7 +1793,7 @@ snapshots: diff@3.5.0: {} - dompurify@3.2.3: + dompurify@3.2.4: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -1837,7 +1837,7 @@ snapshots: esm-env@1.2.2: {} - esrap@1.4.3: + esrap@1.4.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -1864,7 +1864,7 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - globals@15.14.0: {} + globals@15.15.0: {} growl@1.10.5: {} @@ -1944,7 +1944,7 @@ snapshots: layout-base@2.0.1: {} - local-pkg@0.5.1: + local-pkg@1.0.0: dependencies: mlly: 1.7.4 pkg-types: 1.3.1 @@ -1976,7 +1976,7 @@ snapshots: mlly@1.7.4: dependencies: acorn: 8.14.0 - pathe: 2.0.2 + pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.5.4 @@ -2004,13 +2004,13 @@ snapshots: dependencies: wrappy: 1.0.2 - package-manager-detector@0.2.8: {} + package-manager-detector@0.2.9: {} path-data-parser@0.1.0: {} path-is-absolute@1.0.1: {} - pathe@2.0.2: {} + pathe@2.0.3: {} picocolors@1.1.1: {} @@ -2018,7 +2018,7 @@ snapshots: dependencies: confbox: 0.1.8 mlly: 1.7.4 - pathe: 2.0.2 + pathe: 2.0.3 points-on-curve@0.2.0: {} @@ -2027,7 +2027,7 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - postcss@8.5.1: + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -2035,29 +2035,29 @@ snapshots: robust-predicates@3.0.2: {} - rollup@4.32.0: + rollup@4.34.6: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.32.0 - '@rollup/rollup-android-arm64': 4.32.0 - '@rollup/rollup-darwin-arm64': 4.32.0 - '@rollup/rollup-darwin-x64': 4.32.0 - '@rollup/rollup-freebsd-arm64': 4.32.0 - '@rollup/rollup-freebsd-x64': 4.32.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.32.0 - '@rollup/rollup-linux-arm-musleabihf': 4.32.0 - '@rollup/rollup-linux-arm64-gnu': 4.32.0 - '@rollup/rollup-linux-arm64-musl': 4.32.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.32.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0 - '@rollup/rollup-linux-riscv64-gnu': 4.32.0 - '@rollup/rollup-linux-s390x-gnu': 4.32.0 - '@rollup/rollup-linux-x64-gnu': 4.32.0 - '@rollup/rollup-linux-x64-musl': 4.32.0 - '@rollup/rollup-win32-arm64-msvc': 4.32.0 - '@rollup/rollup-win32-ia32-msvc': 4.32.0 - '@rollup/rollup-win32-x64-msvc': 4.32.0 + '@rollup/rollup-android-arm-eabi': 4.34.6 + '@rollup/rollup-android-arm64': 4.34.6 + '@rollup/rollup-darwin-arm64': 4.34.6 + '@rollup/rollup-darwin-x64': 4.34.6 + '@rollup/rollup-freebsd-arm64': 4.34.6 + '@rollup/rollup-freebsd-x64': 4.34.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 + '@rollup/rollup-linux-arm-musleabihf': 4.34.6 + '@rollup/rollup-linux-arm64-gnu': 4.34.6 + '@rollup/rollup-linux-arm64-musl': 4.34.6 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 + '@rollup/rollup-linux-riscv64-gnu': 4.34.6 + '@rollup/rollup-linux-s390x-gnu': 4.34.6 + '@rollup/rollup-linux-x64-gnu': 4.34.6 + '@rollup/rollup-linux-x64-musl': 4.34.6 + '@rollup/rollup-win32-arm64-msvc': 4.34.6 + '@rollup/rollup-win32-ia32-msvc': 4.34.6 + '@rollup/rollup-win32-x64-msvc': 4.34.6 fsevents: 2.3.3 roughjs@4.6.6: @@ -2082,13 +2082,13 @@ snapshots: source-map@0.6.1: {} - stylis@4.3.5: {} + stylis@4.3.6: {} supports-color@5.4.0: dependencies: has-flag: 3.0.0 - svelte@5.19.3: + svelte@5.20.0: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -2099,7 +2099,7 @@ snapshots: axobject-query: 4.1.0 clsx: 2.1.1 esm-env: 1.2.2 - esrap: 1.4.3 + esrap: 1.4.4 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.17 @@ -2113,17 +2113,17 @@ snapshots: uuid@9.0.1: {} - vite@6.0.11: + vite@6.1.0: dependencies: esbuild: 0.24.2 - postcss: 8.5.1 - rollup: 4.32.0 + postcss: 8.5.2 + rollup: 4.34.6 optionalDependencies: fsevents: 2.3.3 - vitefu@1.0.5(vite@6.0.11): + vitefu@1.0.5(vite@6.1.0): optionalDependencies: - vite: 6.0.11 + vite: 6.1.0 vscode-jsonrpc@8.2.0: {}