diff --git a/client/package.json b/client/package.json index e5f3a99bdb..75e58ed701 100644 --- a/client/package.json +++ b/client/package.json @@ -34,6 +34,7 @@ "jsonwebtoken": "^9.0.0", "lodash": "^4.17.21", "mammoth": "^1.5.1", + "mermaid": "^8.13.5", "mongoose": "^6.10.0", "nanoid": "^4.0.1", "next": "13.1.6", @@ -49,14 +50,14 @@ "react-markdown": "^8.0.5", "react-syntax-highlighter": "^15.5.0", "rehype-katex": "^6.0.2", + "remark-breaks": "^3.0.3", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", "request-ip": "^3.3.0", "sass": "^1.58.3", "tunnel": "^0.0.6", "wxpay-v3": "^3.0.2", - "zustand": "^4.3.5", - "mermaid": "^8.13.5" + "zustand": "^4.3.5" }, "devDependencies": { "@svgr/webpack": "^6.5.1", diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml index 648ac39a76..699abc6695 100644 --- a/client/pnpm-lock.yaml +++ b/client/pnpm-lock.yaml @@ -80,6 +80,9 @@ dependencies: mammoth: specifier: ^1.5.1 version: registry.npmmirror.com/mammoth@1.5.1 + mermaid: + specifier: ^8.13.5 + version: registry.npmmirror.com/mermaid@8.13.5 mongoose: specifier: ^6.10.0 version: registry.npmmirror.com/mongoose@6.10.0 @@ -125,6 +128,9 @@ dependencies: rehype-katex: specifier: ^6.0.2 version: registry.npmmirror.com/rehype-katex@6.0.2 + remark-breaks: + specifier: ^3.0.3 + version: registry.npmmirror.com/remark-breaks@3.0.3 remark-gfm: specifier: ^3.0.1 version: registry.npmmirror.com/remark-gfm@3.0.1 @@ -2914,6 +2920,13 @@ packages: '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier@7.22.5 to-fast-properties: registry.npmmirror.com/to-fast-properties@2.0.0 + registry.npmmirror.com/@braintree/sanitize-url@3.1.0: + resolution: {integrity: sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz} + name: '@braintree/sanitize-url' + version: 3.1.0 + deprecated: Potential XSS vulnerability patched in v6.0.0. + dev: false + registry.npmmirror.com/@chakra-ui/accordion@2.1.9(@chakra-ui/system@2.5.1)(framer-motion@9.0.6)(react@18.2.0): resolution: {integrity: sha512-a9CKIAUHezc0f5FR/SQ4GVxnWuIb2HbDTxTEKTp58w/J9pecIbJaNrJ5TUZ0MVbDU9jkgO9RsZ29jkja8PomAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@chakra-ui/accordion/-/accordion-2.1.9.tgz} id: registry.npmmirror.com/@chakra-ui/accordion/2.1.9 @@ -6160,12 +6173,17 @@ packages: version: 2.0.3 dev: false + registry.npmmirror.com/commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz} + name: commander + version: 2.20.3 + dev: false + registry.npmmirror.com/commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz} name: commander version: 7.2.0 engines: {node: '>= 10'} - dev: true registry.npmmirror.com/commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz} @@ -6324,6 +6342,618 @@ packages: name: csstype version: 3.1.2 + registry.npmmirror.com/d3-array@1.2.4: + resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-array/-/d3-array-1.2.4.tgz} + name: d3-array + version: 1.2.4 + dev: false + + registry.npmmirror.com/d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz} + name: d3-array + version: 3.2.4 + engines: {node: '>=12'} + dependencies: + internmap: registry.npmmirror.com/internmap@2.0.3 + dev: false + + registry.npmmirror.com/d3-axis@1.0.12: + resolution: {integrity: sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-axis/-/d3-axis-1.0.12.tgz} + name: d3-axis + version: 1.0.12 + dev: false + + registry.npmmirror.com/d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz} + name: d3-axis + version: 3.0.0 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-brush@1.1.6: + resolution: {integrity: sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-brush/-/d3-brush-1.1.6.tgz} + name: d3-brush + version: 1.1.6 + dependencies: + d3-dispatch: registry.npmmirror.com/d3-dispatch@1.0.6 + d3-drag: registry.npmmirror.com/d3-drag@1.2.5 + d3-interpolate: registry.npmmirror.com/d3-interpolate@1.4.0 + d3-selection: registry.npmmirror.com/d3-selection@1.4.2 + d3-transition: registry.npmmirror.com/d3-transition@1.3.2 + dev: false + + registry.npmmirror.com/d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz} + name: d3-brush + version: 3.0.0 + engines: {node: '>=12'} + dependencies: + d3-dispatch: registry.npmmirror.com/d3-dispatch@3.0.1 + d3-drag: registry.npmmirror.com/d3-drag@3.0.0 + d3-interpolate: registry.npmmirror.com/d3-interpolate@3.0.1 + d3-selection: registry.npmmirror.com/d3-selection@3.0.0 + d3-transition: registry.npmmirror.com/d3-transition@3.0.1(d3-selection@3.0.0) + dev: false + + registry.npmmirror.com/d3-chord@1.0.6: + resolution: {integrity: sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-chord/-/d3-chord-1.0.6.tgz} + name: d3-chord + version: 1.0.6 + dependencies: + d3-array: registry.npmmirror.com/d3-array@1.2.4 + d3-path: registry.npmmirror.com/d3-path@1.0.9 + dev: false + + registry.npmmirror.com/d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz} + name: d3-chord + version: 3.0.1 + engines: {node: '>=12'} + dependencies: + d3-path: registry.npmmirror.com/d3-path@3.1.0 + dev: false + + registry.npmmirror.com/d3-collection@1.0.7: + resolution: {integrity: sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-collection/-/d3-collection-1.0.7.tgz} + name: d3-collection + version: 1.0.7 + dev: false + + registry.npmmirror.com/d3-color@1.4.1: + resolution: {integrity: sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-color/-/d3-color-1.4.1.tgz} + name: d3-color + version: 1.4.1 + dev: false + + registry.npmmirror.com/d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz} + name: d3-color + version: 3.1.0 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-contour@1.3.2: + resolution: {integrity: sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-contour/-/d3-contour-1.3.2.tgz} + name: d3-contour + version: 1.3.2 + dependencies: + d3-array: registry.npmmirror.com/d3-array@1.2.4 + dev: false + + registry.npmmirror.com/d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-contour/-/d3-contour-4.0.2.tgz} + name: d3-contour + version: 4.0.2 + engines: {node: '>=12'} + dependencies: + d3-array: registry.npmmirror.com/d3-array@3.2.4 + dev: false + + registry.npmmirror.com/d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz} + name: d3-delaunay + version: 6.0.4 + engines: {node: '>=12'} + dependencies: + delaunator: registry.npmmirror.com/delaunator@5.0.0 + dev: false + + registry.npmmirror.com/d3-dispatch@1.0.6: + resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz} + name: d3-dispatch + version: 1.0.6 + dev: false + + registry.npmmirror.com/d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz} + name: d3-dispatch + version: 3.0.1 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-drag@1.2.5: + resolution: {integrity: sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-drag/-/d3-drag-1.2.5.tgz} + name: d3-drag + version: 1.2.5 + dependencies: + d3-dispatch: registry.npmmirror.com/d3-dispatch@1.0.6 + d3-selection: registry.npmmirror.com/d3-selection@1.4.2 + dev: false + + registry.npmmirror.com/d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz} + name: d3-drag + version: 3.0.0 + engines: {node: '>=12'} + dependencies: + d3-dispatch: registry.npmmirror.com/d3-dispatch@3.0.1 + d3-selection: registry.npmmirror.com/d3-selection@3.0.0 + dev: false + + registry.npmmirror.com/d3-dsv@1.2.0: + resolution: {integrity: sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dsv/-/d3-dsv-1.2.0.tgz} + name: d3-dsv + version: 1.2.0 + hasBin: true + dependencies: + commander: registry.npmmirror.com/commander@2.20.3 + iconv-lite: registry.npmmirror.com/iconv-lite@0.4.24 + rw: registry.npmmirror.com/rw@1.3.3 + dev: false + + registry.npmmirror.com/d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz} + name: d3-dsv + version: 3.0.1 + engines: {node: '>=12'} + hasBin: true + dependencies: + commander: registry.npmmirror.com/commander@7.2.0 + iconv-lite: registry.npmmirror.com/iconv-lite@0.6.3 + rw: registry.npmmirror.com/rw@1.3.3 + dev: false + + registry.npmmirror.com/d3-ease@1.0.7: + resolution: {integrity: sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz} + name: d3-ease + version: 1.0.7 + dev: false + + registry.npmmirror.com/d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz} + name: d3-ease + version: 3.0.1 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-fetch@1.2.0: + resolution: {integrity: sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-fetch/-/d3-fetch-1.2.0.tgz} + name: d3-fetch + version: 1.2.0 + dependencies: + d3-dsv: registry.npmmirror.com/d3-dsv@1.2.0 + dev: false + + registry.npmmirror.com/d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz} + name: d3-fetch + version: 3.0.1 + engines: {node: '>=12'} + dependencies: + d3-dsv: registry.npmmirror.com/d3-dsv@3.0.1 + dev: false + + registry.npmmirror.com/d3-force@1.2.1: + resolution: {integrity: sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-force/-/d3-force-1.2.1.tgz} + name: d3-force + version: 1.2.1 + dependencies: + d3-collection: registry.npmmirror.com/d3-collection@1.0.7 + d3-dispatch: registry.npmmirror.com/d3-dispatch@1.0.6 + d3-quadtree: registry.npmmirror.com/d3-quadtree@1.0.7 + d3-timer: registry.npmmirror.com/d3-timer@1.0.10 + dev: false + + registry.npmmirror.com/d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz} + name: d3-force + version: 3.0.0 + engines: {node: '>=12'} + dependencies: + d3-dispatch: registry.npmmirror.com/d3-dispatch@3.0.1 + d3-quadtree: registry.npmmirror.com/d3-quadtree@3.0.1 + d3-timer: registry.npmmirror.com/d3-timer@3.0.1 + dev: false + + registry.npmmirror.com/d3-format@1.4.5: + resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-format/-/d3-format-1.4.5.tgz} + name: d3-format + version: 1.4.5 + dev: false + + registry.npmmirror.com/d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz} + name: d3-format + version: 3.1.0 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-geo@1.12.1: + resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-geo/-/d3-geo-1.12.1.tgz} + name: d3-geo + version: 1.12.1 + dependencies: + d3-array: registry.npmmirror.com/d3-array@1.2.4 + dev: false + + registry.npmmirror.com/d3-geo@3.1.0: + resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-geo/-/d3-geo-3.1.0.tgz} + name: d3-geo + version: 3.1.0 + engines: {node: '>=12'} + dependencies: + d3-array: registry.npmmirror.com/d3-array@3.2.4 + dev: false + + registry.npmmirror.com/d3-hierarchy@1.1.9: + resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz} + name: d3-hierarchy + version: 1.1.9 + dev: false + + registry.npmmirror.com/d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz} + name: d3-hierarchy + version: 3.1.2 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-interpolate@1.4.0: + resolution: {integrity: sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz} + name: d3-interpolate + version: 1.4.0 + dependencies: + d3-color: registry.npmmirror.com/d3-color@1.4.1 + dev: false + + registry.npmmirror.com/d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz} + name: d3-interpolate + version: 3.0.1 + engines: {node: '>=12'} + dependencies: + d3-color: registry.npmmirror.com/d3-color@3.1.0 + dev: false + + registry.npmmirror.com/d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-path/-/d3-path-1.0.9.tgz} + name: d3-path + version: 1.0.9 + dev: false + + registry.npmmirror.com/d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz} + name: d3-path + version: 3.1.0 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-polygon@1.0.6: + resolution: {integrity: sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-polygon/-/d3-polygon-1.0.6.tgz} + name: d3-polygon + version: 1.0.6 + dev: false + + registry.npmmirror.com/d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz} + name: d3-polygon + version: 3.0.1 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-quadtree@1.0.7: + resolution: {integrity: sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz} + name: d3-quadtree + version: 1.0.7 + dev: false + + registry.npmmirror.com/d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz} + name: d3-quadtree + version: 3.0.1 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-random@1.1.2: + resolution: {integrity: sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-random/-/d3-random-1.1.2.tgz} + name: d3-random + version: 1.1.2 + dev: false + + registry.npmmirror.com/d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz} + name: d3-random + version: 3.0.1 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-scale-chromatic@1.5.0: + resolution: {integrity: sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz} + name: d3-scale-chromatic + version: 1.5.0 + dependencies: + d3-color: registry.npmmirror.com/d3-color@1.4.1 + d3-interpolate: registry.npmmirror.com/d3-interpolate@1.4.0 + dev: false + + registry.npmmirror.com/d3-scale-chromatic@3.0.0: + resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz} + name: d3-scale-chromatic + version: 3.0.0 + engines: {node: '>=12'} + dependencies: + d3-color: registry.npmmirror.com/d3-color@3.1.0 + d3-interpolate: registry.npmmirror.com/d3-interpolate@3.0.1 + dev: false + + registry.npmmirror.com/d3-scale@2.2.2: + resolution: {integrity: sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale/-/d3-scale-2.2.2.tgz} + name: d3-scale + version: 2.2.2 + dependencies: + d3-array: registry.npmmirror.com/d3-array@1.2.4 + d3-collection: registry.npmmirror.com/d3-collection@1.0.7 + d3-format: registry.npmmirror.com/d3-format@1.4.5 + d3-interpolate: registry.npmmirror.com/d3-interpolate@1.4.0 + d3-time: registry.npmmirror.com/d3-time@1.1.0 + d3-time-format: registry.npmmirror.com/d3-time-format@2.3.0 + dev: false + + registry.npmmirror.com/d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz} + name: d3-scale + version: 4.0.2 + engines: {node: '>=12'} + dependencies: + d3-array: registry.npmmirror.com/d3-array@3.2.4 + d3-format: registry.npmmirror.com/d3-format@3.1.0 + d3-interpolate: registry.npmmirror.com/d3-interpolate@3.0.1 + d3-time: registry.npmmirror.com/d3-time@3.1.0 + d3-time-format: registry.npmmirror.com/d3-time-format@4.1.0 + dev: false + + registry.npmmirror.com/d3-selection@1.4.2: + resolution: {integrity: sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-selection/-/d3-selection-1.4.2.tgz} + name: d3-selection + version: 1.4.2 + dev: false + + registry.npmmirror.com/d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz} + name: d3-selection + version: 3.0.0 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-shape/-/d3-shape-1.3.7.tgz} + name: d3-shape + version: 1.3.7 + dependencies: + d3-path: registry.npmmirror.com/d3-path@1.0.9 + dev: false + + registry.npmmirror.com/d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz} + name: d3-shape + version: 3.2.0 + engines: {node: '>=12'} + dependencies: + d3-path: registry.npmmirror.com/d3-path@3.1.0 + dev: false + + registry.npmmirror.com/d3-time-format@2.3.0: + resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time-format/-/d3-time-format-2.3.0.tgz} + name: d3-time-format + version: 2.3.0 + dependencies: + d3-time: registry.npmmirror.com/d3-time@1.1.0 + dev: false + + registry.npmmirror.com/d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz} + name: d3-time-format + version: 4.1.0 + engines: {node: '>=12'} + dependencies: + d3-time: registry.npmmirror.com/d3-time@3.1.0 + dev: false + + registry.npmmirror.com/d3-time@1.1.0: + resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time/-/d3-time-1.1.0.tgz} + name: d3-time + version: 1.1.0 + dev: false + + registry.npmmirror.com/d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-time/-/d3-time-3.1.0.tgz} + name: d3-time + version: 3.1.0 + engines: {node: '>=12'} + dependencies: + d3-array: registry.npmmirror.com/d3-array@3.2.4 + dev: false + + registry.npmmirror.com/d3-timer@1.0.10: + resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz} + name: d3-timer + version: 1.0.10 + dev: false + + registry.npmmirror.com/d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz} + name: d3-timer + version: 3.0.1 + engines: {node: '>=12'} + dev: false + + registry.npmmirror.com/d3-transition@1.3.2: + resolution: {integrity: sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-transition/-/d3-transition-1.3.2.tgz} + name: d3-transition + version: 1.3.2 + dependencies: + d3-color: registry.npmmirror.com/d3-color@1.4.1 + d3-dispatch: registry.npmmirror.com/d3-dispatch@1.0.6 + d3-ease: registry.npmmirror.com/d3-ease@1.0.7 + d3-interpolate: registry.npmmirror.com/d3-interpolate@1.4.0 + d3-selection: registry.npmmirror.com/d3-selection@1.4.2 + d3-timer: registry.npmmirror.com/d3-timer@1.0.10 + dev: false + + registry.npmmirror.com/d3-transition@3.0.1(d3-selection@3.0.0): + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz} + id: registry.npmmirror.com/d3-transition/3.0.1 + name: d3-transition + version: 3.0.1 + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: registry.npmmirror.com/d3-color@3.1.0 + d3-dispatch: registry.npmmirror.com/d3-dispatch@3.0.1 + d3-ease: registry.npmmirror.com/d3-ease@3.0.1 + d3-interpolate: registry.npmmirror.com/d3-interpolate@3.0.1 + d3-selection: registry.npmmirror.com/d3-selection@3.0.0 + d3-timer: registry.npmmirror.com/d3-timer@3.0.1 + dev: false + + registry.npmmirror.com/d3-voronoi@1.1.4: + resolution: {integrity: sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz} + name: d3-voronoi + version: 1.1.4 + dev: false + + registry.npmmirror.com/d3-zoom@1.8.3: + resolution: {integrity: sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-zoom/-/d3-zoom-1.8.3.tgz} + name: d3-zoom + version: 1.8.3 + dependencies: + d3-dispatch: registry.npmmirror.com/d3-dispatch@1.0.6 + d3-drag: registry.npmmirror.com/d3-drag@1.2.5 + d3-interpolate: registry.npmmirror.com/d3-interpolate@1.4.0 + d3-selection: registry.npmmirror.com/d3-selection@1.4.2 + d3-transition: registry.npmmirror.com/d3-transition@1.3.2 + dev: false + + registry.npmmirror.com/d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz} + name: d3-zoom + version: 3.0.0 + engines: {node: '>=12'} + dependencies: + d3-dispatch: registry.npmmirror.com/d3-dispatch@3.0.1 + d3-drag: registry.npmmirror.com/d3-drag@3.0.0 + d3-interpolate: registry.npmmirror.com/d3-interpolate@3.0.1 + d3-selection: registry.npmmirror.com/d3-selection@3.0.0 + d3-transition: registry.npmmirror.com/d3-transition@3.0.1(d3-selection@3.0.0) + dev: false + + registry.npmmirror.com/d3@5.16.0: + resolution: {integrity: sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3/-/d3-5.16.0.tgz} + name: d3 + version: 5.16.0 + dependencies: + d3-array: registry.npmmirror.com/d3-array@1.2.4 + d3-axis: registry.npmmirror.com/d3-axis@1.0.12 + d3-brush: registry.npmmirror.com/d3-brush@1.1.6 + d3-chord: registry.npmmirror.com/d3-chord@1.0.6 + d3-collection: registry.npmmirror.com/d3-collection@1.0.7 + d3-color: registry.npmmirror.com/d3-color@1.4.1 + d3-contour: registry.npmmirror.com/d3-contour@1.3.2 + d3-dispatch: registry.npmmirror.com/d3-dispatch@1.0.6 + d3-drag: registry.npmmirror.com/d3-drag@1.2.5 + d3-dsv: registry.npmmirror.com/d3-dsv@1.2.0 + d3-ease: registry.npmmirror.com/d3-ease@1.0.7 + d3-fetch: registry.npmmirror.com/d3-fetch@1.2.0 + d3-force: registry.npmmirror.com/d3-force@1.2.1 + d3-format: registry.npmmirror.com/d3-format@1.4.5 + d3-geo: registry.npmmirror.com/d3-geo@1.12.1 + d3-hierarchy: registry.npmmirror.com/d3-hierarchy@1.1.9 + d3-interpolate: registry.npmmirror.com/d3-interpolate@1.4.0 + d3-path: registry.npmmirror.com/d3-path@1.0.9 + d3-polygon: registry.npmmirror.com/d3-polygon@1.0.6 + d3-quadtree: registry.npmmirror.com/d3-quadtree@1.0.7 + d3-random: registry.npmmirror.com/d3-random@1.1.2 + d3-scale: registry.npmmirror.com/d3-scale@2.2.2 + d3-scale-chromatic: registry.npmmirror.com/d3-scale-chromatic@1.5.0 + d3-selection: registry.npmmirror.com/d3-selection@1.4.2 + d3-shape: registry.npmmirror.com/d3-shape@1.3.7 + d3-time: registry.npmmirror.com/d3-time@1.1.0 + d3-time-format: registry.npmmirror.com/d3-time-format@2.3.0 + d3-timer: registry.npmmirror.com/d3-timer@1.0.10 + d3-transition: registry.npmmirror.com/d3-transition@1.3.2 + d3-voronoi: registry.npmmirror.com/d3-voronoi@1.1.4 + d3-zoom: registry.npmmirror.com/d3-zoom@1.8.3 + dev: false + + registry.npmmirror.com/d3@7.8.5: + resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/d3/-/d3-7.8.5.tgz} + name: d3 + version: 7.8.5 + engines: {node: '>=12'} + dependencies: + d3-array: registry.npmmirror.com/d3-array@3.2.4 + d3-axis: registry.npmmirror.com/d3-axis@3.0.0 + d3-brush: registry.npmmirror.com/d3-brush@3.0.0 + d3-chord: registry.npmmirror.com/d3-chord@3.0.1 + d3-color: registry.npmmirror.com/d3-color@3.1.0 + d3-contour: registry.npmmirror.com/d3-contour@4.0.2 + d3-delaunay: registry.npmmirror.com/d3-delaunay@6.0.4 + d3-dispatch: registry.npmmirror.com/d3-dispatch@3.0.1 + d3-drag: registry.npmmirror.com/d3-drag@3.0.0 + d3-dsv: registry.npmmirror.com/d3-dsv@3.0.1 + d3-ease: registry.npmmirror.com/d3-ease@3.0.1 + d3-fetch: registry.npmmirror.com/d3-fetch@3.0.1 + d3-force: registry.npmmirror.com/d3-force@3.0.0 + d3-format: registry.npmmirror.com/d3-format@3.1.0 + d3-geo: registry.npmmirror.com/d3-geo@3.1.0 + d3-hierarchy: registry.npmmirror.com/d3-hierarchy@3.1.2 + d3-interpolate: registry.npmmirror.com/d3-interpolate@3.0.1 + d3-path: registry.npmmirror.com/d3-path@3.1.0 + d3-polygon: registry.npmmirror.com/d3-polygon@3.0.1 + d3-quadtree: registry.npmmirror.com/d3-quadtree@3.0.1 + d3-random: registry.npmmirror.com/d3-random@3.0.1 + d3-scale: registry.npmmirror.com/d3-scale@4.0.2 + d3-scale-chromatic: registry.npmmirror.com/d3-scale-chromatic@3.0.0 + d3-selection: registry.npmmirror.com/d3-selection@3.0.0 + d3-shape: registry.npmmirror.com/d3-shape@3.2.0 + d3-time: registry.npmmirror.com/d3-time@3.1.0 + d3-time-format: registry.npmmirror.com/d3-time-format@4.1.0 + d3-timer: registry.npmmirror.com/d3-timer@3.0.1 + d3-transition: registry.npmmirror.com/d3-transition@3.0.1(d3-selection@3.0.0) + d3-zoom: registry.npmmirror.com/d3-zoom@3.0.0 + dev: false + + registry.npmmirror.com/dagre-d3@0.6.4: + resolution: {integrity: sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dagre-d3/-/dagre-d3-0.6.4.tgz} + name: dagre-d3 + version: 0.6.4 + dependencies: + d3: registry.npmmirror.com/d3@5.16.0 + dagre: registry.npmmirror.com/dagre@0.8.5 + graphlib: registry.npmmirror.com/graphlib@2.1.8 + lodash: registry.npmmirror.com/lodash@4.17.21 + dev: false + + registry.npmmirror.com/dagre@0.8.5: + resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz} + name: dagre + version: 0.8.5 + dependencies: + graphlib: registry.npmmirror.com/graphlib@2.1.8 + lodash: registry.npmmirror.com/lodash@4.17.21 + dev: false + registry.npmmirror.com/damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz} name: damerau-levenshtein @@ -6487,6 +7117,14 @@ packages: vm2: registry.npmmirror.com/vm2@3.9.19 dev: false + registry.npmmirror.com/delaunator@5.0.0: + resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delaunator/-/delaunator-5.0.0.tgz} + name: delaunator + version: 5.0.0 + dependencies: + robust-predicates: registry.npmmirror.com/robust-predicates@3.0.2 + dev: false + registry.npmmirror.com/delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz} name: delayed-stream @@ -6602,6 +7240,12 @@ packages: domelementtype: registry.npmmirror.com/domelementtype@2.3.0 dev: true + registry.npmmirror.com/dompurify@2.3.3: + resolution: {integrity: sha512-dqnqRkPMAjOZE0FogZ+ceJNM2dZ3V/yNOuFB7+39qpO93hHhfRpHw3heYQC7DPK9FqbQTfBKUJhiSfz4MvXYwg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dompurify/-/dompurify-2.3.3.tgz} + name: dompurify + version: 2.3.3 + dev: false + registry.npmmirror.com/domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz} name: domutils @@ -7669,6 +8313,14 @@ packages: version: 1.4.0 dev: false + registry.npmmirror.com/graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz} + name: graphlib + version: 2.1.8 + dependencies: + lodash: registry.npmmirror.com/lodash@4.17.21 + dev: false + registry.npmmirror.com/has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz} name: has-bigints @@ -7916,6 +8568,15 @@ packages: safer-buffer: registry.npmmirror.com/safer-buffer@2.1.2 dev: false + registry.npmmirror.com/iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz} + name: iconv-lite + version: 0.6.3 + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: registry.npmmirror.com/safer-buffer@2.1.2 + dev: false + registry.npmmirror.com/ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz} name: ieee754 @@ -8000,6 +8661,13 @@ packages: side-channel: registry.npmmirror.com/side-channel@1.0.4 dev: true + registry.npmmirror.com/internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz} + name: internmap + version: 2.0.3 + engines: {node: '>=12'} + dev: false + registry.npmmirror.com/invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz} name: invariant @@ -8508,6 +9176,12 @@ packages: commander: registry.npmmirror.com/commander@8.3.0 dev: false + registry.npmmirror.com/khroma@1.4.1: + resolution: {integrity: sha512-+GmxKvmiRuCcUYDgR7g5Ngo0JEDeOsGdNONdU2zsiBQaK4z19Y2NvXqfEDE0ZiIrg45GTZyAnPLVsLZZACYm3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/khroma/-/khroma-1.4.1.tgz} + name: khroma + version: 1.4.1 + dev: false + registry.npmmirror.com/kitx@2.1.0: resolution: {integrity: sha512-C/5v9MtIX7aHGOjwn5BmrrbNkJSf7i0R5mRzmh13GSAdRqQ7bYQo/Su2pTYNylFicqKNTVX3HML9k1u8k51+pQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kitx/-/kitx-2.1.0.tgz} name: kitx @@ -8794,6 +9468,15 @@ packages: mdast-util-to-markdown: registry.npmmirror.com/mdast-util-to-markdown@1.5.0 dev: false + registry.npmmirror.com/mdast-util-newline-to-break@1.0.0: + resolution: {integrity: sha512-491LcYv3gbGhhCrLoeALncQmega2xPh+m3gbsIhVsOX4sw85+ShLFPvPyibxc1Swx/6GtzxgVodq+cGa/47ULg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdast-util-newline-to-break/-/mdast-util-newline-to-break-1.0.0.tgz} + name: mdast-util-newline-to-break + version: 1.0.0 + dependencies: + '@types/mdast': registry.npmmirror.com/@types/mdast@3.0.11 + mdast-util-find-and-replace: registry.npmmirror.com/mdast-util-find-and-replace@2.2.2 + dev: false + registry.npmmirror.com/mdast-util-phrasing@3.0.1: resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz} name: mdast-util-phrasing @@ -8867,6 +9550,22 @@ packages: engines: {node: '>= 8'} dev: true + registry.npmmirror.com/mermaid@8.13.5: + resolution: {integrity: sha512-xLINkCQqZZfqDaLpQVy9BOsws8jT6sLBE2ympDEg4G2uvUu1n61j/h3OFDaA2N4dpZyN7q2pAYkDQ4yywruivA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mermaid/-/mermaid-8.13.5.tgz} + name: mermaid + version: 8.13.5 + dependencies: + '@braintree/sanitize-url': registry.npmmirror.com/@braintree/sanitize-url@3.1.0 + d3: registry.npmmirror.com/d3@7.8.5 + dagre: registry.npmmirror.com/dagre@0.8.5 + dagre-d3: registry.npmmirror.com/dagre-d3@0.6.4 + dompurify: registry.npmmirror.com/dompurify@2.3.3 + graphlib: registry.npmmirror.com/graphlib@2.1.8 + khroma: registry.npmmirror.com/khroma@1.4.1 + moment-mini: registry.npmmirror.com/moment-mini@2.29.4 + stylis: registry.npmmirror.com/stylis@4.2.0 + dev: false + registry.npmmirror.com/micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz} name: micromark-core-commonmark @@ -9254,6 +9953,12 @@ packages: minimist: registry.npmmirror.com/minimist@1.2.8 dev: false + registry.npmmirror.com/moment-mini@2.29.4: + resolution: {integrity: sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/moment-mini/-/moment-mini-2.29.4.tgz} + name: moment-mini + version: 2.29.4 + dev: false + registry.npmmirror.com/mongodb-connection-string-url@2.6.0: resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz} name: mongodb-connection-string-url @@ -10420,6 +11125,16 @@ packages: unified: registry.npmmirror.com/unified@10.1.2 dev: false + registry.npmmirror.com/remark-breaks@3.0.3: + resolution: {integrity: sha512-C7VkvcUp1TPUc2eAYzsPdaUh8Xj4FSbQnYA5A9f80diApLZscTDeG7efiWP65W8hV2sEy3JuGVU0i6qr5D8Hug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/remark-breaks/-/remark-breaks-3.0.3.tgz} + name: remark-breaks + version: 3.0.3 + dependencies: + '@types/mdast': registry.npmmirror.com/@types/mdast@3.0.11 + mdast-util-newline-to-break: registry.npmmirror.com/mdast-util-newline-to-break@1.0.0 + unified: registry.npmmirror.com/unified@10.1.2 + dev: false + registry.npmmirror.com/remark-gfm@3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/remark-gfm/-/remark-gfm-3.0.1.tgz} name: remark-gfm @@ -10522,6 +11237,12 @@ packages: glob: registry.npmmirror.com/glob@7.2.3 dev: true + registry.npmmirror.com/robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.2.tgz} + name: robust-predicates + version: 3.0.2 + dev: false + registry.npmmirror.com/run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/run-applescript/-/run-applescript-5.0.0.tgz} name: run-applescript @@ -10539,6 +11260,12 @@ packages: queue-microtask: registry.npmmirror.com/queue-microtask@1.2.3 dev: true + registry.npmmirror.com/rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz} + name: rw + version: 1.3.3 + dev: false + registry.npmmirror.com/sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz} name: sade diff --git a/client/public/imgs/loading.gif b/client/public/imgs/loading.gif new file mode 100644 index 0000000000..e5e62462d4 Binary files /dev/null and b/client/public/imgs/loading.gif differ diff --git a/client/src/components/Icon/icons/export.svg b/client/src/components/Icon/icons/export.svg new file mode 100644 index 0000000000..cf4cb222e5 --- /dev/null +++ b/client/src/components/Icon/icons/export.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/src/components/Icon/index.tsx b/client/src/components/Icon/index.tsx index 7a55857094..409e190805 100644 --- a/client/src/components/Icon/index.tsx +++ b/client/src/components/Icon/index.tsx @@ -29,7 +29,8 @@ const map = { appStore: require('./icons/appStore.svg').default, menu: require('./icons/menu.svg').default, edit: require('./icons/edit.svg').default, - inform: require('./icons/inform.svg').default + inform: require('./icons/inform.svg').default, + export: require('./icons/export.svg').default }; export type IconName = keyof typeof map; diff --git a/client/src/components/Markdown/Loading.tsx b/client/src/components/Markdown/Loading.tsx new file mode 100644 index 0000000000..ba72b8c601 --- /dev/null +++ b/client/src/components/Markdown/Loading.tsx @@ -0,0 +1,17 @@ +import React, { memo } from 'react'; +import { Box } from '@chakra-ui/react'; + +const Loading = () => { + return ( + + ); +}; + +export default memo(Loading); diff --git a/client/src/components/Markdown/MermaidCodeBlock.tsx b/client/src/components/Markdown/MermaidCodeBlock.tsx index e312e27316..3a71b42811 100644 --- a/client/src/components/Markdown/MermaidCodeBlock.tsx +++ b/client/src/components/Markdown/MermaidCodeBlock.tsx @@ -1,63 +1,99 @@ -import React, { FC, useEffect, useState, useRef } from 'react'; +import React, { useEffect, useRef, memo, useCallback, useState } from 'react'; +import { Box } from '@chakra-ui/react'; +// @ts-ignore import mermaid from 'mermaid'; -import { Spinner } from '@chakra-ui/react'; +import MyIcon from '../Icon'; -interface MermaidCodeBlockProps { - code: string; -} +import styles from './index.module.scss'; -const MermaidCodeBlock: FC = ({ code }) => { - const [svg, setSvg] = useState(null); - const [loading, setLoading] = useState(true); - const codeTimeoutIdRef = useRef(null); +const mermaidAPI = mermaid.mermaidAPI; +mermaidAPI.initialize({ + startOnLoad: false, + theme: 'base', + themeVariables: { + fontSize: '14px', + primaryColor: '#d6e8ff', + primaryTextColor: '#485058', + primaryBorderColor: '#fff', + lineColor: '#5A646E', + secondaryColor: '#B5E9E5', + tertiaryColor: '#485058' + } +}); + +const MermaidBlock = ({ code }: { code: string }) => { + const dom = useRef(null); + const [svg, setSvg] = useState(''); useEffect(() => { - if (codeTimeoutIdRef.current) { - clearTimeout(codeTimeoutIdRef.current); + try { + mermaidAPI.render('mermaid-svg', code, (svgCode: string) => { + setSvg(svgCode); + }); + } catch (error) { + console.log(error); } - - codeTimeoutIdRef.current = window.setTimeout(() => { - setLoading(true); - - const mermaidAPI = (mermaid as any).mermaidAPI as any; - mermaidAPI.initialize({ startOnLoad: false, theme: 'forest' }); - - try { - mermaidAPI.parse(code); - mermaidAPI.render('mermaid-svg', code, (svgCode: string) => { - setSvg(svgCode); - setLoading(false); - }); - } catch (error) { - console.error('Error parsing Mermaid code:', '\n', error, '\n', 'Code:', code); - setLoading(false); - return; - } - }, 1000); }, [code]); - useEffect(() => { - return () => { - if (codeTimeoutIdRef.current) { - clearTimeout(codeTimeoutIdRef.current); - } + const onclickExport = useCallback(() => { + const svg = dom.current?.children[0]; + if (!svg) return; + + const w = svg.clientWidth * 4; + const h = svg.clientHeight * 4; + + const canvas = document.createElement('canvas'); + canvas.width = w; + canvas.height = h; + const ctx = canvas.getContext('2d'); + if (!ctx) return; + // 绘制白色背景 + ctx.fillStyle = '#fff'; + ctx.fillRect(0, 0, w, h); + + const img = new Image(); + img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(dom.current.innerHTML)}`; + + img.onload = () => { + ctx.drawImage(img, 0, 0, w, h); + + const jpgDataUrl = canvas.toDataURL('image/jpeg', 1); + const a = document.createElement('a'); + a.href = jpgDataUrl; + a.download = 'mermaid.jpg'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + }; + img.onerror = (e) => { + console.log(e); }; }, []); return ( - <> - {loading ? ( -
- Loading... -
- ) : ( -
- )} - + + + + ); }; -export default MermaidCodeBlock; +export default memo(MermaidBlock); diff --git a/client/src/components/Markdown/codeLight.ts b/client/src/components/Markdown/codeLight.tsx similarity index 76% rename from client/src/components/Markdown/codeLight.ts rename to client/src/components/Markdown/codeLight.tsx index 460e35305d..d9dea74cce 100644 --- a/client/src/components/Markdown/codeLight.ts +++ b/client/src/components/Markdown/codeLight.tsx @@ -1,5 +1,10 @@ import React from 'react'; -export const codeLight: { [key: string]: React.CSSProperties } = { +import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; +import { Box, Flex, useColorModeValue } from '@chakra-ui/react'; +import Icon from '@/components/Icon'; +import { useCopyData } from '@/utils/tools'; + +const codeLight: { [key: string]: React.CSSProperties } = { 'code[class*=language-]': { color: '#d4d4d4', textShadow: 'none', @@ -277,3 +282,51 @@ export const codeLight: { [key: string]: React.CSSProperties } = { zIndex: '0' } }; + +const CodeLight = ({ + children, + className, + inline, + match, + ...props +}: { + children: React.ReactNode & React.ReactNode[]; + className?: string; + inline?: boolean; + match: RegExpExecArray | null; +}) => { + const { copyData } = useCopyData(); + + if (!inline && match) { + return ( + + + {match?.[1]} + copyData(String(children))} alignItems={'center'}> + + 复制 + + + + {String(children)} + + + ); + } + + return ( + + {children} + + ); +}; + +export default React.memo(CodeLight); diff --git a/client/src/components/Markdown/index.module.scss b/client/src/components/Markdown/index.module.scss index 9b9c8047ea..e7d8d89bd8 100644 --- a/client/src/components/Markdown/index.module.scss +++ b/client/src/components/Markdown/index.module.scss @@ -416,3 +416,12 @@ } } } + +.mermaid { + overflow-x: auto; + + svg { + height: auto !important; + width: auto; + } +} diff --git a/client/src/components/Markdown/index.tsx b/client/src/components/Markdown/index.tsx index 1a2b43c5f8..b4b1b82228 100644 --- a/client/src/components/Markdown/index.tsx +++ b/client/src/components/Markdown/index.tsx @@ -1,17 +1,16 @@ import React, { memo, useMemo, useEffect } from 'react'; import ReactMarkdown from 'react-markdown'; -import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { Box, Flex, useColorModeValue } from '@chakra-ui/react'; -import { useCopyData, formatLinkText } from '@/utils/tools'; -import Icon from '@/components/Icon'; +import { formatLinkText } from '@/utils/tools'; import remarkGfm from 'remark-gfm'; import remarkMath from 'remark-math'; +import remarkBreaks from 'remark-breaks'; import rehypeKatex from 'rehype-katex'; -import MermaidCodeBlock from './MermaidCodeBlock'; import 'katex/dist/katex.min.css'; import styles from './index.module.scss'; -import { codeLight } from './codeLight'; +import CodeLight from './codeLight'; +import Loading from './Loading'; +import MermaidCodeBlock from './MermaidCodeBlock'; const Markdown = ({ source, @@ -22,8 +21,6 @@ const Markdown = ({ formatLink?: boolean; isChatting?: boolean; }) => { - const { copyData } = useCopyData(); - const formatSource = useMemo(() => { return formatLink ? formatLinkText(source) : source; }, [source, formatLink]); @@ -31,53 +28,25 @@ const Markdown = ({ return ( ; + if (match?.[1] === 'mermaid') { + return isChatting ? : ; } - return !inline && match ? ( - - - {match?.[1]} - copyData(code)} alignItems={"center"}> - - 复制代码 - - - - {code} - - - ) : ( - + return ( + {children} - + ); - }, + } }} linkTarget="_blank" > diff --git a/client/src/types/mermaid.d.ts b/client/src/types/mermaid.d.ts deleted file mode 100644 index a303d0259c..0000000000 --- a/client/src/types/mermaid.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -declare module "mermaid" { - import mermaidAPI from "mermaid"; - const mermaid: any; - export default mermaid; - - // 扩展 mermaidAPI - interface MermaidAPI extends mermaidAPI.mermaidAPI { - contentLoaded: ( - targetEl: Element, - options?: mermaidAPI.mermaidAPI.Config - ) => void; - } - - const mermaidAPIInstance: MermaidAPI; - export default mermaidAPIInstance; - } -type Dispatch = (action: Action) => void; - - \ No newline at end of file