Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
feat(markdown): mermaid diagram support
Delioos committed 13 days ago
commit faadd2906bda9fd0e93b73ce23dce3094e6df31c
parent c39af0a8e232b80eecc57a129c4245cb1048c740
5 files changed +1315 -105
modified package-lock.json
@@ -29,6 +29,7 @@
        "marked-katex-extension": "^5.1.8",
        "marked-linkify-it": "^3.1.15",
        "md5": "^2.3.0",
+
        "mermaid": "^11.14.0",
        "svelte": "^5.55.4",
        "twemoji": "^14.0.2",
        "zod": "^4.3.6"
@@ -69,6 +70,62 @@
        "node": ">=24"
      }
    },
+
    "node_modules/@antfu/install-pkg": {
+
      "version": "1.1.0",
+
      "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz",
+
      "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "package-manager-detector": "^1.3.0",
+
        "tinyexec": "^1.0.1"
+
      },
+
      "funding": {
+
        "url": "https://github.com/sponsors/antfu"
+
      }
+
    },
+
    "node_modules/@braintree/sanitize-url": {
+
      "version": "7.1.2",
+
      "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz",
+
      "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@chevrotain/cst-dts-gen": {
+
      "version": "12.0.0",
+
      "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-12.0.0.tgz",
+
      "integrity": "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==",
+
      "license": "Apache-2.0",
+
      "dependencies": {
+
        "@chevrotain/gast": "12.0.0",
+
        "@chevrotain/types": "12.0.0"
+
      }
+
    },
+
    "node_modules/@chevrotain/gast": {
+
      "version": "12.0.0",
+
      "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-12.0.0.tgz",
+
      "integrity": "sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==",
+
      "license": "Apache-2.0",
+
      "dependencies": {
+
        "@chevrotain/types": "12.0.0"
+
      }
+
    },
+
    "node_modules/@chevrotain/regexp-to-ast": {
+
      "version": "12.0.0",
+
      "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-12.0.0.tgz",
+
      "integrity": "sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==",
+
      "license": "Apache-2.0"
+
    },
+
    "node_modules/@chevrotain/types": {
+
      "version": "12.0.0",
+
      "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-12.0.0.tgz",
+
      "integrity": "sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==",
+
      "license": "Apache-2.0"
+
    },
+
    "node_modules/@chevrotain/utils": {
+
      "version": "12.0.0",
+
      "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-12.0.0.tgz",
+
      "integrity": "sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==",
+
      "license": "Apache-2.0"
+
    },
    "node_modules/@emnapi/core": {
      "version": "1.9.2",
      "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz",
@@ -351,6 +408,23 @@
        "url": "https://github.com/sponsors/nzakas"
      }
    },
+
    "node_modules/@iconify/types": {
+
      "version": "2.0.0",
+
      "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+
      "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@iconify/utils": {
+
      "version": "3.1.2",
+
      "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.2.tgz",
+
      "integrity": "sha512-jVf75icVVgSVGf9+QWBeCHdFL35yZ06HMHl9sCa059pITTP781lOacvRazfwAmXDKiBiUdQQMWVnuiw/RaQNhQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@antfu/install-pkg": "^1.1.0",
+
        "@iconify/types": "^2.0.0",
+
        "import-meta-resolve": "^4.2.0"
+
      }
+
    },
    "node_modules/@jridgewell/gen-mapping": {
      "version": "0.3.13",
      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
@@ -396,6 +470,15 @@
        "@jridgewell/sourcemap-codec": "^1.4.14"
      }
    },
+
    "node_modules/@mermaid-js/parser": {
+
      "version": "1.1.0",
+
      "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.0.tgz",
+
      "integrity": "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "langium": "^4.0.0"
+
      }
+
    },
    "node_modules/@napi-rs/wasm-runtime": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
@@ -823,6 +906,259 @@
        "assertion-error": "^2.0.1"
      }
    },
+
    "node_modules/@types/d3": {
+
      "version": "7.4.3",
+
      "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
+
      "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-array": "*",
+
        "@types/d3-axis": "*",
+
        "@types/d3-brush": "*",
+
        "@types/d3-chord": "*",
+
        "@types/d3-color": "*",
+
        "@types/d3-contour": "*",
+
        "@types/d3-delaunay": "*",
+
        "@types/d3-dispatch": "*",
+
        "@types/d3-drag": "*",
+
        "@types/d3-dsv": "*",
+
        "@types/d3-ease": "*",
+
        "@types/d3-fetch": "*",
+
        "@types/d3-force": "*",
+
        "@types/d3-format": "*",
+
        "@types/d3-geo": "*",
+
        "@types/d3-hierarchy": "*",
+
        "@types/d3-interpolate": "*",
+
        "@types/d3-path": "*",
+
        "@types/d3-polygon": "*",
+
        "@types/d3-quadtree": "*",
+
        "@types/d3-random": "*",
+
        "@types/d3-scale": "*",
+
        "@types/d3-scale-chromatic": "*",
+
        "@types/d3-selection": "*",
+
        "@types/d3-shape": "*",
+
        "@types/d3-time": "*",
+
        "@types/d3-time-format": "*",
+
        "@types/d3-timer": "*",
+
        "@types/d3-transition": "*",
+
        "@types/d3-zoom": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-array": {
+
      "version": "3.2.2",
+
      "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+
      "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-axis": {
+
      "version": "3.0.6",
+
      "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
+
      "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-selection": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-brush": {
+
      "version": "3.0.6",
+
      "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
+
      "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-selection": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-chord": {
+
      "version": "3.0.6",
+
      "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
+
      "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-color": {
+
      "version": "3.1.3",
+
      "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+
      "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-contour": {
+
      "version": "3.0.6",
+
      "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
+
      "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-array": "*",
+
        "@types/geojson": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-delaunay": {
+
      "version": "6.0.4",
+
      "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+
      "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-dispatch": {
+
      "version": "3.0.7",
+
      "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz",
+
      "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-drag": {
+
      "version": "3.0.7",
+
      "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
+
      "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-selection": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-dsv": {
+
      "version": "3.0.7",
+
      "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
+
      "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-ease": {
+
      "version": "3.0.2",
+
      "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+
      "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-fetch": {
+
      "version": "3.0.7",
+
      "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
+
      "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-dsv": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-force": {
+
      "version": "3.0.10",
+
      "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
+
      "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-format": {
+
      "version": "3.0.4",
+
      "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
+
      "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-geo": {
+
      "version": "3.1.0",
+
      "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
+
      "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/geojson": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-hierarchy": {
+
      "version": "3.1.7",
+
      "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
+
      "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-interpolate": {
+
      "version": "3.0.4",
+
      "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+
      "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-color": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-path": {
+
      "version": "3.1.1",
+
      "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+
      "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-polygon": {
+
      "version": "3.0.2",
+
      "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
+
      "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-quadtree": {
+
      "version": "3.0.6",
+
      "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
+
      "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-random": {
+
      "version": "3.0.3",
+
      "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz",
+
      "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-scale": {
+
      "version": "4.0.9",
+
      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+
      "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-time": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-scale-chromatic": {
+
      "version": "3.1.0",
+
      "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+
      "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-selection": {
+
      "version": "3.0.11",
+
      "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz",
+
      "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-shape": {
+
      "version": "3.1.8",
+
      "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
+
      "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-path": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-time": {
+
      "version": "3.0.4",
+
      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+
      "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-time-format": {
+
      "version": "4.0.3",
+
      "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
+
      "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-timer": {
+
      "version": "3.0.2",
+
      "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+
      "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+
      "license": "MIT"
+
    },
+
    "node_modules/@types/d3-transition": {
+
      "version": "3.0.9",
+
      "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz",
+
      "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-selection": "*"
+
      }
+
    },
+
    "node_modules/@types/d3-zoom": {
+
      "version": "3.0.8",
+
      "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
+
      "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@types/d3-interpolate": "*",
+
        "@types/d3-selection": "*"
+
      }
+
    },
    "node_modules/@types/deep-eql": {
      "version": "4.0.2",
      "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
@@ -843,6 +1179,12 @@
      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
      "license": "MIT"
    },
+
    "node_modules/@types/geojson": {
+
      "version": "7946.0.16",
+
      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+
      "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+
      "license": "MIT"
+
    },
    "node_modules/@types/hast": {
      "version": "3.0.4",
      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
@@ -1180,6 +1522,16 @@
      "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
      "license": "ISC"
    },
+
    "node_modules/@upsetjs/venn.js": {
+
      "version": "2.0.0",
+
      "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz",
+
      "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==",
+
      "license": "MIT",
+
      "optionalDependencies": {
+
        "d3-selection": "^3.0.0",
+
        "d3-transition": "^3.0.1"
+
      }
+
    },
    "node_modules/@vitest/expect": {
      "version": "4.1.5",
      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz",
@@ -1555,146 +1907,696 @@
        "url": "https://github.com/sponsors/wooorm"
      }
    },
-
    "node_modules/character-entities-legacy": {
-
      "version": "3.0.0",
-
      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
-
      "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
-
      "license": "MIT",
-
      "funding": {
-
        "type": "github",
-
        "url": "https://github.com/sponsors/wooorm"
+
    "node_modules/character-entities-legacy": {
+
      "version": "3.0.0",
+
      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+
      "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+
      "license": "MIT",
+
      "funding": {
+
        "type": "github",
+
        "url": "https://github.com/sponsors/wooorm"
+
      }
+
    },
+
    "node_modules/charenc": {
+
      "version": "0.0.2",
+
      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+
      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+
      "license": "BSD-3-Clause",
+
      "engines": {
+
        "node": "*"
+
      }
+
    },
+
    "node_modules/chevrotain": {
+
      "version": "12.0.0",
+
      "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-12.0.0.tgz",
+
      "integrity": "sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==",
+
      "license": "Apache-2.0",
+
      "dependencies": {
+
        "@chevrotain/cst-dts-gen": "12.0.0",
+
        "@chevrotain/gast": "12.0.0",
+
        "@chevrotain/regexp-to-ast": "12.0.0",
+
        "@chevrotain/types": "12.0.0",
+
        "@chevrotain/utils": "12.0.0"
+
      },
+
      "engines": {
+
        "node": ">=22.0.0"
+
      }
+
    },
+
    "node_modules/chevrotain-allstar": {
+
      "version": "0.4.3",
+
      "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.4.3.tgz",
+
      "integrity": "sha512-2X4mkroolSMKqW+H22pyPMUVDqYZzPhephTmg/NODKb1IGYPHfxfhcW0EjS7wcPJNbze2i4vBWT7zT5FKF2lrQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "lodash-es": "^4.18.1"
+
      },
+
      "peerDependencies": {
+
        "chevrotain": "^12.0.0"
+
      }
+
    },
+
    "node_modules/chokidar": {
+
      "version": "4.0.3",
+
      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+
      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+
      "dev": true,
+
      "license": "MIT",
+
      "dependencies": {
+
        "readdirp": "^4.0.1"
+
      },
+
      "engines": {
+
        "node": ">= 14.16.0"
+
      },
+
      "funding": {
+
        "url": "https://paulmillr.com/funding/"
+
      }
+
    },
+
    "node_modules/clsx": {
+
      "version": "2.1.1",
+
      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+
      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+
      "license": "MIT",
+
      "engines": {
+
        "node": ">=6"
+
      }
+
    },
+
    "node_modules/combined-stream": {
+
      "version": "1.0.8",
+
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+
      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+
      "dev": true,
+
      "license": "MIT",
+
      "dependencies": {
+
        "delayed-stream": "~1.0.0"
+
      },
+
      "engines": {
+
        "node": ">= 0.8"
+
      }
+
    },
+
    "node_modules/comma-separated-tokens": {
+
      "version": "2.0.3",
+
      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+
      "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+
      "license": "MIT",
+
      "funding": {
+
        "type": "github",
+
        "url": "https://github.com/sponsors/wooorm"
+
      }
+
    },
+
    "node_modules/commander": {
+
      "version": "8.3.0",
+
      "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+
      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+
      "license": "MIT",
+
      "engines": {
+
        "node": ">= 12"
+
      }
+
    },
+
    "node_modules/compare-versions": {
+
      "version": "6.1.1",
+
      "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz",
+
      "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/config": {
+
      "version": "4.4.1",
+
      "resolved": "https://registry.npmjs.org/config/-/config-4.4.1.tgz",
+
      "integrity": "sha512-XfN4Q4+wBKkGtgMyQ+5ayjepdb0MrdiGKfBr0G1PTLx9rnqsX+Xiw03LEUtSALZU0UVfcFp6+xYV0NL8HLF94g==",
+
      "dev": true,
+
      "license": "MIT",
+
      "dependencies": {
+
        "json5": "^2.2.3"
+
      },
+
      "engines": {
+
        "node": ">= 20.0.0"
+
      }
+
    },
+
    "node_modules/convert-source-map": {
+
      "version": "2.0.0",
+
      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+
      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+
      "dev": true,
+
      "license": "MIT"
+
    },
+
    "node_modules/cose-base": {
+
      "version": "1.0.3",
+
      "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
+
      "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "layout-base": "^1.0.0"
+
      }
+
    },
+
    "node_modules/cross-spawn": {
+
      "version": "7.0.6",
+
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+
      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+
      "dev": true,
+
      "license": "MIT",
+
      "dependencies": {
+
        "path-key": "^3.1.0",
+
        "shebang-command": "^2.0.0",
+
        "which": "^2.0.1"
+
      },
+
      "engines": {
+
        "node": ">= 8"
+
      }
+
    },
+
    "node_modules/crypt": {
+
      "version": "0.0.2",
+
      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+
      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+
      "license": "BSD-3-Clause",
+
      "engines": {
+
        "node": "*"
+
      }
+
    },
+
    "node_modules/cssesc": {
+
      "version": "3.0.0",
+
      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+
      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+
      "dev": true,
+
      "license": "MIT",
+
      "bin": {
+
        "cssesc": "bin/cssesc"
+
      },
+
      "engines": {
+
        "node": ">=4"
+
      }
+
    },
+
    "node_modules/cytoscape": {
+
      "version": "3.33.3",
+
      "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.3.tgz",
+
      "integrity": "sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g==",
+
      "license": "MIT",
+
      "engines": {
+
        "node": ">=0.10"
+
      }
+
    },
+
    "node_modules/cytoscape-cose-bilkent": {
+
      "version": "4.1.0",
+
      "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
+
      "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "cose-base": "^1.0.0"
+
      },
+
      "peerDependencies": {
+
        "cytoscape": "^3.2.0"
+
      }
+
    },
+
    "node_modules/cytoscape-fcose": {
+
      "version": "2.2.0",
+
      "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz",
+
      "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "cose-base": "^2.2.0"
+
      },
+
      "peerDependencies": {
+
        "cytoscape": "^3.2.0"
+
      }
+
    },
+
    "node_modules/cytoscape-fcose/node_modules/cose-base": {
+
      "version": "2.2.0",
+
      "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz",
+
      "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "layout-base": "^2.0.0"
+
      }
+
    },
+
    "node_modules/cytoscape-fcose/node_modules/layout-base": {
+
      "version": "2.0.1",
+
      "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz",
+
      "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==",
+
      "license": "MIT"
+
    },
+
    "node_modules/d3": {
+
      "version": "7.9.0",
+
      "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
+
      "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-array": "3",
+
        "d3-axis": "3",
+
        "d3-brush": "3",
+
        "d3-chord": "3",
+
        "d3-color": "3",
+
        "d3-contour": "4",
+
        "d3-delaunay": "6",
+
        "d3-dispatch": "3",
+
        "d3-drag": "3",
+
        "d3-dsv": "3",
+
        "d3-ease": "3",
+
        "d3-fetch": "3",
+
        "d3-force": "3",
+
        "d3-format": "3",
+
        "d3-geo": "3",
+
        "d3-hierarchy": "3",
+
        "d3-interpolate": "3",
+
        "d3-path": "3",
+
        "d3-polygon": "3",
+
        "d3-quadtree": "3",
+
        "d3-random": "3",
+
        "d3-scale": "4",
+
        "d3-scale-chromatic": "3",
+
        "d3-selection": "3",
+
        "d3-shape": "3",
+
        "d3-time": "3",
+
        "d3-time-format": "4",
+
        "d3-timer": "3",
+
        "d3-transition": "3",
+
        "d3-zoom": "3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-array": {
+
      "version": "3.2.4",
+
      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+
      "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "internmap": "1 - 2"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-axis": {
+
      "version": "3.0.0",
+
      "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+
      "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-brush": {
+
      "version": "3.0.0",
+
      "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+
      "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-dispatch": "1 - 3",
+
        "d3-drag": "2 - 3",
+
        "d3-interpolate": "1 - 3",
+
        "d3-selection": "3",
+
        "d3-transition": "3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-chord": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+
      "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-path": "1 - 3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-color": {
+
      "version": "3.1.0",
+
      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+
      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-contour": {
+
      "version": "4.0.2",
+
      "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+
      "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-array": "^3.2.0"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-delaunay": {
+
      "version": "6.0.4",
+
      "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+
      "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "delaunator": "5"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-dispatch": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+
      "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-drag": {
+
      "version": "3.0.0",
+
      "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+
      "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-dispatch": "1 - 3",
+
        "d3-selection": "3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-dsv": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+
      "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "commander": "7",
+
        "iconv-lite": "0.6",
+
        "rw": "1"
+
      },
+
      "bin": {
+
        "csv2json": "bin/dsv2json.js",
+
        "csv2tsv": "bin/dsv2dsv.js",
+
        "dsv2dsv": "bin/dsv2dsv.js",
+
        "dsv2json": "bin/dsv2json.js",
+
        "json2csv": "bin/json2dsv.js",
+
        "json2dsv": "bin/json2dsv.js",
+
        "json2tsv": "bin/json2dsv.js",
+
        "tsv2csv": "bin/dsv2dsv.js",
+
        "tsv2json": "bin/dsv2json.js"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-dsv/node_modules/commander": {
+
      "version": "7.2.0",
+
      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+
      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+
      "license": "MIT",
+
      "engines": {
+
        "node": ">= 10"
+
      }
+
    },
+
    "node_modules/d3-ease": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+
      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+
      "license": "BSD-3-Clause",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-fetch": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+
      "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-dsv": "1 - 3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-force": {
+
      "version": "3.0.0",
+
      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+
      "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-dispatch": "1 - 3",
+
        "d3-quadtree": "1 - 3",
+
        "d3-timer": "1 - 3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-format": {
+
      "version": "3.1.2",
+
      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+
      "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-geo": {
+
      "version": "3.1.1",
+
      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+
      "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-array": "2.5.0 - 3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-hierarchy": {
+
      "version": "3.1.2",
+
      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+
      "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-interpolate": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+
      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-color": "1 - 3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-path": {
+
      "version": "3.1.0",
+
      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+
      "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-polygon": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+
      "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-quadtree": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+
      "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-random": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+
      "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/d3-sankey": {
+
      "version": "0.12.3",
+
      "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
+
      "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
+
      "license": "BSD-3-Clause",
+
      "dependencies": {
+
        "d3-array": "1 - 2",
+
        "d3-shape": "^1.2.0"
      }
    },
-
    "node_modules/charenc": {
-
      "version": "0.0.2",
-
      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
-
      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+
    "node_modules/d3-sankey/node_modules/d3-array": {
+
      "version": "2.12.1",
+
      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+
      "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
      "license": "BSD-3-Clause",
-
      "engines": {
-
        "node": "*"
+
      "dependencies": {
+
        "internmap": "^1.0.0"
      }
    },
-
    "node_modules/chokidar": {
-
      "version": "4.0.3",
-
      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
-
      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
-
      "dev": true,
-
      "license": "MIT",
+
    "node_modules/d3-sankey/node_modules/d3-path": {
+
      "version": "1.0.9",
+
      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+
      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
+
      "license": "BSD-3-Clause"
+
    },
+
    "node_modules/d3-sankey/node_modules/d3-shape": {
+
      "version": "1.3.7",
+
      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+
      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+
      "license": "BSD-3-Clause",
      "dependencies": {
-
        "readdirp": "^4.0.1"
-
      },
-
      "engines": {
-
        "node": ">= 14.16.0"
-
      },
-
      "funding": {
-
        "url": "https://paulmillr.com/funding/"
+
        "d3-path": "1"
      }
    },
-
    "node_modules/clsx": {
-
      "version": "2.1.1",
-
      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
-
      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
-
      "license": "MIT",
+
    "node_modules/d3-sankey/node_modules/internmap": {
+
      "version": "1.0.1",
+
      "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
+
      "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==",
+
      "license": "ISC"
+
    },
+
    "node_modules/d3-scale": {
+
      "version": "4.0.2",
+
      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+
      "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-array": "2.10.0 - 3",
+
        "d3-format": "1 - 3",
+
        "d3-interpolate": "1.2.0 - 3",
+
        "d3-time": "2.1.1 - 3",
+
        "d3-time-format": "2 - 4"
+
      },
      "engines": {
-
        "node": ">=6"
+
        "node": ">=12"
      }
    },
-
    "node_modules/combined-stream": {
-
      "version": "1.0.8",
-
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-
      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-
      "dev": true,
-
      "license": "MIT",
+
    "node_modules/d3-scale-chromatic": {
+
      "version": "3.1.0",
+
      "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+
      "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+
      "license": "ISC",
      "dependencies": {
-
        "delayed-stream": "~1.0.0"
+
        "d3-color": "1 - 3",
+
        "d3-interpolate": "1 - 3"
      },
      "engines": {
-
        "node": ">= 0.8"
+
        "node": ">=12"
      }
    },
-
    "node_modules/comma-separated-tokens": {
-
      "version": "2.0.3",
-
      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
-
      "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
-
      "license": "MIT",
-
      "funding": {
-
        "type": "github",
-
        "url": "https://github.com/sponsors/wooorm"
+
    "node_modules/d3-selection": {
+
      "version": "3.0.0",
+
      "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+
      "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
      }
    },
-
    "node_modules/commander": {
-
      "version": "8.3.0",
-
      "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-
      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
-
      "license": "MIT",
-
      "peer": true,
+
    "node_modules/d3-shape": {
+
      "version": "3.2.0",
+
      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+
      "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-path": "^3.1.0"
+
      },
      "engines": {
-
        "node": ">= 12"
+
        "node": ">=12"
      }
    },
-
    "node_modules/compare-versions": {
-
      "version": "6.1.1",
-
      "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz",
-
      "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==",
-
      "license": "MIT"
-
    },
-
    "node_modules/config": {
-
      "version": "4.4.1",
-
      "resolved": "https://registry.npmjs.org/config/-/config-4.4.1.tgz",
-
      "integrity": "sha512-XfN4Q4+wBKkGtgMyQ+5ayjepdb0MrdiGKfBr0G1PTLx9rnqsX+Xiw03LEUtSALZU0UVfcFp6+xYV0NL8HLF94g==",
-
      "dev": true,
-
      "license": "MIT",
+
    "node_modules/d3-time": {
+
      "version": "3.1.0",
+
      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+
      "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+
      "license": "ISC",
      "dependencies": {
-
        "json5": "^2.2.3"
+
        "d3-array": "2 - 3"
      },
      "engines": {
-
        "node": ">= 20.0.0"
+
        "node": ">=12"
      }
    },
-
    "node_modules/convert-source-map": {
-
      "version": "2.0.0",
-
      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-
      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
-
      "dev": true,
-
      "license": "MIT"
-
    },
-
    "node_modules/cross-spawn": {
-
      "version": "7.0.6",
-
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-
      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-
      "dev": true,
-
      "license": "MIT",
+
    "node_modules/d3-time-format": {
+
      "version": "4.1.0",
+
      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+
      "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+
      "license": "ISC",
      "dependencies": {
-
        "path-key": "^3.1.0",
-
        "shebang-command": "^2.0.0",
-
        "which": "^2.0.1"
+
        "d3-time": "1 - 3"
      },
      "engines": {
-
        "node": ">= 8"
+
        "node": ">=12"
      }
    },
-
    "node_modules/crypt": {
-
      "version": "0.0.2",
-
      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
-
      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
-
      "license": "BSD-3-Clause",
+
    "node_modules/d3-timer": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+
      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+
      "license": "ISC",
      "engines": {
-
        "node": "*"
+
        "node": ">=12"
      }
    },
-
    "node_modules/cssesc": {
+
    "node_modules/d3-transition": {
+
      "version": "3.0.1",
+
      "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+
      "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-color": "1 - 3",
+
        "d3-dispatch": "1 - 3",
+
        "d3-ease": "1 - 3",
+
        "d3-interpolate": "1 - 3",
+
        "d3-timer": "1 - 3"
+
      },
+
      "engines": {
+
        "node": ">=12"
+
      },
+
      "peerDependencies": {
+
        "d3-selection": "2 - 3"
+
      }
+
    },
+
    "node_modules/d3-zoom": {
      "version": "3.0.0",
-
      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-
      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-
      "dev": true,
-
      "license": "MIT",
-
      "bin": {
-
        "cssesc": "bin/cssesc"
+
      "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+
      "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "d3-dispatch": "1 - 3",
+
        "d3-drag": "2 - 3",
+
        "d3-interpolate": "1 - 3",
+
        "d3-selection": "2 - 3",
+
        "d3-transition": "2 - 3"
      },
      "engines": {
-
        "node": ">=4"
+
        "node": ">=12"
+
      }
+
    },
+
    "node_modules/dagre-d3-es": {
+
      "version": "7.0.14",
+
      "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz",
+
      "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "d3": "^7.9.0",
+
        "lodash-es": "^4.17.21"
      }
    },
+
    "node_modules/dayjs": {
+
      "version": "1.11.20",
+
      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz",
+
      "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
+
      "license": "MIT"
+
    },
    "node_modules/debug": {
      "version": "4.4.3",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -1730,6 +2632,15 @@
        "node": ">=0.10.0"
      }
    },
+
    "node_modules/delaunator": {
+
      "version": "5.1.0",
+
      "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
+
      "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
+
      "license": "ISC",
+
      "dependencies": {
+
        "robust-predicates": "^3.0.2"
+
      }
+
    },
    "node_modules/delayed-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -2511,6 +3422,12 @@
      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
      "license": "ISC"
    },
+
    "node_modules/hachure-fill": {
+
      "version": "0.5.2",
+
      "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz",
+
      "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==",
+
      "license": "MIT"
+
    },
    "node_modules/happy-dom": {
      "version": "20.9.0",
      "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.9.0.tgz",
@@ -2642,6 +3559,18 @@
        "node": ">=18.18.0"
      }
    },
+
    "node_modules/iconv-lite": {
+
      "version": "0.6.3",
+
      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+
      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "safer-buffer": ">= 2.1.2 < 3.0.0"
+
      },
+
      "engines": {
+
        "node": ">=0.10.0"
+
      }
+
    },
    "node_modules/ieee754": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -2692,6 +3621,15 @@
        "node": ">=0.8.19"
      }
    },
+
    "node_modules/internmap": {
+
      "version": "2.0.3",
+
      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+
      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+
      "license": "ISC",
+
      "engines": {
+
        "node": ">=12"
+
      }
+
    },
    "node_modules/is-buffer": {
      "version": "1.1.6",
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
@@ -2871,7 +3809,6 @@
        "https://github.com/sponsors/katex"
      ],
      "license": "MIT",
-
      "peer": true,
      "dependencies": {
        "commander": "^8.3.0"
      },
@@ -2889,6 +3826,11 @@
        "json-buffer": "3.0.1"
      }
    },
+
    "node_modules/khroma": {
+
      "version": "2.1.0",
+
      "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz",
+
      "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
+
    },
    "node_modules/kind-of": {
      "version": "6.0.3",
      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -2905,6 +3847,30 @@
      "dev": true,
      "license": "MIT"
    },
+
    "node_modules/langium": {
+
      "version": "4.2.3",
+
      "resolved": "https://registry.npmjs.org/langium/-/langium-4.2.3.tgz",
+
      "integrity": "sha512-sOPIi4hISFnY7twwV97ca1TsxpBtXq0URu/LL1AvxwccPG/RIBBlKS7a/f/EL6w8lTNaS0EFs/F+IdSOaqYpng==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@chevrotain/regexp-to-ast": "~12.0.0",
+
        "chevrotain": "~12.0.0",
+
        "chevrotain-allstar": "~0.4.3",
+
        "vscode-languageserver": "~9.0.1",
+
        "vscode-languageserver-textdocument": "~1.0.11",
+
        "vscode-uri": "~3.1.0"
+
      },
+
      "engines": {
+
        "node": ">=20.10.0",
+
        "npm": ">=10.2.3"
+
      }
+
    },
+
    "node_modules/layout-base": {
+
      "version": "1.0.2",
+
      "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
+
      "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==",
+
      "license": "MIT"
+
    },
    "node_modules/levn": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -3239,6 +4205,12 @@
      "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
      "license": "MIT"
    },
+
    "node_modules/lodash-es": {
+
      "version": "4.18.1",
+
      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+
      "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
+
      "license": "MIT"
+
    },
    "node_modules/lru-cache": {
      "version": "11.3.5",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz",
@@ -3352,6 +4324,47 @@
        "url": "https://opencollective.com/unified"
      }
    },
+
    "node_modules/mermaid": {
+
      "version": "11.14.0",
+
      "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.14.0.tgz",
+
      "integrity": "sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "@braintree/sanitize-url": "^7.1.1",
+
        "@iconify/utils": "^3.0.2",
+
        "@mermaid-js/parser": "^1.1.0",
+
        "@types/d3": "^7.4.3",
+
        "@upsetjs/venn.js": "^2.0.0",
+
        "cytoscape": "^3.33.1",
+
        "cytoscape-cose-bilkent": "^4.1.0",
+
        "cytoscape-fcose": "^2.2.0",
+
        "d3": "^7.9.0",
+
        "d3-sankey": "^0.12.3",
+
        "dagre-d3-es": "7.0.14",
+
        "dayjs": "^1.11.19",
+
        "dompurify": "^3.3.1",
+
        "katex": "^0.16.25",
+
        "khroma": "^2.1.0",
+
        "lodash-es": "^4.17.23",
+
        "marked": "^16.3.0",
+
        "roughjs": "^4.6.6",
+
        "stylis": "^4.3.6",
+
        "ts-dedent": "^2.2.0",
+
        "uuid": "^11.1.0"
+
      }
+
    },
+
    "node_modules/mermaid/node_modules/marked": {
+
      "version": "16.4.2",
+
      "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz",
+
      "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==",
+
      "license": "MIT",
+
      "bin": {
+
        "marked": "bin/marked.js"
+
      },
+
      "engines": {
+
        "node": ">= 20"
+
      }
+
    },
    "node_modules/micromark-util-character": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
@@ -3641,6 +4654,12 @@
      "dev": true,
      "license": "BlueOak-1.0.0"
    },
+
    "node_modules/package-manager-detector": {
+
      "version": "1.6.0",
+
      "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz",
+
      "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==",
+
      "license": "MIT"
+
    },
    "node_modules/parse-ms": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
@@ -3654,6 +4673,12 @@
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
+
    "node_modules/path-data-parser": {
+
      "version": "0.1.0",
+
      "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz",
+
      "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==",
+
      "license": "MIT"
+
    },
    "node_modules/path-exists": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -3750,6 +4775,22 @@
        "node": ">=18"
      }
    },
+
    "node_modules/points-on-curve": {
+
      "version": "0.2.0",
+
      "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz",
+
      "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==",
+
      "license": "MIT"
+
    },
+
    "node_modules/points-on-path": {
+
      "version": "0.2.1",
+
      "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz",
+
      "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "path-data-parser": "0.1.0",
+
        "points-on-curve": "0.2.0"
+
      }
+
    },
    "node_modules/postcss": {
      "version": "8.5.10",
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
@@ -4004,6 +5045,12 @@
        "url": "https://github.com/sponsors/isaacs"
      }
    },
+
    "node_modules/robust-predicates": {
+
      "version": "3.0.3",
+
      "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",
+
      "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==",
+
      "license": "Unlicense"
+
    },
    "node_modules/rolldown": {
      "version": "1.0.0-rc.16",
      "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.16.tgz",
@@ -4038,6 +5085,24 @@
        "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.16"
      }
    },
+
    "node_modules/roughjs": {
+
      "version": "4.6.6",
+
      "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz",
+
      "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "hachure-fill": "^0.5.2",
+
        "path-data-parser": "^0.1.0",
+
        "points-on-curve": "^0.2.0",
+
        "points-on-path": "^0.2.1"
+
      }
+
    },
+
    "node_modules/rw": {
+
      "version": "1.3.3",
+
      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+
      "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
+
      "license": "BSD-3-Clause"
+
    },
    "node_modules/rxjs": {
      "version": "7.8.2",
      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
@@ -4061,6 +5126,12 @@
        "node": ">=6"
      }
    },
+
    "node_modules/safer-buffer": {
+
      "version": "2.1.2",
+
      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+
      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+
      "license": "MIT"
+
    },
    "node_modules/section-matter": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
@@ -4200,6 +5271,12 @@
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
+
    "node_modules/stylis": {
+
      "version": "4.4.0",
+
      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz",
+
      "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==",
+
      "license": "MIT"
+
    },
    "node_modules/svelte": {
      "version": "5.55.4",
      "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.4.tgz",
@@ -4341,7 +5418,6 @@
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz",
      "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==",
-
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
@@ -4397,6 +5473,15 @@
        "typescript": ">=4.8.4"
      }
    },
+
    "node_modules/ts-dedent": {
+
      "version": "2.2.0",
+
      "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
+
      "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+
      "license": "MIT",
+
      "engines": {
+
        "node": ">=6.10"
+
      }
+
    },
    "node_modules/tslib": {
      "version": "2.8.1",
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -4592,6 +5677,19 @@
      "dev": true,
      "license": "MIT"
    },
+
    "node_modules/uuid": {
+
      "version": "11.1.1",
+
      "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz",
+
      "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==",
+
      "funding": [
+
        "https://github.com/sponsors/broofa",
+
        "https://github.com/sponsors/ctavan"
+
      ],
+
      "license": "MIT",
+
      "bin": {
+
        "uuid": "dist/esm/bin/uuid"
+
      }
+
    },
    "node_modules/vfile": {
      "version": "6.0.3",
      "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
@@ -4823,6 +5921,49 @@
        }
      }
    },
+
    "node_modules/vscode-jsonrpc": {
+
      "version": "8.2.0",
+
      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
+
      "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+
      "license": "MIT",
+
      "engines": {
+
        "node": ">=14.0.0"
+
      }
+
    },
+
    "node_modules/vscode-languageserver": {
+
      "version": "9.0.1",
+
      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
+
      "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "vscode-languageserver-protocol": "3.17.5"
+
      },
+
      "bin": {
+
        "installServerIntoExtension": "bin/installServerIntoExtension"
+
      }
+
    },
+
    "node_modules/vscode-languageserver-protocol": {
+
      "version": "3.17.5",
+
      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
+
      "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+
      "license": "MIT",
+
      "dependencies": {
+
        "vscode-jsonrpc": "8.2.0",
+
        "vscode-languageserver-types": "3.17.5"
+
      }
+
    },
+
    "node_modules/vscode-languageserver-textdocument": {
+
      "version": "1.0.12",
+
      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+
      "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
+
      "license": "MIT"
+
    },
+
    "node_modules/vscode-languageserver-types": {
+
      "version": "3.17.5",
+
      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+
      "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+
      "license": "MIT"
+
    },
    "node_modules/vscode-oniguruma": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-2.0.1.tgz",
@@ -4835,6 +5976,12 @@
      "integrity": "sha512-n2uGbUcrjhUEBH16uGA0TvUfhWwliFZ1e3+pTjrkim1Mt7ydB41lV08aUvsi70OlzDWp6X7Bx3w/x3fAXIsN0Q==",
      "license": "MIT"
    },
+
    "node_modules/vscode-uri": {
+
      "version": "3.1.0",
+
      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
+
      "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+
      "license": "MIT"
+
    },
    "node_modules/wait-on": {
      "version": "9.0.5",
      "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.5.tgz",
modified package.json
@@ -78,6 +78,7 @@
    "marked-linkify-it": "^3.1.15",
    "md5": "^2.3.0",
    "svelte": "^5.55.4",
+
    "mermaid": "^11.14.0",
    "twemoji": "^14.0.2",
    "zod": "^4.3.6"
  }
modified src/components/Markdown.svelte
@@ -3,6 +3,7 @@
  import matter from "@radicle/gray-matter";
  import { afterUpdate } from "svelte";
  import { toDom } from "hast-util-to-dom";
+
  import mermaid from "mermaid";

  import * as router from "@app/lib/router";
  import * as modal from "@app/lib/modal";
@@ -100,6 +101,12 @@
  }

  afterUpdate(async () => {
+
    // Initialize mermaid with error handling configuration
+
    mermaid.initialize({
+
      startOnLoad: false,
+
      securityLevel: 'loose',
+
    });
+

    for (const e of container.querySelectorAll("a")) {
      try {
        const url = new URL(e.href);
@@ -210,7 +217,7 @@

    // Replaces code blocks in the background with highlighted code.
    const prefix = "language-";
-
    const nodes = Array.from(document.body.querySelectorAll("pre code"));
+
    const nodes = Array.from(container.querySelectorAll("pre code"));

    const treeChanges: Promise<void>[] = [];

@@ -231,8 +238,36 @@
      );
      if (!className) continue;

+
      const language = className.slice(prefix.length);
+
      
+
      // Handle mermaid diagrams
+
      if (language === 'mermaid') {
+
        const mermaidCode = node.textContent || '';
+
        try {
+
          // First, validate the syntax without rendering
+
          const isValid = await mermaid.parse(mermaidCode, { suppressErrors: true });
+
          
+
          if (isValid) {
+
            // Generate a unique id for this diagram
+
            const diagramId = `mermaid-${Math.random().toString(36).substr(2, 9)}`;
+
            
+
            // Try to render the mermaid diagram
+
            const { svg } = await mermaid.render(diagramId, mermaidCode);
+
            
+
            // Replace the code block with the rendered diagram
+
            const mermaidDiv = document.createElement('div');
+
            mermaidDiv.innerHTML = svg;
+
            mermaidDiv.classList.add('mermaid-diagram');
+
            preWrapper.replaceWith(mermaidDiv);
+
          }
+
        } catch (error) {
+
          // On any error, keep the raw text visible (do nothing, let it render as code)
+
        }
+
        continue;
+
      }
+

      treeChanges.push(
-
        highlight(node.textContent ?? "", className.slice(prefix.length))
+
        highlight(node.textContent ?? "", language)
          .then(tree => {
            if (tree) {
              node.replaceChildren(toDom(tree, { fragment: true }));
@@ -500,6 +535,16 @@
  .markdown :global(dl dd) {
    margin: 0 0 0 2rem;
  }
+

+
  .markdown :global(.mermaid-diagram) {
+
    margin: 1rem 0;
+
    text-align: center;
+
  }
+

+
  .markdown :global(.mermaid-diagram svg) {
+
    max-width: 100%;
+
    height: auto;
+
  }
</style>

{#if frontMatter && frontMatter.length > 0}
modified tests/fixtures/repos/markdown.tar.bz2
modified tests/visual/desktop/markdown.spec.ts
@@ -125,6 +125,23 @@ test("math", async ({ page }) => {
  await expect(page).toHaveScreenshot({ fullPage: true });
});

+
test("mermaid diagram", async ({ page }) => {
+
  await page.goto(`${markdownUrl}/tree/main/mermaid.md`, {
+
    waitUntil: "networkidle",
+
  });
+
  await expect(page.locator(".mermaid-diagram svg")).toBeVisible();
+
  await expect(page).toHaveScreenshot({ fullPage: true });
+
});
+

+
test("broken mermaid falls back to code block", async ({ page }) => {
+
  await page.goto(`${markdownUrl}/tree/main/mermaid-broken.md`, {
+
    waitUntil: "networkidle",
+
  });
+
  await expect(page.locator("pre code.language-mermaid")).toBeVisible();
+
  await expect(page.locator(".mermaid-diagram")).toHaveCount(0);
+
  await expect(page).toHaveScreenshot({ fullPage: true });
+
});
+

test("relative image not able to being loaded", async ({ page }) => {
  await page.goto(`${markdownUrl}/tree/main/loading-image.md`, {
    waitUntil: "networkidle",