diff --git a/package.json b/package.json index 47db9519..ecdfaf1c 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "dependencies": { "@ant-design/icons": "^5.5.1", "@ant-design/pro-components": "^2.7.19", + "@braintree/sanitize-url": "^7.1.1", "@huggingface/gguf": "^0.1.7", "@huggingface/hub": "^0.15.1", "@huggingface/tasks": "^0.11.6", @@ -48,7 +49,6 @@ "lodash": "^4.17.21", "mammoth": "^1.8.0", "marked": "^14.1.0", - "marked-katex-extension": "^5.1.4", "ml-dataset-iris": "^1.2.1", "ml-pca": "^4.1.1", "numeral": "^2.0.6", @@ -64,7 +64,10 @@ "react-hotkeys-hook": "^4.5.0", "react-markdown": "^9.0.3", "rehype-katex": "^7.0.1", + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", "simplebar-react": "^3.2.6", + "styled-components": "^6.1.15", "umi-presets-pro": "^2.0.3", "wavesurfer.js": "^7.8.8", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d4cf34e..792715f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ dependencies: '@ant-design/pro-components': specifier: ^2.7.19 version: 2.7.19(antd@5.21.6)(rc-field-form@2.7.0)(react-dom@18.2.0)(react@18.2.0) + '@braintree/sanitize-url': + specifier: ^7.1.1 + version: 7.1.1 '@huggingface/gguf': specifier: ^0.1.7 version: 0.1.7 @@ -107,9 +110,6 @@ dependencies: marked: specifier: ^14.1.0 version: 14.1.0 - marked-katex-extension: - specifier: ^5.1.4 - version: 5.1.4(katex@0.16.21)(marked@14.1.0) ml-dataset-iris: specifier: ^1.2.1 version: 1.2.1 @@ -155,9 +155,18 @@ dependencies: rehype-katex: specifier: ^7.0.1 version: 7.0.1 + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 simplebar-react: specifier: ^3.2.6 version: 3.2.6(react@18.2.0) + styled-components: + specifier: ^6.1.15 + version: 6.1.15(react-dom@18.2.0)(react@18.2.0) umi-presets-pro: specifier: ^2.0.3 version: 2.0.3(@babel/core@7.26.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(antd@5.21.6)(dva@2.5.0-beta.2)(rc-field-form@2.7.0)(react-dom@18.2.0)(react@18.2.0)(umi@4.4.1) @@ -430,7 +439,7 @@ packages: dependencies: '@ant-design/colors': 6.0.0 '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 lodash: 4.17.21 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) @@ -977,7 +986,7 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 json2mq: 0.2.0 react: 18.2.0 @@ -3009,6 +3018,10 @@ packages: resolution: {integrity: sha512-h0OYmPR3A5Dfbetra/GzxBAzQk8sH7LhRkRUTdagX6nrtlUgJGYCTv4bBK33jsTQw9HDd8PE2x1Ma+iRKEDUsw==, tarball: https://registry.npmjs.org/@bloomberg/record-tuple-polyfill/-/record-tuple-polyfill-0.0.4.tgz} dev: false + /@braintree/sanitize-url@7.1.1: + resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==, tarball: https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz} + dev: false + /@chenshuai2144/sketch-color@1.0.9(react@18.2.0): resolution: {integrity: sha512-obzSy26cb7Pm7OprWyVpgMpIlrZpZ0B7vbrU0RMbvRg0YAI890S5Xy02Aj1Nhl4+KTbi1lVYHt6HQP8Hm9s+1w==, tarball: https://registry.npmjs.org/@chenshuai2144/sketch-color/-/sketch-color-1.0.9.tgz} peerDependencies: @@ -3344,7 +3357,7 @@ packages: dev: false /@emotion/is-prop-valid@1.2.2: - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} + resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==, tarball: https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz} dependencies: '@emotion/memoize': 0.8.1 dev: false @@ -3408,7 +3421,7 @@ packages: dev: false /@emotion/unitless@0.8.1: - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==, tarball: https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz} dev: false /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): @@ -4436,7 +4449,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 hoist-non-react-statics: 3.3.2 react: 18.1.0 react-is: 16.13.1 @@ -4448,7 +4461,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 react-is: 16.13.1 @@ -4460,7 +4473,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 react-is: 16.13.1 @@ -4724,8 +4737,8 @@ packages: fast-glob: 3.3.2 is-glob: 4.0.3 open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 + picocolors: 1.1.1 + tslib: 2.8.1 dev: false /@polka/url@1.0.0-next.28: @@ -4735,7 +4748,7 @@ packages: /@radix-ui/popper@0.0.10: resolution: {integrity: sha512-YFKuPqQPKscreQid7NuB4it3PMzSwGg03vgrud6sVliHkI43QNAOHyrHyMNo015jg6QK5GVDn+7J2W5uygqSGA==, tarball: https://registry.npmjs.org/@radix-ui/popper/-/popper-0.0.10.tgz} dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 csstype: 3.1.3 dev: false @@ -5088,7 +5101,7 @@ packages: /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==, tarball: https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: false /@tanstack/match-sorter-utils@8.15.1: @@ -5244,7 +5257,7 @@ packages: /@types/hoist-non-react-statics@3.3.5: resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.16 hoist-non-react-statics: 3.3.2 dev: false @@ -5323,7 +5336,7 @@ packages: /@types/mdast@4.0.4: resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==, tarball: https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 3.0.3 dev: false /@types/minimatch@5.1.2: @@ -5379,7 +5392,7 @@ packages: resolution: {integrity: sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==, tarball: https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.33.tgz} dependencies: '@types/hoist-non-react-statics': 3.3.5 - '@types/react': 18.3.1 + '@types/react': 18.3.16 hoist-non-react-statics: 3.3.2 redux: 4.2.1 dev: false @@ -5429,6 +5442,10 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: false + /@types/stylis@4.2.5: + resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==, tarball: https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz} + dev: false + /@types/stylis@4.2.6: resolution: {integrity: sha512-4nebF2ZJGzQk0ka0O6+FZUWceyFv4vWq/0dXBMmrSeAwzOuOd/GxE5Pa64d/ndeNLG73dXoBsRzvtsVsYUv6Uw==} dev: false @@ -5881,9 +5898,9 @@ packages: '@umijs/bundler-utils': 4.2.11 '@umijs/utils': 4.2.11 enhanced-resolve: 5.9.3 - postcss: 8.4.38 - postcss-flexbugs-fixes: 5.0.2(postcss@8.4.38) - postcss-preset-env: 7.5.0(postcss@8.4.38) + postcss: 8.4.49 + postcss-flexbugs-fixes: 5.0.2(postcss@8.4.49) + postcss-preset-env: 7.5.0(postcss@8.4.49) transitivePeerDependencies: - supports-color dev: false @@ -6289,7 +6306,7 @@ packages: /@umijs/history@5.3.1: resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==, tarball: https://registry.npmjs.org/@umijs/history/-/history-5.3.1.tgz} dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 query-string: 6.14.1 dev: false @@ -7356,7 +7373,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 dayjs: 1.11.11 intersection-observer: 0.12.2 js-cookie: 2.2.1 @@ -7717,7 +7734,7 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==, tarball: https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz} engines: {node: '>=10'} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: false /array-buffer-byte-length@1.0.1: @@ -7974,7 +7991,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: false @@ -8364,7 +8381,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==, tarball: https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz} dependencies: pascal-case: 3.1.2 - tslib: 2.6.2 + tslib: 2.8.1 dev: false /camelcase-keys@6.2.2: @@ -8387,7 +8404,7 @@ packages: dev: false /camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==, tarball: https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz} dev: false /caniuse-lite@1.0.30001689: @@ -8963,7 +8980,7 @@ packages: dev: false /css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==, tarball: https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz} engines: {node: '>=4'} dev: false @@ -9000,12 +9017,12 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.49) + postcss-modules-scope: 3.2.0(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.2 webpack: 5.97.1 @@ -9065,7 +9082,7 @@ packages: dev: false /css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==, tarball: https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz} dependencies: camelize: 1.0.1 css-color-keywords: 1.0.0 @@ -9501,7 +9518,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, tarball: https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 dev: false /driver.js@1.3.1: @@ -9553,7 +9570,7 @@ packages: peerDependencies: redux: 4.x dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 flatten: 1.0.3 global: 4.4.0 invariant: 2.2.4 @@ -9568,7 +9585,7 @@ packages: peerDependencies: dva: ^2.5.0-0 dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 dva: 2.5.0-beta.2(react-dom@18.2.0)(react@18.2.0) immer: 9.0.21 dev: false @@ -9578,7 +9595,7 @@ packages: peerDependencies: dva-core: ^1.1.0 || ^1.5.0-0 || ^1.6.0-0 dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 dva-core: 2.0.4(redux@4.2.1) dev: false @@ -10052,6 +10069,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz} + engines: {node: '>=12'} + dev: false + /eslint-ast-utils@1.1.0: resolution: {integrity: sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==, tarball: https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz} engines: {node: '>=4'} @@ -11582,7 +11604,7 @@ packages: /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 dev: false /hmac-drbg@1.0.1: @@ -11784,6 +11806,16 @@ packages: postcss: ^8.1.0 dependencies: postcss: 8.4.38 + dev: true + + /icss-utils@5.1.0(postcss@8.4.49): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==, tarball: https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.49 + dev: false /identity-obj-proxy@3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==, tarball: https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz} @@ -11830,7 +11862,7 @@ packages: /import-html-entry@1.15.2: resolution: {integrity: sha512-XXtXpGAq811qBgFVdOU6LoOC67rirwv7qwz/zuz1KxbpAM7QYX6kMvELOdSfhjZ9ntQnsdEOXT2zV7xMYaky6w==} dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 dev: false /import-lazy@4.0.0: @@ -12628,7 +12660,7 @@ packages: dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: errno: 0.1.8 graceful-fs: 4.2.11 @@ -12646,7 +12678,7 @@ packages: dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: errno: 0.1.8 graceful-fs: 4.2.11 @@ -12942,7 +12974,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, tarball: https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz} dependencies: - tslib: 2.6.2 + tslib: 2.8.1 dev: false /lru-cache@10.2.2: @@ -13026,14 +13058,8 @@ packages: engines: {node: '>=8'} dev: false - /marked-katex-extension@5.1.4(katex@0.16.21)(marked@14.1.0): - resolution: {integrity: sha512-GQOio4vCp0laxB1IY+2oNVo5nbn82yWMDP/jILRYHmyu2WXMVlXCB+krq2/U2fQn+V9j8aqDmnNdrsgqG2AkGQ==, tarball: https://registry.npmjs.org/marked-katex-extension/-/marked-katex-extension-5.1.4.tgz} - peerDependencies: - katex: '>=0.16 <0.17' - marked: '>=4 <16' - dependencies: - katex: 0.16.21 - marked: 14.1.0 + /markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==, tarball: https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz} dev: false /marked@14.1.0: @@ -13057,6 +13083,15 @@ packages: safe-buffer: 5.2.1 dev: false + /mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==, tarball: https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz} + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + /mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==, tarball: https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz} dependencies: @@ -13088,6 +13123,89 @@ packages: - supports-color dev: false + /mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==, tarball: https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz} + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + dev: false + + /mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==, tarball: https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==, tarball: https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==, tarball: https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==, tarball: https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==, tarball: https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz} + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==, tarball: https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /mdast-util-mdx-expression@2.0.1: resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==, tarball: https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz} dependencies: @@ -13287,6 +13405,90 @@ packages: micromark-util-types: 2.0.1 dev: false + /micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==, tarball: https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz} + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + dev: false + + /micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==, tarball: https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + dev: false + + /micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==, tarball: https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + dev: false + + /micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==, tarball: https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + dev: false + + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==, tarball: https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz} + dependencies: + micromark-util-types: 2.0.1 + dev: false + + /micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==, tarball: https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + dev: false + + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==, tarball: https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz} + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.1 + dev: false + + /micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==, tarball: https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz} + dependencies: + '@types/katex': 0.16.7 + devlop: 1.1.0 + katex: 0.16.21 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + dev: false + /micromark-factory-destination@2.0.1: resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==, tarball: https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz} dependencies: @@ -13738,7 +13940,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, tarball: https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz} dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.8.1 dev: false /node-abort-controller@3.1.1: @@ -14238,7 +14440,7 @@ packages: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==, tarball: https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz} dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 dev: false /parent-module@1.0.1: @@ -14311,7 +14513,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==, tarball: https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz} dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 dev: false /path-browserify@0.0.1: @@ -14723,14 +14925,6 @@ packages: postcss-value-parser: 4.2.0 dev: false - /postcss-flexbugs-fixes@5.0.2(postcss@8.4.38): - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==, tarball: https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz} - peerDependencies: - postcss: ^8.1.4 - dependencies: - postcss: 8.4.38 - dev: false - /postcss-flexbugs-fixes@5.0.2(postcss@8.4.49): resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==, tarball: https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz} peerDependencies: @@ -14942,6 +15136,16 @@ packages: postcss: ^8.1.0 dependencies: postcss: 8.4.38 + dev: true + + /postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==, tarball: https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.49 + dev: false /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==, tarball: https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz} @@ -14953,6 +15157,19 @@ packages: postcss: 8.4.38 postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-local-by-default@4.0.5(postcss@8.4.49): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==, tarball: https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 6.0.16 + postcss-value-parser: 4.2.0 + dev: false /postcss-modules-scope@3.2.0(postcss@8.4.38): resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==, tarball: https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz} @@ -14962,6 +15179,17 @@ packages: dependencies: postcss: 8.4.38 postcss-selector-parser: 6.0.16 + dev: true + + /postcss-modules-scope@3.2.0(postcss@8.4.49): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==, tarball: https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.0.16 + dev: false /postcss-modules-values@4.0.0(postcss@8.4.38): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==, tarball: https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz} @@ -14971,6 +15199,17 @@ packages: dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 + dev: true + + /postcss-modules-values@4.0.0(postcss@8.4.49): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==, tarball: https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + dev: false /postcss-nesting@10.2.0(postcss@8.4.38): resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==, tarball: https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz} @@ -15598,7 +15837,7 @@ packages: /qiankun@2.10.16: resolution: {integrity: sha512-Q3tSVUrPnzx8ckEOKIoPnhb5LE28FPKyan/r6jEuGJGqTbIy+3rp6E2/KfU82ZI4yZpef9LFTrnxdj49jAEsmw==} dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 import-html-entry: 1.15.2 lodash: 4.17.21 single-spa: 5.9.5 @@ -15709,7 +15948,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 dom-align: 1.12.4 rc-util: 5.43.0(react-dom@18.2.0)(react@18.2.0) @@ -15757,7 +15996,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 array-tree-filter: 2.1.0 classnames: 2.5.1 rc-select: 14.1.18(react-dom@18.2.0)(react@18.2.0) @@ -15782,7 +16021,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -15820,7 +16059,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) @@ -15849,7 +16088,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) @@ -15879,7 +16118,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) @@ -15909,7 +16148,7 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-trigger: 5.3.4(react-dom@18.2.0)(react@18.2.0) rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) @@ -15938,7 +16177,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 async-validator: 4.2.5 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -15985,7 +16224,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-dialog: 9.0.2(react-dom@18.2.0)(react@18.2.0) @@ -16017,7 +16256,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16045,7 +16284,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16071,7 +16310,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-menu: 9.8.4(react-dom@18.2.0)(react@18.2.0) rc-textarea: 0.4.7(react-dom@18.2.0)(react@18.2.0) @@ -16120,7 +16359,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) @@ -16136,7 +16375,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.43.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16163,7 +16402,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) @@ -16206,7 +16445,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -16232,7 +16471,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 date-fns: 2.30.0 dayjs: 1.11.11 @@ -16281,7 +16520,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16322,7 +16561,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16363,7 +16602,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) rc-util: 5.43.0(react-dom@18.2.0)(react@18.2.0) @@ -16392,7 +16631,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) @@ -16428,7 +16667,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16472,7 +16711,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16508,7 +16747,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16535,7 +16774,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) @@ -16568,7 +16807,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-dropdown: 4.0.1(react-dom@18.2.0)(react@18.2.0) rc-menu: 9.8.4(react-dom@18.2.0)(react@18.2.0) @@ -16603,7 +16842,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) @@ -16644,7 +16883,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-trigger: 5.3.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16685,7 +16924,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-select: 14.1.18(react-dom@18.2.0)(react@18.2.0) rc-tree: 5.7.12(react-dom@18.2.0)(react@18.2.0) @@ -16701,7 +16940,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) @@ -16748,7 +16987,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-align: 4.0.15(react-dom@18.2.0)(react@18.2.0) rc-motion: 2.9.2(react-dom@18.2.0)(react@18.2.0) @@ -16763,7 +17002,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 classnames: 2.5.1 rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -16898,7 +17137,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 invariant: 2.2.4 prop-types: 15.8.1 react: 18.1.0 @@ -16913,7 +17152,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 invariant: 2.2.4 prop-types: 15.8.1 react: 18.2.0 @@ -16928,7 +17167,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 @@ -17047,7 +17286,7 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 '@types/react-redux': 7.1.33 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -17078,7 +17317,7 @@ packages: redux: optional: true dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 '@types/hoist-non-react-statics': 3.3.5 '@types/react': 18.3.1 '@types/react-dom': 18.3.0 @@ -17327,7 +17566,7 @@ packages: /redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 dev: false /reflect.getprototypeof@1.0.6: @@ -17432,6 +17671,30 @@ packages: engines: {node: '>= 0.10'} dev: false + /remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==, tarball: https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==, tarball: https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + dev: false + /remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==, tarball: https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz} dependencies: @@ -17461,6 +17724,14 @@ packages: vfile: 6.0.3 dev: false + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==, tarball: https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + dev: false + /remark-stringify@9.0.1: resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==, tarball: https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz} dependencies: @@ -18054,7 +18325,7 @@ packages: dev: false /shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==, tarball: https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz} dev: false /shebang-command@2.0.0: @@ -18558,7 +18829,7 @@ packages: dev: false /styled-components@6.1.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ==} + resolution: {integrity: sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ==, tarball: https://registry.npmjs.org/styled-components/-/styled-components-6.1.1.tgz} engines: {node: '>= 16'} peerDependencies: react: '>= 16.8.0' @@ -18577,6 +18848,26 @@ packages: tslib: 2.6.2 dev: false + /styled-components@6.1.15(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PpOTEztW87Ua2xbmLa7yssjNyUF9vE7wdldRfn1I2E6RTkqknkBYpj771OxM/xrvRGinLy2oysa7GOd7NcZZIA==, tarball: https://registry.npmjs.org/styled-components/-/styled-components-6.1.15.tgz} + engines: {node: '>= 16'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + dependencies: + '@emotion/is-prop-valid': 1.2.2 + '@emotion/unitless': 0.8.1 + '@types/stylis': 4.2.5 + css-to-react-native: 3.2.0 + csstype: 3.1.3 + postcss: 8.4.49 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + shallowequal: 1.1.0 + stylis: 4.3.2 + tslib: 2.6.2 + dev: false + /stylelint-config-css-modules@2.3.0(stylelint@13.13.1): resolution: {integrity: sha512-nSxwaJMv9wBrTAi+O4qXubyi1AR9eB36tJpY0uaFhKgEc3fwWGUzUK1Edl8AQHAoU7wmUeKtsuYjblyRP/V7rw==, tarball: https://registry.npmjs.org/stylelint-config-css-modules/-/stylelint-config-css-modules-2.3.0.tgz} peerDependencies: @@ -18769,7 +19060,7 @@ packages: dev: false /stylis@4.3.2: - resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==, tarball: https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz} dev: false /stylis@4.3.4: @@ -18886,7 +19177,7 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.4.2 - tslib: 2.6.2 + tslib: 2.8.1 dev: false /synckit@0.9.0: @@ -19121,7 +19412,7 @@ packages: dev: false /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, tarball: https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz} /tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, tarball: https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz} @@ -19814,7 +20105,7 @@ packages: dependencies: esbuild: 0.18.20 less: 4.1.3 - postcss: 8.4.38 + postcss: 8.4.49 rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 @@ -19850,7 +20141,7 @@ packages: dependencies: esbuild: 0.18.20 less: 4.2.1 - postcss: 8.4.38 + postcss: 8.4.49 rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 diff --git a/src/assets/styles/common.less b/src/assets/styles/common.less index 0dbff123..712f92df 100644 --- a/src/assets/styles/common.less +++ b/src/assets/styles/common.less @@ -82,6 +82,10 @@ padding-left: 8px; } +.m-t-6 { + margin-top: 6px; +} + .flex { display: flex; } diff --git a/src/components/highlight-code/code-viewer.tsx b/src/components/highlight-code/code-viewer.tsx index d817509d..93f09185 100644 --- a/src/components/highlight-code/code-viewer.tsx +++ b/src/components/highlight-code/code-viewer.tsx @@ -1,6 +1,7 @@ import classNames from 'classnames'; import hljs from 'highlight.js'; import { memo, useMemo } from 'react'; +import styled from 'styled-components'; import CopyButton from '../copy-button'; import { escapeHtml } from './utils'; @@ -15,9 +16,64 @@ interface CodeViewerProps { theme?: 'light' | 'dark'; style?: React.CSSProperties; } + +interface CodeHeaderProps { + copyValue: string; + copyable: boolean; + lang: string; + theme: 'light' | 'dark'; +} + +const CodeHeaderWrapper = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + height: 32px; + padding: 0 12px; + font-size: 12px; + color: var(--ant-color-text-tertiary); + background-color: #fafafa; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + &.dark { + background-color: #383838; + color: rgba(255, 255, 255, 0.65); + } +`; + +const Wrapper = styled.div` + border-radius: var(--border-radius-mini); +`; + +const CodeHeader: React.FC = ({ + copyValue, + lang, + theme, + copyable +}) => { + if (!copyable) { + return null; + } + return ( + + {lang} + + + ); +}; + const CodeViewer: React.FC = (props) => { const { - code, + code = '', copyValue, lang, autodetect = true, @@ -63,38 +119,39 @@ const CodeViewer: React.FC = (props) => { }, [code, lang, autodetect, ignoreIllegals]); return ( -
-      
+      
+      

-      {copyable && (
-        
-      )}
-    
+ > + +
+ ); }; diff --git a/src/components/highlight-code/styles/index.less b/src/components/highlight-code/styles/index.less index 5d21a02f..c2fc3f4a 100644 --- a/src/components/highlight-code/styles/index.less +++ b/src/components/highlight-code/styles/index.less @@ -41,8 +41,8 @@ .code-pre { padding-inline: 12px 12px; + border-radius: 0 0 var(--border-radius-mini) var(--border-radius-mini); position: relative; - border-radius: var(--border-radius-mini); code { line-height: 1.5; diff --git a/src/components/markdown-viewer/full-markdown.tsx b/src/components/markdown-viewer/full-markdown.tsx new file mode 100644 index 00000000..ef1060a9 --- /dev/null +++ b/src/components/markdown-viewer/full-markdown.tsx @@ -0,0 +1,71 @@ +import { sanitizeUrl } from '@braintree/sanitize-url'; +import 'katex/dist/katex.min.css'; +import React, { useMemo } from 'react'; +import ReactMarkdown from 'react-markdown'; +import rehypeKatex from 'rehype-katex'; +import remarkGfm from 'remark-gfm'; +import remarkMath from 'remark-math'; +import styled from 'styled-components'; +import HighlightCode from '../highlight-code'; +import './index.less'; +import { escapeBrackets, escapeDollarNumber, escapeMhchem } from './utils'; + +interface FullMarkdownProps { + content: string; + theme?: 'light' | 'dark'; +} + +const Wrapper = styled.div.attrs(() => ({ + className: 'markdown-viewer' +}))` + line-height: 2; +`; + +const CodeViewer = (props: any) => { + const { children, className, node, theme, ...rest } = props; + const match = /language-(\w+)/.exec(className || ''); + return match ? ( + + ) : ( + + {children} + + ); +}; + +const FullMarkdown: React.FC = ({ + content, + theme = 'light' +}) => { + const escapedContent = useMemo(() => { + return escapeMhchem(escapeBrackets(escapeDollarNumber(content))); + }, [content]); + + return ( + + ; + }, + a: ({ href, children, ...props }) => ( + + {children} + + ) + }} + > + {escapedContent} + + + ); +}; + +export default FullMarkdown; diff --git a/src/components/markdown-viewer/index.less b/src/components/markdown-viewer/index.less index 13bae402..b796848b 100644 --- a/src/components/markdown-viewer/index.less +++ b/src/components/markdown-viewer/index.less @@ -22,6 +22,7 @@ font-weight: 700; font-weight: var(--font-weight-bold); font-size: var(--font-size-small); + margin-top: 1em; } .hj-wrapper { diff --git a/src/components/markdown-viewer/index.tsx b/src/components/markdown-viewer/index.tsx index e5641de7..9de57be2 100644 --- a/src/components/markdown-viewer/index.tsx +++ b/src/components/markdown-viewer/index.tsx @@ -1,4 +1,5 @@ import { EyeOutlined } from '@ant-design/icons'; +import { sanitizeUrl } from '@braintree/sanitize-url'; import { Checkbox, Image, Typography } from 'antd'; import { unescape } from 'lodash'; import { TokensList, marked } from 'marked'; @@ -52,7 +53,8 @@ const MarkdownViewer: React.FC = ({ }, []); const generateImgSrc = useCallback( - (src: string | null) => { + (url: string | null) => { + const src = sanitizeUrl(url || ''); if (!src) { return ''; } @@ -186,6 +188,11 @@ const MarkdownViewer: React.FC = ({ return; } const imgs = document.querySelectorAll('.markdown-viewer img'); + const links = document.querySelectorAll('.markdown-viewer a'); + links.forEach((link) => { + // set target blank for all links + link.setAttribute('target', '_blank'); + }); imgs.forEach((img) => { const src = img.getAttribute('src'); img.setAttribute('src', generateImgSrc(src)); diff --git a/src/components/markdown-viewer/utils.ts b/src/components/markdown-viewer/utils.ts index fc1128de..a9b367a6 100644 --- a/src/components/markdown-viewer/utils.ts +++ b/src/components/markdown-viewer/utils.ts @@ -14,3 +14,42 @@ export const unescape = (str = '') => { ? str.replace(reEscapedHtml, (entity) => htmlUnescapes[entity] || "'") : str; }; + +export function escapeDollarNumber(text: string) { + let escapedText = ''; + + for (let i = 0; i < text.length; i += 1) { + let char = text[i]; + const nextChar = text[i + 1] || ' '; + + if (char === '$' && nextChar >= '0' && nextChar <= '9') { + char = '\\$'; + } + + escapedText += char; + } + + return escapedText; +} + +export function escapeBrackets(text: string) { + const pattern = + /(```[\S\s]*?```|`.*?`)|\\\[([\S\s]*?[^\\])\\]|\\\((.*?)\\\)/g; + return text.replaceAll( + pattern, + (match, codeBlock, squareBracket, roundBracket) => { + if (codeBlock) { + return codeBlock; + } else if (squareBracket) { + return `$$${squareBracket}$$`; + } else if (roundBracket) { + return `$${roundBracket}$`; + } + return match; + } + ); +} + +export function escapeMhchem(text: string) { + return text.replaceAll('$\\ce{', '$\\\\ce{').replaceAll('$\\pu{', '$\\\\pu{'); +} diff --git a/src/pages/llmodels/components/table-list.tsx b/src/pages/llmodels/components/table-list.tsx index 88a49621..5b4e8101 100644 --- a/src/pages/llmodels/components/table-list.tsx +++ b/src/pages/llmodels/components/table-list.tsx @@ -516,15 +516,19 @@ const Models: React.FC = ({ ); const getModelInstances = async (row: any, options?: any) => { - const params = { - id: row.id, - page: 1, - perPage: 100 - }; - const data = await queryModelInstancesList(params, { - token: options?.token - }); - return data.items || []; + try { + const params = { + id: row.id, + page: 1, + perPage: 100 + }; + const data = await queryModelInstancesList(params, { + token: options?.token + }); + return data.items || []; + } catch (error) { + return []; + } }; const generateChildrenRequestAPI = (params: any) => { diff --git a/src/pages/playground/apis/index.ts b/src/pages/playground/apis/index.ts index d51ac7de..8f76d852 100644 --- a/src/pages/playground/apis/index.ts +++ b/src/pages/playground/apis/index.ts @@ -1,19 +1,21 @@ import { request } from '@umijs/max'; -export const CHAT_API = '/v1-openai/chat/completions'; +export const OPENAI_COMPATIBLE = 'v1-openai'; -export const CREAT_IMAGE_API = '/v1-openai/images/generations'; -export const EDIT_IMAGE_API = '/v1-openai/images/edits'; +export const CHAT_API = `/${OPENAI_COMPATIBLE}/chat/completions`; -export const EMBEDDING_API = '/v1-openai/embeddings'; +export const CREAT_IMAGE_API = `/${OPENAI_COMPATIBLE}/images/generations`; +export const EDIT_IMAGE_API = `/${OPENAI_COMPATIBLE}/images/edits`; -export const OPENAI_MODELS = '/v1-openai/models'; +export const EMBEDDING_API = `/${OPENAI_COMPATIBLE}/embeddings`; + +export const OPENAI_MODELS = `/${OPENAI_COMPATIBLE}/models`; export const RERANKER_API = '/rerank'; -export const AUDIO_TEXT_TO_SPEECH_API = '/v1-openai/audio/speech'; +export const AUDIO_TEXT_TO_SPEECH_API = `/${OPENAI_COMPATIBLE}/audio/speech`; -export const AUDIO_SPEECH_TO_TEXT_API = '/v1-openai/audio/transcriptions'; +export const AUDIO_SPEECH_TO_TEXT_API = `/${OPENAI_COMPATIBLE}/audio/transcriptions`; export async function execChatCompletions(params: any) { return request(`${CHAT_API}`, { diff --git a/src/pages/playground/components/ground-embedding.tsx b/src/pages/playground/components/ground-embedding.tsx index 0e469da7..b38342ac 100644 --- a/src/pages/playground/components/ground-embedding.tsx +++ b/src/pages/playground/components/ground-embedding.tsx @@ -31,7 +31,7 @@ import { useState } from 'react'; import { useHotkeys } from 'react-hotkeys-hook'; -import { handleEmbedding } from '../apis'; +import { EMBEDDING_API, handleEmbedding } from '../apis'; import { ParamsSchema } from '../config/types'; import '../style/ground-left.less'; import '../style/rerank.less'; @@ -128,7 +128,7 @@ const GroundEmbedding: React.FC = forwardRef((props, ref) => { const viewCodeContent = useMemo(() => { return generateEmbeddingCode({ - api: '/v1-openai/embeddings', + api: EMBEDDING_API, parameters: { ...parameters, input: [ diff --git a/src/pages/playground/components/ground-images.tsx b/src/pages/playground/components/ground-images.tsx index 3ac7a863..6c0db36c 100644 --- a/src/pages/playground/components/ground-images.tsx +++ b/src/pages/playground/components/ground-images.tsx @@ -236,7 +236,7 @@ const GroundImages: React.FC = forwardRef((props, ref) => { const viewCodeContent = useMemo(() => { if (isOpenaiCompatible) { return generateOpenaiImageCode({ - api: '/v1-openai/images/generations', + api: CREAT_IMAGE_API, parameters: { ...finalParameters, prompt: currentPrompt @@ -244,7 +244,7 @@ const GroundImages: React.FC = forwardRef((props, ref) => { }); } return generateImageCode({ - api: '/v1-openai/images/generations', + api: CREAT_IMAGE_API, parameters: { ...finalParameters, prompt: currentPrompt diff --git a/src/pages/playground/components/ground-stt.tsx b/src/pages/playground/components/ground-stt.tsx index 812b940b..b32e6b1d 100644 --- a/src/pages/playground/components/ground-stt.tsx +++ b/src/pages/playground/components/ground-stt.tsx @@ -24,7 +24,7 @@ import { useRef, useState } from 'react'; -import { speechToText } from '../apis'; +import { AUDIO_SPEECH_TO_TEXT_API, speechToText } from '../apis'; import { SpeechToTextFormat } from '../config'; import { RealtimeParamsConfig as paramsConfig } from '../config/params-config'; import '../style/ground-left.less'; @@ -96,7 +96,7 @@ const GroundLeft: React.FC = forwardRef((props, ref) => { const viewCodeContent = useMemo(() => { return speechToTextCode({ - api: '/v1-openai/audio/transcriptions', + api: AUDIO_SPEECH_TO_TEXT_API, parameters: { ...parameters } diff --git a/src/pages/playground/components/ground-tts.tsx b/src/pages/playground/components/ground-tts.tsx index fe09a709..f0eca8e4 100644 --- a/src/pages/playground/components/ground-tts.tsx +++ b/src/pages/playground/components/ground-tts.tsx @@ -21,7 +21,7 @@ import { useRef, useState } from 'react'; -import { CHAT_API, textToSpeech } from '../apis'; +import { AUDIO_TEXT_TO_SPEECH_API, CHAT_API, textToSpeech } from '../apis'; import { TTSParamsConfig as paramsConfig } from '../config/params-config'; import { MessageItem, ParamsSchema } from '../config/types'; import '../style/ground-left.less'; @@ -97,7 +97,7 @@ const GroundLeft: React.FC = forwardRef((props, ref) => { const viewCodeContent = useMemo(() => { return TextToSpeechCode({ - api: '/v1-openai/audio/speech', + api: AUDIO_TEXT_TO_SPEECH_API, parameters: { ...parameters, input: currentPrompt diff --git a/src/pages/playground/components/multiple-chat/message-body.tsx b/src/pages/playground/components/multiple-chat/message-body.tsx index d90d8997..857caf13 100644 --- a/src/pages/playground/components/multiple-chat/message-body.tsx +++ b/src/pages/playground/components/multiple-chat/message-body.tsx @@ -1,4 +1,4 @@ -import MarkdownViewer from '@/components/markdown-viewer'; +import FullMarkdown from '@/components/markdown-viewer/full-markdown'; import { Input } from 'antd'; import classNames from 'classnames'; import _ from 'lodash'; @@ -35,7 +35,9 @@ const MessageBody: React.FC = ({ thinkerRef.current = new ThinkParser(); } if (actions?.includes('markdown')) { - return thinkerRef.current.parse(data.content); + const res = thinkerRef.current.parse(data.content); + console.log('markdown parse:', res); + return res; } return { thought: '', @@ -206,12 +208,9 @@ const MessageBody: React.FC = ({ {actions?.includes('markdown') ? ( <> -
- -
+ ) : ( `,但之前没有 ``: - // 将 `result` + `` 之前的内容作为 `thought` + // 1 Found ``, but there was no `` before: + // Take `result` + the content before `` as `thought` this.thought = this.result + chunk.substring(this.lastCheckedIndex, endIndex); - this.result = ''; // **清空 result** - this.lastCheckedIndex = endIndex + 8; // 跳过 `` + this.result = ''; // **clear result** + this.lastCheckedIndex = endIndex + 8; // Skip `` } else if (startIndex !== -1) { - // 2 发现 ``,进入思考模式: + // 2 Found ``, start thinking mode: this.result += chunk.substring(this.lastCheckedIndex, startIndex); this.collecting = true; - this.lastCheckedIndex = startIndex + 7; // 跳过 `` + this.lastCheckedIndex = startIndex + 7; // Skip `` } else { - // 3 没有 `` 也没有 ``,直接追加到 `result` + // 3 Still in normal mode, append to `result` this.result += chunk.substring(this.lastCheckedIndex); this.lastCheckedIndex = chunk.length; } } else { if (endIndex !== -1) { - // 4 发现 ``,结束思考模式: + // 4 Found ``, end thinking mode: this.thought += chunk.substring(this.lastCheckedIndex, endIndex); this.collecting = false; - this.lastCheckedIndex = endIndex + 8; // 跳过 `` + this.lastCheckedIndex = endIndex + 8; // Skip `` } else { - // 5 仍在思考模式中,追加到 `thought` + // 5 Still in thinking mode, append to `thought` this.thought += chunk.substring(this.lastCheckedIndex); this.lastCheckedIndex = chunk.length; } diff --git a/src/pages/playground/components/view-code-modal.tsx b/src/pages/playground/components/view-code-modal.tsx index 7c5cabb7..ea42ff68 100644 --- a/src/pages/playground/components/view-code-modal.tsx +++ b/src/pages/playground/components/view-code-modal.tsx @@ -5,6 +5,7 @@ import { useIntl } from '@umijs/max'; import { Button, Modal } from 'antd'; import _ from 'lodash'; import React, { useMemo, useState } from 'react'; +import { OPENAI_COMPATIBLE } from '../apis'; type ViewModalProps = { systemMessage?: string; @@ -46,7 +47,7 @@ const ViewCodeModal: React.FC = (props) => { const intl = useIntl(); const [lang, setLang] = useState(langMap.shell); - const BaseURL = `${window.location.origin}/v1-openai`; + const BaseURL = `${window.location.origin}/${OPENAI_COMPATIBLE}`; const formatPyParams = (params: any) => { return _.keys(params).reduce((acc: string, key: string) => { @@ -69,7 +70,7 @@ const ViewCodeModal: React.FC = (props) => { const printLog = logcommand ? `print(response.${logcommand})` : ''; if (lang === langMap.shell) { - const code = `curl ${window.location.origin}/v1-openai/${api} \\\n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify( + const code = `curl ${window.location.origin}/${OPENAI_COMPATIBLE}/${api} \\\n-H "Content-Type: application/json" \\\n-H "Authorization: Bearer $\{YOUR_GPUSTACK_API_KEY}" \\\n-d '${JSON.stringify( { ...parameters, ...payload diff --git a/src/pages/playground/config/index.ts b/src/pages/playground/config/index.ts index 5fe1295d..976f8266 100644 --- a/src/pages/playground/config/index.ts +++ b/src/pages/playground/config/index.ts @@ -1,4 +1,5 @@ import { map } from 'lodash'; +import { CREAT_IMAGE_API } from '../apis'; import { MessageItem } from './types'; export const Roles = { @@ -121,7 +122,7 @@ export const OpenAIViewCode = { logcommand: 'data[0].b64_json' }, imageAdvanced: { - api: '/v1-openai/images/generations', + api: `${CREAT_IMAGE_API}`, clientType: 'images.generate', logcommand: { python: "json()['data'][0]['b64_json']", diff --git a/src/pages/playground/view-code/audio.ts b/src/pages/playground/view-code/audio.ts index aeca5683..ef6aa15f 100644 --- a/src/pages/playground/view-code/audio.ts +++ b/src/pages/playground/view-code/audio.ts @@ -1,3 +1,4 @@ +import { OPENAI_COMPATIBLE } from '../apis'; import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils'; export const speechToTextCode = ({ api, parameters }: Record) => { @@ -18,7 +19,7 @@ ${formatCurlArgs(parameters, true)}` from openai import OpenAI\n audio_file = open("audio.mp3", "rb") client = OpenAI( - base_url="${host}/v1-openai", + base_url="${host}/${OPENAI_COMPATIBLE}", api_key="YOUR_GPUSTACK_API_KEY" ) @@ -43,7 +44,7 @@ const OpenAI = require("openai"); const openai = new OpenAI({ "apiKey": "YOUR_GPUSTACK_API_KEY", - "baseURL": "${host}/v1-openai" + "baseURL": "${host}/${OPENAI_COMPATIBLE}" }); async function main() { @@ -77,7 +78,7 @@ from pathlib import Path from openai import OpenAI\n output_file_path = Path(__file__).parent / "output.mp3" client = OpenAI( - base_url="${host}/v1-openai", + base_url="${host}/${OPENAI_COMPATIBLE}", api_key="YOUR_GPUSTACK_API_KEY" ) @@ -102,7 +103,7 @@ const ouptFile = path.resolve("./output.mp3"); const openai = new OpenAI({ "apiKey": "YOUR_GPUSTACK_API_KEY", - "baseURL": "${host}/v1-openai" + "baseURL": "${host}/${OPENAI_COMPATIBLE}" }); async function main() { diff --git a/src/pages/playground/view-code/embedding.ts b/src/pages/playground/view-code/embedding.ts index 28b96e7e..e3800db8 100644 --- a/src/pages/playground/view-code/embedding.ts +++ b/src/pages/playground/view-code/embedding.ts @@ -1,3 +1,4 @@ +import { OPENAI_COMPATIBLE } from '../apis'; import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils'; export const generateEmbeddingCode = ({ @@ -17,7 +18,7 @@ ${formatCurlArgs(parameters, false)}`.trim(); const pythonCode = ` from openai import OpenAI\n client = OpenAI( - base_url="${host}/v1-openai", + base_url="${host}/${OPENAI_COMPATIBLE}", api_key="YOUR_GPUSTACK_API_KEY" ) @@ -34,7 +35,7 @@ const OpenAI = require("openai"); const openai = new OpenAI({ "apiKey": "YOUR_GPUSTACK_API_KEY", - "baseURL": "${host}/v1-openai" + "baseURL": "${host}/${OPENAI_COMPATIBLE}" }); async function main() { diff --git a/src/pages/playground/view-code/image.ts b/src/pages/playground/view-code/image.ts index aba78b3a..3ec7ccd3 100644 --- a/src/pages/playground/view-code/image.ts +++ b/src/pages/playground/view-code/image.ts @@ -1,4 +1,5 @@ import _ from 'lodash'; +import { OPENAI_COMPATIBLE } from '../apis'; import { fomatNodeJsParams, formatCurlArgs, formatPyParams } from './utils'; export const generateImageCode = ({ @@ -44,7 +45,7 @@ print(response.json()['data'][0]['b64_json'])`.trim(); const nodeJsCode = ` const axios = require('axios'); -const url = "http://localhost/v1-openai/images/generations"; +const url = "${host}/${OPENAI_COMPATIBLE}/images/generations"; const headers = { "Content-type": "application/json", "Authorization": "Bearer $\{YOUR_GPUSTACK_API_KEY}" @@ -92,7 +93,7 @@ ${formatCurlArgs(_.omit(parameters, ['mask', 'image']), isFormdata)}` const pythonCode = ` from openai import OpenAI\n client = OpenAI( - base_url="${host}/v1-openai", + base_url="${host}/${OPENAI_COMPATIBLE}", api_key="YOUR_GPUSTACK_API_KEY" ) @@ -109,7 +110,7 @@ const OpenAI = require("openai"); const openai = new OpenAI({ "apiKey": "YOUR_GPUSTACK_API_KEY", - "baseURL": "${host}/v1-openai" + "baseURL": "${host}/${OPENAI_COMPATIBLE}" }); async function main() { diff --git a/src/pages/resources/components/add-worker.tsx b/src/pages/resources/components/add-worker.tsx index fd0cbc76..2af5767e 100644 --- a/src/pages/resources/components/add-worker.tsx +++ b/src/pages/resources/components/add-worker.tsx @@ -41,12 +41,13 @@ const AddWorker: React.FC = (props) => { width={700} styles={{ body: { - height: 550 + height: 620 } }} footer={null} > = (props) => {