balibabu commited on
Commit
0f0c543
·
1 Parent(s): f23a141

Feat: Add FileUploadDialog #3221 (#4327)

Browse files

### What problem does this PR solve?

Feat: Add FileUploadDialog #3221

### Type of change


- [x] New Feature (non-breaking change which adds functionality)

web/package-lock.json CHANGED
@@ -22,6 +22,8 @@
22
  "@radix-ui/react-label": "^2.1.0",
23
  "@radix-ui/react-navigation-menu": "^1.2.1",
24
  "@radix-ui/react-popover": "^1.1.2",
 
 
25
  "@radix-ui/react-select": "^2.1.2",
26
  "@radix-ui/react-separator": "^1.1.0",
27
  "@radix-ui/react-slider": "^1.2.1",
@@ -59,8 +61,8 @@
59
  "openai-speech-stream-player": "^1.0.8",
60
  "rc-tween-one": "^3.0.6",
61
  "react-copy-to-clipboard": "^5.1.0",
 
62
  "react-error-boundary": "^4.0.13",
63
- "react-force-graph": "^1.44.4",
64
  "react-hook-form": "^7.53.1",
65
  "react-i18next": "^14.0.0",
66
  "react-infinite-scroll-component": "^6.1.0",
@@ -74,6 +76,7 @@
74
  "rehype-raw": "^7.0.0",
75
  "remark-gfm": "^4.0.0",
76
  "remark-math": "^6.0.0",
 
77
  "tailwind-merge": "^2.5.4",
78
  "tailwindcss-animate": "^1.0.7",
79
  "umi": "^4.0.90",
@@ -4962,6 +4965,82 @@
4962
  }
4963
  }
4964
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4965
  "node_modules/@radix-ui/react-roving-focus": {
4966
  "version": "1.1.0",
4967
  "resolved": "https://registry.npmmirror.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz",
@@ -5006,6 +5085,117 @@
5006
  }
5007
  }
5008
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5009
  "node_modules/@radix-ui/react-select": {
5010
  "version": "2.1.2",
5011
  "resolved": "https://registry.npmmirror.com/@radix-ui/react-select/-/react-select-2.1.2.tgz",
@@ -5598,14 +5788,6 @@
5598
  "resolved": "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz",
5599
  "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="
5600
  },
5601
- "node_modules/@sindresorhus/is": {
5602
- "version": "0.14.0",
5603
- "resolved": "https://registry.npmmirror.com/@sindresorhus/is/-/is-0.14.0.tgz",
5604
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
5605
- "engines": {
5606
- "node": ">=6"
5607
- }
5608
- },
5609
  "node_modules/@sinonjs/commons": {
5610
  "version": "3.0.1",
5611
  "resolved": "https://registry.npmmirror.com/@sinonjs/commons/-/commons-3.0.1.tgz",
@@ -5814,17 +5996,6 @@
5814
  "tslib": "^2.4.0"
5815
  }
5816
  },
5817
- "node_modules/@szmarczak/http-timer": {
5818
- "version": "1.1.2",
5819
- "resolved": "https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
5820
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
5821
- "dependencies": {
5822
- "defer-to-connect": "^1.0.1"
5823
- },
5824
- "engines": {
5825
- "node": ">=6"
5826
- }
5827
- },
5828
  "node_modules/@tailwindcss/line-clamp": {
5829
  "version": "0.4.4",
5830
  "resolved": "https://registry.npmmirror.com/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz",
@@ -6226,11 +6397,6 @@
6226
  "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
6227
  "devOptional": true
6228
  },
6229
- "node_modules/@tweenjs/tween.js": {
6230
- "version": "23.1.3",
6231
- "resolved": "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-23.1.3.tgz",
6232
- "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA=="
6233
- },
6234
  "node_modules/@types/aria-query": {
6235
  "version": "5.0.4",
6236
  "resolved": "https://registry.npmmirror.com/@types/aria-query/-/aria-query-5.0.4.tgz",
@@ -8845,49 +9011,6 @@
8845
  "d3-zoom": "^3.0.0"
8846
  }
8847
  },
8848
- "node_modules/3d-force-graph": {
8849
- "version": "1.73.3",
8850
- "resolved": "https://registry.npmmirror.com/3d-force-graph/-/3d-force-graph-1.73.3.tgz",
8851
- "integrity": "sha512-azb65Lwn2yr/fJ4+qrxjmstVxogjzwJIZL/fdboCKBg6ph/FLW+xdvYFEBZW92XxBn1C8yRKS3d2VkVT3BzLSw==",
8852
- "dependencies": {
8853
- "accessor-fn": "1",
8854
- "kapsule": "1",
8855
- "three": ">=0.118 <1",
8856
- "three-forcegraph": "1",
8857
- "three-render-objects": "^1.29"
8858
- },
8859
- "engines": {
8860
- "node": ">=12"
8861
- }
8862
- },
8863
- "node_modules/3d-force-graph-ar": {
8864
- "version": "1.8.4",
8865
- "resolved": "https://registry.npmmirror.com/3d-force-graph-ar/-/3d-force-graph-ar-1.8.4.tgz",
8866
- "integrity": "sha512-GnggtrFODQqEfkFTJeQnPvwQVcYtJ81cE5/lsFdDumLkPWB2WoHSbs5k2tSNCZVGIUsKQs5kkEGCbNDeOhueiw==",
8867
- "dependencies": {
8868
- "aframe-forcegraph-component": "3",
8869
- "kapsule": "1"
8870
- },
8871
- "engines": {
8872
- "node": ">=12"
8873
- }
8874
- },
8875
- "node_modules/3d-force-graph-vr": {
8876
- "version": "2.2.5",
8877
- "resolved": "https://registry.npmmirror.com/3d-force-graph-vr/-/3d-force-graph-vr-2.2.5.tgz",
8878
- "integrity": "sha512-Lq31Ido+QQE0iWZNmyKVcsY2rmyMJaBzRgqG/4zZUY2nOBOmf/8TQF7kHSsW564UaZtx4FvjamHyVSkenPy9BA==",
8879
- "dependencies": {
8880
- "accessor-fn": "1",
8881
- "aframe": "^1.5",
8882
- "aframe-extras": "^7.2",
8883
- "aframe-forcegraph-component": "3",
8884
- "kapsule": "1",
8885
- "polished": "4"
8886
- },
8887
- "engines": {
8888
- "node": ">=12"
8889
- }
8890
- },
8891
  "node_modules/abab": {
8892
  "version": "2.0.6",
8893
  "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz",
@@ -8907,14 +9030,6 @@
8907
  "node": ">= 0.6"
8908
  }
8909
  },
8910
- "node_modules/accessor-fn": {
8911
- "version": "1.5.1",
8912
- "resolved": "https://registry.npmmirror.com/accessor-fn/-/accessor-fn-1.5.1.tgz",
8913
- "integrity": "sha512-zZpFYBqIL1Aqg+f2qmYHJ8+yIZF7/tP6PUGx2/QM0uGPSO5UegpinmkNwDohxWtOj586BpMPVRUjce2HI6xB3A==",
8914
- "engines": {
8915
- "node": ">=12"
8916
- }
8917
- },
8918
  "node_modules/acorn": {
8919
  "version": "8.11.3",
8920
  "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz",
@@ -8980,78 +9095,6 @@
8980
  "node": ">= 10.0.0"
8981
  }
8982
  },
8983
- "node_modules/aframe": {
8984
- "version": "1.6.0",
8985
- "resolved": "https://registry.npmmirror.com/aframe/-/aframe-1.6.0.tgz",
8986
- "integrity": "sha512-+P1n2xKGZQbCNW4lTwfue9in2KmfAwYD/BZOU5uXKrJCTegPyUZZX/haJRR9Rb33ij+KPj3vFdwT5ALaucXTNA==",
8987
- "dependencies": {
8988
- "buffer": "^6.0.3",
8989
- "debug": "^4.3.4",
8990
- "deep-assign": "^2.0.0",
8991
- "load-bmfont": "^1.2.3",
8992
- "super-animejs": "^3.1.0",
8993
- "three": "npm:[email protected]",
8994
- "three-bmfont-text": "github:dmarcos/three-bmfont-text#eed4878795be9b3e38cf6aec6b903f56acd1f695",
8995
- "webvr-polyfill": "^0.10.12"
8996
- },
8997
- "engines": {
8998
- "node": ">= 4.6.0",
8999
- "npm": ">= 2.15.9"
9000
- }
9001
- },
9002
- "node_modules/aframe-extras": {
9003
- "version": "7.5.0",
9004
- "resolved": "https://registry.npmmirror.com/aframe-extras/-/aframe-extras-7.5.0.tgz",
9005
- "integrity": "sha512-9GmDfjfq6qCzSSkvkzf82hqVkEqGVPyCU81ttlfk0yL9+mepLFmVC+Wda8DCP25jZGoY7wm33vs0QadDelnxTg==",
9006
- "dependencies": {
9007
- "nipplejs": "^0.10.2",
9008
- "three": "^0.164.0",
9009
- "three-pathfinding": "^1.3.0"
9010
- }
9011
- },
9012
- "node_modules/aframe-extras/node_modules/three": {
9013
- "version": "0.164.1",
9014
- "resolved": "https://registry.npmmirror.com/three/-/three-0.164.1.tgz",
9015
- "integrity": "sha512-iC/hUBbl1vzFny7f5GtqzVXYjMJKaTPxiCxXfrvVdBi1Sf+jhd1CAkitiFwC7mIBFCo3MrDLJG97yisoaWig0w=="
9016
- },
9017
- "node_modules/aframe-forcegraph-component": {
9018
- "version": "3.0.8",
9019
- "resolved": "https://registry.npmmirror.com/aframe-forcegraph-component/-/aframe-forcegraph-component-3.0.8.tgz",
9020
- "integrity": "sha512-ir1SzOYWYVQ4wtG18QwZRR/aVeZlZDXDbcRgFxSIc8A1YB6Mz3Mh0f0zMFKE3jAq481xNgpktxMvsWGZTPi63Q==",
9021
- "dependencies": {
9022
- "accessor-fn": "1",
9023
- "three-forcegraph": "1"
9024
- }
9025
- },
9026
- "node_modules/aframe/node_modules/buffer": {
9027
- "version": "6.0.3",
9028
- "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz",
9029
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
9030
- "funding": [
9031
- {
9032
- "type": "github",
9033
- "url": "https://github.com/sponsors/feross"
9034
- },
9035
- {
9036
- "type": "patreon",
9037
- "url": "https://www.patreon.com/feross"
9038
- },
9039
- {
9040
- "type": "consulting",
9041
- "url": "https://feross.org/support"
9042
- }
9043
- ],
9044
- "dependencies": {
9045
- "base64-js": "^1.3.1",
9046
- "ieee754": "^1.2.1"
9047
- }
9048
- },
9049
- "node_modules/aframe/node_modules/three": {
9050
- "name": "super-three",
9051
- "version": "0.164.0",
9052
- "resolved": "https://registry.npmmirror.com/super-three/-/super-three-0.164.0.tgz",
9053
- "integrity": "sha512-yMtOkw2hSXfIvGlwcghCbhHGsKRAmh8ksDeOo/0HI7KlEVoIYKHiYLYe9GF6QBViNwzKGpMIz77XUDRveZ4XJg=="
9054
- },
9055
  "node_modules/agent-base": {
9056
  "version": "6.0.2",
9057
  "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
@@ -9117,11 +9160,6 @@
9117
  "ajv": "^6.9.1"
9118
  }
9119
  },
9120
- "node_modules/an-array": {
9121
- "version": "1.0.0",
9122
- "resolved": "https://registry.npmmirror.com/an-array/-/an-array-1.0.0.tgz",
9123
- "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg=="
9124
- },
9125
  "node_modules/ansi-escapes": {
9126
  "version": "4.3.2",
9127
  "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -9353,14 +9391,6 @@
9353
  "node": ">= 0.4"
9354
  }
9355
  },
9356
- "node_modules/array-shuffle": {
9357
- "version": "1.0.1",
9358
- "resolved": "https://registry.npmmirror.com/array-shuffle/-/array-shuffle-1.0.1.tgz",
9359
- "integrity": "sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==",
9360
- "engines": {
9361
- "node": ">=0.10.0"
9362
- }
9363
- },
9364
  "node_modules/array-tree-filter": {
9365
  "version": "2.1.0",
9366
  "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
@@ -9475,11 +9505,6 @@
9475
  "node": ">=0.10.0"
9476
  }
9477
  },
9478
- "node_modules/as-number": {
9479
- "version": "1.0.0",
9480
- "resolved": "https://registry.npmmirror.com/as-number/-/as-number-1.0.0.tgz",
9481
- "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg=="
9482
- },
9483
  "node_modules/asn1.js": {
9484
  "version": "4.10.1",
9485
  "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-4.10.1.tgz",
@@ -9604,6 +9629,14 @@
9604
  "node": ">=8.0.0"
9605
  }
9606
  },
 
 
 
 
 
 
 
 
9607
  "node_modules/autoprefixer": {
9608
  "version": "10.4.19",
9609
  "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.19.tgz",
@@ -9862,15 +9895,6 @@
9862
  "url": "https://github.com/sponsors/wooorm"
9863
  }
9864
  },
9865
- "node_modules/bezier-js": {
9866
- "version": "6.1.4",
9867
- "resolved": "https://registry.npmmirror.com/bezier-js/-/bezier-js-6.1.4.tgz",
9868
- "integrity": "sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==",
9869
- "funding": {
9870
- "type": "individual",
9871
- "url": "https://github.com/Pomax/bezierjs/blob/master/FUNDING.md"
9872
- }
9873
- },
9874
  "node_modules/big-integer": {
9875
  "version": "1.6.52",
9876
  "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz",
@@ -10160,14 +10184,6 @@
10160
  "isarray": "^1.0.0"
10161
  }
10162
  },
10163
- "node_modules/buffer-equal": {
10164
- "version": "0.0.1",
10165
- "resolved": "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-0.0.1.tgz",
10166
- "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
10167
- "engines": {
10168
- "node": ">=0.4.0"
10169
- }
10170
- },
10171
  "node_modules/buffer-from": {
10172
  "version": "1.1.2",
10173
  "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -10242,58 +10258,6 @@
10242
  "node": ">=0.10.0"
10243
  }
10244
  },
10245
- "node_modules/cacheable-request": {
10246
- "version": "6.1.0",
10247
- "resolved": "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-6.1.0.tgz",
10248
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
10249
- "dependencies": {
10250
- "clone-response": "^1.0.2",
10251
- "get-stream": "^5.1.0",
10252
- "http-cache-semantics": "^4.0.0",
10253
- "keyv": "^3.0.0",
10254
- "lowercase-keys": "^2.0.0",
10255
- "normalize-url": "^4.1.0",
10256
- "responselike": "^1.0.2"
10257
- },
10258
- "engines": {
10259
- "node": ">=8"
10260
- }
10261
- },
10262
- "node_modules/cacheable-request/node_modules/get-stream": {
10263
- "version": "5.2.0",
10264
- "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz",
10265
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
10266
- "dependencies": {
10267
- "pump": "^3.0.0"
10268
- },
10269
- "engines": {
10270
- "node": ">=8"
10271
- },
10272
- "funding": {
10273
- "url": "https://github.com/sponsors/sindresorhus"
10274
- }
10275
- },
10276
- "node_modules/cacheable-request/node_modules/json-buffer": {
10277
- "version": "3.0.0",
10278
- "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.0.tgz",
10279
- "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ=="
10280
- },
10281
- "node_modules/cacheable-request/node_modules/keyv": {
10282
- "version": "3.1.0",
10283
- "resolved": "https://registry.npmmirror.com/keyv/-/keyv-3.1.0.tgz",
10284
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
10285
- "dependencies": {
10286
- "json-buffer": "3.0.0"
10287
- }
10288
- },
10289
- "node_modules/cacheable-request/node_modules/lowercase-keys": {
10290
- "version": "2.0.0",
10291
- "resolved": "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
10292
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
10293
- "engines": {
10294
- "node": ">=8"
10295
- }
10296
- },
10297
  "node_modules/call-bind": {
10298
  "version": "1.0.7",
10299
  "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz",
@@ -10382,40 +10346,11 @@
10382
  "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz",
10383
  "integrity": "sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg=="
10384
  },
10385
- "node_modules/canvas-color-tracker": {
10386
- "version": "1.2.2",
10387
- "resolved": "https://registry.npmmirror.com/canvas-color-tracker/-/canvas-color-tracker-1.2.2.tgz",
10388
- "integrity": "sha512-r+u/Ft2ka4Rj274Ts4L9bhYZLuMvbuJ/yL4seP0s+Pi+i9CM0caD+Sd//yseS5EVBJ2SKSmq36h2mNYUCdmTfA==",
10389
- "dependencies": {
10390
- "tinycolor2": "^1.6.0"
10391
- },
10392
- "engines": {
10393
- "node": ">=12"
10394
- }
10395
- },
10396
- "node_modules/cardboard-vr-display": {
10397
- "version": "1.0.19",
10398
- "resolved": "https://registry.npmmirror.com/cardboard-vr-display/-/cardboard-vr-display-1.0.19.tgz",
10399
- "integrity": "sha512-+MjcnWKAkb95p68elqZLDPzoiF/dGncQilLGvPBM5ZorABp/ao3lCs7nnRcYBckmuNkg1V/5rdGDKoUaCVsHzQ==",
10400
- "dependencies": {
10401
- "gl-preserve-state": "^1.0.0",
10402
- "nosleep.js": "^0.7.0",
10403
- "webvr-polyfill-dpdb": "^1.0.17"
10404
- }
10405
- },
10406
  "node_modules/ccount": {
10407
  "version": "2.0.1",
10408
  "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz",
10409
  "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
10410
  },
10411
- "node_modules/centra": {
10412
- "version": "2.7.0",
10413
- "resolved": "https://registry.npmmirror.com/centra/-/centra-2.7.0.tgz",
10414
- "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==",
10415
- "dependencies": {
10416
- "follow-redirects": "^1.15.6"
10417
- }
10418
- },
10419
  "node_modules/chalk": {
10420
  "version": "2.4.2",
10421
  "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
@@ -10759,17 +10694,6 @@
10759
  "node": ">=12"
10760
  }
10761
  },
10762
- "node_modules/clone-response": {
10763
- "version": "1.0.3",
10764
- "resolved": "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz",
10765
- "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
10766
- "dependencies": {
10767
- "mimic-response": "^1.0.0"
10768
- },
10769
- "funding": {
10770
- "url": "https://github.com/sponsors/sindresorhus"
10771
- }
10772
- },
10773
  "node_modules/clsx": {
10774
  "version": "2.1.1",
10775
  "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz",
@@ -12006,18 +11930,6 @@
12006
  "node": ">=12"
12007
  }
12008
  },
12009
- "node_modules/d3-scale-chromatic": {
12010
- "version": "3.1.0",
12011
- "resolved": "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
12012
- "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
12013
- "dependencies": {
12014
- "d3-color": "1 - 3",
12015
- "d3-interpolate": "1 - 3"
12016
- },
12017
- "engines": {
12018
- "node": ">=12"
12019
- }
12020
- },
12021
  "node_modules/d3-scale/node_modules/d3-array": {
12022
  "version": "3.2.4",
12023
  "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz",
@@ -12131,17 +12043,6 @@
12131
  "lodash": "^4.17.15"
12132
  }
12133
  },
12134
- "node_modules/data-joint": {
12135
- "version": "1.3.1",
12136
- "resolved": "https://registry.npmmirror.com/data-joint/-/data-joint-1.3.1.tgz",
12137
- "integrity": "sha512-tMK0m4OVGqiA3zkn8JmO6YAqD8UwJqIAx4AAwFl1SKTtKAqcXePuT+n2aayiX9uITtlN3DFtKKTOxJRUc2+HvQ==",
12138
- "dependencies": {
12139
- "index-array-by": "^1.4.0"
12140
- },
12141
- "engines": {
12142
- "node": ">=12"
12143
- }
12144
- },
12145
  "node_modules/data-uri-to-buffer": {
12146
  "version": "4.0.1",
12147
  "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
@@ -12282,17 +12183,6 @@
12282
  "node": ">=0.10"
12283
  }
12284
  },
12285
- "node_modules/decompress-response": {
12286
- "version": "3.3.0",
12287
- "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-3.3.0.tgz",
12288
- "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==",
12289
- "dependencies": {
12290
- "mimic-response": "^1.0.0"
12291
- },
12292
- "engines": {
12293
- "node": ">=4"
12294
- }
12295
- },
12296
  "node_modules/dedent": {
12297
  "version": "1.5.3",
12298
  "resolved": "https://registry.npmmirror.com/dedent/-/dedent-1.5.3.tgz",
@@ -12307,17 +12197,6 @@
12307
  }
12308
  }
12309
  },
12310
- "node_modules/deep-assign": {
12311
- "version": "2.0.0",
12312
- "resolved": "https://registry.npmmirror.com/deep-assign/-/deep-assign-2.0.0.tgz",
12313
- "integrity": "sha512-2QhG3Kxulu4XIF3WL5C5x0sc/S17JLgm1SfvDfIRsR/5m7ZGmcejII7fZ2RyWhN0UWIJm0TNM/eKow6LAn3evQ==",
12314
- "dependencies": {
12315
- "is-obj": "^1.0.0"
12316
- },
12317
- "engines": {
12318
- "node": ">=0.10.0"
12319
- }
12320
- },
12321
  "node_modules/deep-is": {
12322
  "version": "0.1.4",
12323
  "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz",
@@ -12439,11 +12318,6 @@
12439
  "node": ">=12"
12440
  }
12441
  },
12442
- "node_modules/defer-to-connect": {
12443
- "version": "1.1.3",
12444
- "resolved": "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
12445
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
12446
- },
12447
  "node_modules/define-data-property": {
12448
  "version": "1.1.4",
12449
  "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -12734,7 +12608,8 @@
12734
  "node_modules/dom-walk": {
12735
  "version": "0.1.2",
12736
  "resolved": "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz",
12737
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
 
12738
  },
12739
  "node_modules/domain-browser": {
12740
  "version": "1.2.0",
@@ -12805,14 +12680,6 @@
12805
  "tslib": "^2.0.3"
12806
  }
12807
  },
12808
- "node_modules/dtype": {
12809
- "version": "2.0.0",
12810
- "resolved": "https://registry.npmmirror.com/dtype/-/dtype-2.0.0.tgz",
12811
- "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==",
12812
- "engines": {
12813
- "node": ">= 0.8.0"
12814
- }
12815
- },
12816
  "node_modules/duck": {
12817
  "version": "0.1.12",
12818
  "resolved": "https://registry.npmmirror.com/duck/-/duck-0.1.12.tgz",
@@ -12827,11 +12694,6 @@
12827
  "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
12828
  "dev": true
12829
  },
12830
- "node_modules/duplexer3": {
12831
- "version": "0.1.5",
12832
- "resolved": "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz",
12833
- "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA=="
12834
- },
12835
  "node_modules/duplexify": {
12836
  "version": "4.1.2",
12837
  "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.2.tgz",
@@ -14412,6 +14274,17 @@
14412
  "node": "^10.12.0 || >=12.0.0"
14413
  }
14414
  },
 
 
 
 
 
 
 
 
 
 
 
14415
  "node_modules/filesize": {
14416
  "version": "8.0.7",
14417
  "resolved": "https://registry.npmmirror.com/filesize/-/filesize-8.0.7.tgz",
@@ -14563,30 +14436,6 @@
14563
  "node": ">=0.10.0"
14564
  }
14565
  },
14566
- "node_modules/force-graph": {
14567
- "version": "1.43.5",
14568
- "resolved": "https://registry.npmmirror.com/force-graph/-/force-graph-1.43.5.tgz",
14569
- "integrity": "sha512-HveLELh9yhZXO/QOfaFS38vlwJZ/3sKu+jarfXzRmbmihSOH/BbRWnUvmg8wLFiYy6h4HlH4lkRfZRccHYmXgA==",
14570
- "dependencies": {
14571
- "@tweenjs/tween.js": "18 - 23",
14572
- "accessor-fn": "1",
14573
- "bezier-js": "3 - 6",
14574
- "canvas-color-tracker": "1",
14575
- "d3-array": "1 - 3",
14576
- "d3-drag": "2 - 3",
14577
- "d3-force-3d": "2 - 3",
14578
- "d3-scale": "1 - 4",
14579
- "d3-scale-chromatic": "1 - 3",
14580
- "d3-selection": "2 - 3",
14581
- "d3-zoom": "2 - 3",
14582
- "index-array-by": "1",
14583
- "kapsule": "^1.14",
14584
- "lodash-es": "4"
14585
- },
14586
- "engines": {
14587
- "node": ">=12"
14588
- }
14589
- },
14590
  "node_modules/foreground-child": {
14591
  "version": "3.1.1",
14592
  "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz",
@@ -14759,36 +14608,17 @@
14759
  "dependencies": {
14760
  "map-cache": "^0.2.2"
14761
  },
14762
- "engines": {
14763
- "node": ">=0.10.0"
14764
- }
14765
- },
14766
- "node_modules/fresh": {
14767
- "version": "0.5.2",
14768
- "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
14769
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
14770
- "engines": {
14771
- "node": ">= 0.6"
14772
- }
14773
- },
14774
- "node_modules/fromentries": {
14775
- "version": "1.3.2",
14776
- "resolved": "https://registry.npmmirror.com/fromentries/-/fromentries-1.3.2.tgz",
14777
- "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==",
14778
- "funding": [
14779
- {
14780
- "type": "github",
14781
- "url": "https://github.com/sponsors/feross"
14782
- },
14783
- {
14784
- "type": "patreon",
14785
- "url": "https://www.patreon.com/feross"
14786
- },
14787
- {
14788
- "type": "consulting",
14789
- "url": "https://feross.org/support"
14790
- }
14791
- ]
14792
  },
14793
  "node_modules/front-matter": {
14794
  "version": "4.0.2",
@@ -14980,11 +14810,6 @@
14980
  "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz",
14981
  "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA=="
14982
  },
14983
- "node_modules/gl-preserve-state": {
14984
- "version": "1.0.0",
14985
- "resolved": "https://registry.npmmirror.com/gl-preserve-state/-/gl-preserve-state-1.0.0.tgz",
14986
- "integrity": "sha512-zQZ25l3haD4hvgJZ6C9+s0ebdkW9y+7U2qxvGu1uWOJh8a4RU+jURIKEQhf8elIlFpMH6CrAY2tH0mYrRjet3Q=="
14987
- },
14988
  "node_modules/glob": {
14989
  "version": "7.2.3",
14990
  "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
@@ -15022,6 +14847,7 @@
15022
  "version": "4.4.0",
15023
  "resolved": "https://registry.npmmirror.com/global/-/global-4.4.0.tgz",
15024
  "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
 
15025
  "dependencies": {
15026
  "min-document": "^2.19.0",
15027
  "process": "^0.11.10"
@@ -15111,38 +14937,6 @@
15111
  "get-intrinsic": "^1.1.3"
15112
  }
15113
  },
15114
- "node_modules/got": {
15115
- "version": "9.6.0",
15116
- "resolved": "https://registry.npmmirror.com/got/-/got-9.6.0.tgz",
15117
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
15118
- "dependencies": {
15119
- "@sindresorhus/is": "^0.14.0",
15120
- "@szmarczak/http-timer": "^1.1.2",
15121
- "cacheable-request": "^6.0.0",
15122
- "decompress-response": "^3.3.0",
15123
- "duplexer3": "^0.1.4",
15124
- "get-stream": "^4.1.0",
15125
- "lowercase-keys": "^1.0.1",
15126
- "mimic-response": "^1.0.1",
15127
- "p-cancelable": "^1.0.0",
15128
- "to-readable-stream": "^1.0.0",
15129
- "url-parse-lax": "^3.0.0"
15130
- },
15131
- "engines": {
15132
- "node": ">=8.6"
15133
- }
15134
- },
15135
- "node_modules/got/node_modules/get-stream": {
15136
- "version": "4.1.0",
15137
- "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz",
15138
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
15139
- "dependencies": {
15140
- "pump": "^3.0.0"
15141
- },
15142
- "engines": {
15143
- "node": ">=6"
15144
- }
15145
- },
15146
  "node_modules/graceful-fs": {
15147
  "version": "4.2.11",
15148
  "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -15978,11 +15772,6 @@
15978
  "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
15979
  "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
15980
  },
15981
- "node_modules/http-cache-semantics": {
15982
- "version": "4.1.1",
15983
- "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
15984
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
15985
- },
15986
  "node_modules/http-deceiver": {
15987
  "version": "1.2.7",
15988
  "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz",
@@ -16236,14 +16025,6 @@
16236
  "node": ">=8"
16237
  }
16238
  },
16239
- "node_modules/index-array-by": {
16240
- "version": "1.4.2",
16241
- "resolved": "https://registry.npmmirror.com/index-array-by/-/index-array-by-1.4.2.tgz",
16242
- "integrity": "sha512-SP23P27OUKzXWEC/TOyWlwLviofQkCSCKONnc62eItjp69yCZZPqDQtr3Pw5gJDnPeUMqExmKydNZaJO0FU9pw==",
16243
- "engines": {
16244
- "node": ">=12"
16245
- }
16246
- },
16247
  "node_modules/inflight": {
16248
  "version": "1.0.6",
16249
  "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
@@ -16473,7 +16254,8 @@
16473
  "node_modules/is-buffer": {
16474
  "version": "1.1.6",
16475
  "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz",
16476
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
 
16477
  },
16478
  "node_modules/is-callable": {
16479
  "version": "1.2.7",
@@ -16622,11 +16404,6 @@
16622
  "node": ">=8"
16623
  }
16624
  },
16625
- "node_modules/is-function": {
16626
- "version": "1.0.2",
16627
- "resolved": "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz",
16628
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
16629
- },
16630
  "node_modules/is-generator-fn": {
16631
  "version": "2.1.0",
16632
  "resolved": "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
@@ -16720,14 +16497,6 @@
16720
  "node": ">= 0.4"
16721
  }
16722
  },
16723
- "node_modules/is-obj": {
16724
- "version": "1.0.1",
16725
- "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz",
16726
- "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
16727
- "engines": {
16728
- "node": ">=0.10.0"
16729
- }
16730
- },
16731
  "node_modules/is-path-inside": {
16732
  "version": "3.0.3",
16733
  "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -17091,14 +16860,6 @@
17091
  "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
17092
  "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="
17093
  },
17094
- "node_modules/jerrypick": {
17095
- "version": "1.1.1",
17096
- "resolved": "https://registry.npmmirror.com/jerrypick/-/jerrypick-1.1.1.tgz",
17097
- "integrity": "sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==",
17098
- "engines": {
17099
- "node": ">=12"
17100
- }
17101
- },
17102
  "node_modules/jest": {
17103
  "version": "29.7.0",
17104
  "resolved": "https://registry.npmmirror.com/jest/-/jest-29.7.0.tgz",
@@ -19659,17 +19420,6 @@
19659
  "node": ">=8"
19660
  }
19661
  },
19662
- "node_modules/kapsule": {
19663
- "version": "1.14.5",
19664
- "resolved": "https://registry.npmmirror.com/kapsule/-/kapsule-1.14.5.tgz",
19665
- "integrity": "sha512-H0iSpTynUzZw3tgraDmReprpFRmH5oP5GPmaNsurSwLx2H5iCpOMIkp5q+sfhB4Tz/UJd1E1IbEE9Z6ksnJ6RA==",
19666
- "dependencies": {
19667
- "lodash-es": "4"
19668
- },
19669
- "engines": {
19670
- "node": ">=12"
19671
- }
19672
- },
19673
  "node_modules/katex": {
19674
  "version": "0.16.11",
19675
  "resolved": "https://registry.npmmirror.com/katex/-/katex-0.16.11.tgz",
@@ -19722,16 +19472,6 @@
19722
  "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz",
19723
  "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="
19724
  },
19725
- "node_modules/layout-bmfont-text": {
19726
- "version": "1.3.4",
19727
- "resolved": "https://registry.npmmirror.com/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz",
19728
- "integrity": "sha512-mceomHZ8W7pSKQhTdLvOe1Im4n37u8xa5Gr0J3KPCHRMO/9o7+goWIOzZcUUd+Xgzy3+22bvoIQ0OaN3LRtgaw==",
19729
- "dependencies": {
19730
- "as-number": "^1.0.0",
19731
- "word-wrapper": "^1.0.7",
19732
- "xtend": "^4.0.0"
19733
- }
19734
- },
19735
  "node_modules/less": {
19736
  "version": "4.1.3",
19737
  "resolved": "https://registry.npmmirror.com/less/-/less-4.1.3.tgz",
@@ -20285,21 +20025,6 @@
20285
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
20286
  }
20287
  },
20288
- "node_modules/load-bmfont": {
20289
- "version": "1.4.2",
20290
- "resolved": "https://registry.npmmirror.com/load-bmfont/-/load-bmfont-1.4.2.tgz",
20291
- "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==",
20292
- "dependencies": {
20293
- "buffer-equal": "0.0.1",
20294
- "mime": "^1.3.4",
20295
- "parse-bmfont-ascii": "^1.0.3",
20296
- "parse-bmfont-binary": "^1.0.5",
20297
- "parse-bmfont-xml": "^1.1.4",
20298
- "phin": "^3.7.1",
20299
- "xhr": "^2.0.1",
20300
- "xtend": "^4.0.0"
20301
- }
20302
- },
20303
  "node_modules/loader-runner": {
20304
  "version": "4.3.0",
20305
  "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
@@ -20349,7 +20074,9 @@
20349
  "node_modules/lodash-es": {
20350
  "version": "4.17.21",
20351
  "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
20352
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
 
 
20353
  },
20354
  "node_modules/lodash._reinterpolate": {
20355
  "version": "3.0.0",
@@ -20590,14 +20317,6 @@
20590
  "tslib": "^2.0.3"
20591
  }
20592
  },
20593
- "node_modules/lowercase-keys": {
20594
- "version": "1.0.1",
20595
- "resolved": "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
20596
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
20597
- "engines": {
20598
- "node": ">=0.10.0"
20599
- }
20600
- },
20601
  "node_modules/lowlight": {
20602
  "version": "1.20.0",
20603
  "resolved": "https://registry.npmmirror.com/lowlight/-/lowlight-1.20.0.tgz",
@@ -20700,22 +20419,6 @@
20700
  "node": ">=0.10.0"
20701
  }
20702
  },
20703
- "node_modules/map-limit": {
20704
- "version": "0.0.1",
20705
- "resolved": "https://registry.npmmirror.com/map-limit/-/map-limit-0.0.1.tgz",
20706
- "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==",
20707
- "dependencies": {
20708
- "once": "~1.3.0"
20709
- }
20710
- },
20711
- "node_modules/map-limit/node_modules/once": {
20712
- "version": "1.3.3",
20713
- "resolved": "https://registry.npmmirror.com/once/-/once-1.3.3.tgz",
20714
- "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==",
20715
- "dependencies": {
20716
- "wrappy": "1"
20717
- }
20718
- },
20719
  "node_modules/map-obj": {
20720
  "version": "4.3.0",
20721
  "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz",
@@ -21434,18 +21137,11 @@
21434
  "node": ">=6"
21435
  }
21436
  },
21437
- "node_modules/mimic-response": {
21438
- "version": "1.0.1",
21439
- "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz",
21440
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
21441
- "engines": {
21442
- "node": ">=4"
21443
- }
21444
- },
21445
  "node_modules/min-document": {
21446
  "version": "2.19.0",
21447
  "resolved": "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz",
21448
  "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
 
21449
  "dependencies": {
21450
  "dom-walk": "^0.1.0"
21451
  }
@@ -21482,7 +21178,8 @@
21482
  "node_modules/minimist": {
21483
  "version": "1.2.8",
21484
  "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
21485
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
 
21486
  },
21487
  "node_modules/minimist-options": {
21488
  "version": "4.1.0",
@@ -21694,69 +21391,12 @@
21694
  "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==",
21695
  "dev": true
21696
  },
21697
- "node_modules/new-array": {
21698
- "version": "1.0.0",
21699
- "resolved": "https://registry.npmmirror.com/new-array/-/new-array-1.0.0.tgz",
21700
- "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A=="
21701
- },
21702
  "node_modules/next-tick": {
21703
  "version": "1.1.0",
21704
  "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz",
21705
  "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
21706
  "dev": true
21707
  },
21708
- "node_modules/ngraph.events": {
21709
- "version": "1.2.2",
21710
- "resolved": "https://registry.npmmirror.com/ngraph.events/-/ngraph.events-1.2.2.tgz",
21711
- "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ=="
21712
- },
21713
- "node_modules/ngraph.forcelayout": {
21714
- "version": "3.3.1",
21715
- "resolved": "https://registry.npmmirror.com/ngraph.forcelayout/-/ngraph.forcelayout-3.3.1.tgz",
21716
- "integrity": "sha512-MKBuEh1wujyQHFTW57y5vd/uuEOK0XfXYxm3lC7kktjJLRdt/KEKEknyOlc6tjXflqBKEuYBBcu7Ax5VY+S6aw==",
21717
- "dependencies": {
21718
- "ngraph.events": "^1.0.0",
21719
- "ngraph.merge": "^1.0.0",
21720
- "ngraph.random": "^1.0.0"
21721
- }
21722
- },
21723
- "node_modules/ngraph.graph": {
21724
- "version": "20.0.1",
21725
- "resolved": "https://registry.npmmirror.com/ngraph.graph/-/ngraph.graph-20.0.1.tgz",
21726
- "integrity": "sha512-VFsQ+EMkT+7lcJO1QP8Ik3w64WbHJl27Q53EO9hiFU9CRyxJ8HfcXtfWz/U8okuoYKDctbciL6pX3vG5dt1rYA==",
21727
- "dependencies": {
21728
- "ngraph.events": "^1.2.1"
21729
- }
21730
- },
21731
- "node_modules/ngraph.merge": {
21732
- "version": "1.0.0",
21733
- "resolved": "https://registry.npmmirror.com/ngraph.merge/-/ngraph.merge-1.0.0.tgz",
21734
- "integrity": "sha512-5J8YjGITUJeapsomtTALYsw7rFveYkM+lBj3QiYZ79EymQcuri65Nw3knQtFxQBU1r5iOaVRXrSwMENUPK62Vg=="
21735
- },
21736
- "node_modules/ngraph.random": {
21737
- "version": "1.1.0",
21738
- "resolved": "https://registry.npmmirror.com/ngraph.random/-/ngraph.random-1.1.0.tgz",
21739
- "integrity": "sha512-h25UdUN/g8U7y29TzQtRm/GvGr70lK37yQPvPKXXuVfs7gCm82WipYFZcksQfeKumtOemAzBIcT7lzzyK/edLw=="
21740
- },
21741
- "node_modules/nice-color-palettes": {
21742
- "version": "3.0.0",
21743
- "resolved": "https://registry.npmmirror.com/nice-color-palettes/-/nice-color-palettes-3.0.0.tgz",
21744
- "integrity": "sha512-lL4AjabAAFi313tjrtmgm/bxCRzp4l3vCshojfV/ij3IPdtnRqv6Chcw+SqJUhbe7g3o3BecaqCJYUNLswGBhQ==",
21745
- "dependencies": {
21746
- "got": "^9.2.2",
21747
- "map-limit": "0.0.1",
21748
- "minimist": "^1.2.0",
21749
- "new-array": "^1.0.0"
21750
- },
21751
- "bin": {
21752
- "nice-color-palettes": "bin/index.js"
21753
- }
21754
- },
21755
- "node_modules/nipplejs": {
21756
- "version": "0.10.2",
21757
- "resolved": "https://registry.npmmirror.com/nipplejs/-/nipplejs-0.10.2.tgz",
21758
- "integrity": "sha512-XGxFY8C2DOtobf1fK+MXINTzkkXJLjZDDpfQhOUZf4TSytbc9s4bmA0lB9eKKM8iDivdr9NQkO7DpIQfsST+9g=="
21759
- },
21760
  "node_modules/no-case": {
21761
  "version": "3.0.4",
21762
  "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz",
@@ -21990,19 +21630,6 @@
21990
  "node": ">=0.10.0"
21991
  }
21992
  },
21993
- "node_modules/normalize-url": {
21994
- "version": "4.5.1",
21995
- "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-4.5.1.tgz",
21996
- "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
21997
- "engines": {
21998
- "node": ">=8"
21999
- }
22000
- },
22001
- "node_modules/nosleep.js": {
22002
- "version": "0.7.0",
22003
- "resolved": "https://registry.npmmirror.com/nosleep.js/-/nosleep.js-0.7.0.tgz",
22004
- "integrity": "sha512-Z4B1HgvzR+en62ghwZf6BwAR6x4/pjezsiMcbF9KMLh7xoscpoYhaSXfY3lLkqC68AtW+/qLJ1lzvBIj0FGaTA=="
22005
- },
22006
  "node_modules/npm-run-path": {
22007
  "version": "4.0.1",
22008
  "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -22343,14 +21970,6 @@
22343
  "node": ">=6"
22344
  }
22345
  },
22346
- "node_modules/p-cancelable": {
22347
- "version": "1.1.0",
22348
- "resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-1.1.0.tgz",
22349
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
22350
- "engines": {
22351
- "node": ">=6"
22352
- }
22353
- },
22354
  "node_modules/p-event": {
22355
  "version": "4.2.0",
22356
  "resolved": "https://registry.npmmirror.com/p-event/-/p-event-4.2.0.tgz",
@@ -22493,25 +22112,6 @@
22493
  "node": ">= 0.10"
22494
  }
22495
  },
22496
- "node_modules/parse-bmfont-ascii": {
22497
- "version": "1.0.6",
22498
- "resolved": "https://registry.npmmirror.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
22499
- "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="
22500
- },
22501
- "node_modules/parse-bmfont-binary": {
22502
- "version": "1.0.6",
22503
- "resolved": "https://registry.npmmirror.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
22504
- "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="
22505
- },
22506
- "node_modules/parse-bmfont-xml": {
22507
- "version": "1.1.6",
22508
- "resolved": "https://registry.npmmirror.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz",
22509
- "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==",
22510
- "dependencies": {
22511
- "xml-parse-from-string": "^1.0.0",
22512
- "xml2js": "^0.5.0"
22513
- }
22514
- },
22515
  "node_modules/parse-entities": {
22516
  "version": "4.0.1",
22517
  "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.1.tgz",
@@ -22532,11 +22132,6 @@
22532
  "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.10.tgz",
22533
  "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
22534
  },
22535
- "node_modules/parse-headers": {
22536
- "version": "2.0.5",
22537
- "resolved": "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz",
22538
- "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
22539
- },
22540
  "node_modules/parse-json": {
22541
  "version": "5.2.0",
22542
  "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz",
@@ -22691,17 +22286,6 @@
22691
  "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
22692
  "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
22693
  },
22694
- "node_modules/phin": {
22695
- "version": "3.7.1",
22696
- "resolved": "https://registry.npmmirror.com/phin/-/phin-3.7.1.tgz",
22697
- "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==",
22698
- "dependencies": {
22699
- "centra": "^2.7.0"
22700
- },
22701
- "engines": {
22702
- "node": ">= 8"
22703
- }
22704
- },
22705
  "node_modules/picocolors": {
22706
  "version": "1.0.0",
22707
  "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
@@ -22918,17 +22502,6 @@
22918
  "resolved": "https://registry.npmmirror.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz",
22919
  "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="
22920
  },
22921
- "node_modules/polished": {
22922
- "version": "4.3.1",
22923
- "resolved": "https://registry.npmmirror.com/polished/-/polished-4.3.1.tgz",
22924
- "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==",
22925
- "dependencies": {
22926
- "@babel/runtime": "^7.17.8"
22927
- },
22928
- "engines": {
22929
- "node": ">=10"
22930
- }
22931
- },
22932
  "node_modules/posix-character-classes": {
22933
  "version": "0.1.1",
22934
  "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -23621,14 +23194,6 @@
23621
  "node": ">= 0.8.0"
23622
  }
23623
  },
23624
- "node_modules/prepend-http": {
23625
- "version": "2.0.0",
23626
- "resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
23627
- "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
23628
- "engines": {
23629
- "node": ">=4"
23630
- }
23631
- },
23632
  "node_modules/prettier": {
23633
  "version": "3.2.4",
23634
  "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.2.4.tgz",
@@ -23829,15 +23394,6 @@
23829
  "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz",
23830
  "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
23831
  },
23832
- "node_modules/pump": {
23833
- "version": "3.0.0",
23834
- "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz",
23835
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
23836
- "dependencies": {
23837
- "end-of-stream": "^1.1.0",
23838
- "once": "^1.3.1"
23839
- }
23840
- },
23841
  "node_modules/punycode": {
23842
  "version": "1.4.1",
23843
  "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz",
@@ -23895,16 +23451,6 @@
23895
  "node": ">=0.6"
23896
  }
23897
  },
23898
- "node_modules/quad-indices": {
23899
- "version": "2.0.1",
23900
- "resolved": "https://registry.npmmirror.com/quad-indices/-/quad-indices-2.0.1.tgz",
23901
- "integrity": "sha512-6jtmCsEbGAh5npThXrBaubbTjPcF0rMbn57XCJVI7LkW8PUT56V+uIrRCCWCn85PSgJC9v8Pm5tnJDwmOBewvA==",
23902
- "dependencies": {
23903
- "an-array": "^1.0.0",
23904
- "dtype": "^2.0.0",
23905
- "is-buffer": "^1.0.2"
23906
- }
23907
- },
23908
  "node_modules/query-string": {
23909
  "version": "6.14.1",
23910
  "resolved": "https://registry.npmmirror.com/query-string/-/query-string-6.14.1.tgz",
@@ -24972,6 +24518,22 @@
24972
  "node": ">=6"
24973
  }
24974
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24975
  "node_modules/react-error-boundary": {
24976
  "version": "4.0.13",
24977
  "resolved": "https://registry.npmmirror.com/react-error-boundary/-/react-error-boundary-4.0.13.tgz",
@@ -24993,25 +24555,6 @@
24993
  "resolved": "https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
24994
  "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
24995
  },
24996
- "node_modules/react-force-graph": {
24997
- "version": "1.44.4",
24998
- "resolved": "https://registry.npmmirror.com/react-force-graph/-/react-force-graph-1.44.4.tgz",
24999
- "integrity": "sha512-mi/jRKssT++kl2R1YonFi/2hpK+a1omz6AvJ/oQa++HbXrRGtxg/xo1skO04tGZ/dUbR6SqJcpoUPYHzEle9mA==",
25000
- "dependencies": {
25001
- "3d-force-graph": "1",
25002
- "3d-force-graph-ar": "1",
25003
- "3d-force-graph-vr": "2",
25004
- "force-graph": "1",
25005
- "prop-types": "15",
25006
- "react-kapsule": "2"
25007
- },
25008
- "engines": {
25009
- "node": ">=12"
25010
- },
25011
- "peerDependencies": {
25012
- "react": "*"
25013
- }
25014
- },
25015
  "node_modules/react-helmet-async": {
25016
  "version": "1.3.0",
25017
  "resolved": "https://registry.npmmirror.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz",
@@ -25088,21 +24631,6 @@
25088
  "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz",
25089
  "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
25090
  },
25091
- "node_modules/react-kapsule": {
25092
- "version": "2.4.0",
25093
- "resolved": "https://registry.npmmirror.com/react-kapsule/-/react-kapsule-2.4.0.tgz",
25094
- "integrity": "sha512-w4Yv9CgWdj8kWGQEPNWFGJJ08dYEZHZpiaFR/DgZjCMBNqv9wus2Gy1qvHVJmJbzvAZbq6jdvFC+NYzEqAlNhQ==",
25095
- "dependencies": {
25096
- "fromentries": "^1.3.2",
25097
- "jerrypick": "^1.1.1"
25098
- },
25099
- "engines": {
25100
- "node": ">=12"
25101
- },
25102
- "peerDependencies": {
25103
- "react": ">=16.13.1"
25104
- }
25105
- },
25106
  "node_modules/react-lifecycles-compat": {
25107
  "version": "3.0.4",
25108
  "resolved": "https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
@@ -26980,14 +26508,6 @@
26980
  "node": ">=10"
26981
  }
26982
  },
26983
- "node_modules/responselike": {
26984
- "version": "1.0.2",
26985
- "resolved": "https://registry.npmmirror.com/responselike/-/responselike-1.0.2.tgz",
26986
- "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==",
26987
- "dependencies": {
26988
- "lowercase-keys": "^1.0.0"
26989
- }
26990
- },
26991
  "node_modules/restore-cursor": {
26992
  "version": "4.0.0",
26993
  "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz",
@@ -27178,7 +26698,8 @@
27178
  "node_modules/sax": {
27179
  "version": "1.3.0",
27180
  "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz",
27181
- "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
 
27182
  },
27183
  "node_modules/saxes": {
27184
  "version": "6.0.0",
@@ -27669,6 +27190,15 @@
27669
  "atomic-sleep": "^1.0.0"
27670
  }
27671
  },
 
 
 
 
 
 
 
 
 
27672
  "node_modules/sort-object-keys": {
27673
  "version": "1.1.3",
27674
  "resolved": "https://registry.npmmirror.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz",
@@ -28462,11 +27992,6 @@
28462
  "url": "https://github.com/sponsors/isaacs"
28463
  }
28464
  },
28465
- "node_modules/super-animejs": {
28466
- "version": "3.1.0",
28467
- "resolved": "https://registry.npmmirror.com/super-animejs/-/super-animejs-3.1.0.tgz",
28468
- "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA=="
28469
- },
28470
  "node_modules/superjson": {
28471
  "version": "1.13.3",
28472
  "resolved": "https://registry.npmmirror.com/superjson/-/superjson-1.13.3.tgz",
@@ -28946,71 +28471,6 @@
28946
  "real-require": "^0.1.0"
28947
  }
28948
  },
28949
- "node_modules/three": {
28950
- "version": "0.167.0",
28951
- "resolved": "https://registry.npmmirror.com/three/-/three-0.167.0.tgz",
28952
- "integrity": "sha512-9Y1a66fpjqF3rhq7ivKTaKtjQLZ97Hj/lZ00DmZWaKHaQFH4uzYT1znwRDWQOcgMmCcOloQzo61gDmqO8l9xmA=="
28953
- },
28954
- "node_modules/three-bmfont-text": {
28955
- "version": "3.0.0",
28956
- "resolved": "git+ssh://[email protected]/dmarcos/three-bmfont-text.git#eed4878795be9b3e38cf6aec6b903f56acd1f695",
28957
- "integrity": "sha512-5KULChxHm4qAQZx1MfEF5ADC+2PEX5Gvo2eiEiF9N4RyTNPpHPBRSpW5n8LyD8gOwC0TAdWwafoOGrqPCR1sUA==",
28958
- "license": "MIT",
28959
- "dependencies": {
28960
- "array-shuffle": "^1.0.1",
28961
- "layout-bmfont-text": "^1.2.0",
28962
- "nice-color-palettes": "^3.0.0",
28963
- "quad-indices": "^2.0.1"
28964
- }
28965
- },
28966
- "node_modules/three-forcegraph": {
28967
- "version": "1.41.14",
28968
- "resolved": "https://registry.npmmirror.com/three-forcegraph/-/three-forcegraph-1.41.14.tgz",
28969
- "integrity": "sha512-W/cZElLXO0l6ffdMmDakh4bUGSYuSv/YxInOHMN9KAQgDwJ8904SOBh8qkTnGu7UPsi0mAsrUgkfViW8heloTA==",
28970
- "dependencies": {
28971
- "accessor-fn": "1",
28972
- "d3-array": "1 - 3",
28973
- "d3-force-3d": "2 - 3",
28974
- "d3-scale": "1 - 4",
28975
- "d3-scale-chromatic": "1 - 3",
28976
- "data-joint": "1",
28977
- "kapsule": "1",
28978
- "ngraph.forcelayout": "3",
28979
- "ngraph.graph": "20",
28980
- "tinycolor2": "1"
28981
- },
28982
- "engines": {
28983
- "node": ">=12"
28984
- },
28985
- "peerDependencies": {
28986
- "three": ">=0.118.3"
28987
- }
28988
- },
28989
- "node_modules/three-pathfinding": {
28990
- "version": "1.3.0",
28991
- "resolved": "https://registry.npmmirror.com/three-pathfinding/-/three-pathfinding-1.3.0.tgz",
28992
- "integrity": "sha512-LKxMI3/YqdMYvt6AdE2vB6s5ueDFczt/DWoxhtPNgRsH6E0D8LMYQxz+eIrmKo0MQpDvMVzXYUMBk+b86+k97w==",
28993
- "peerDependencies": {
28994
- "three": "0.x.x"
28995
- }
28996
- },
28997
- "node_modules/three-render-objects": {
28998
- "version": "1.29.4",
28999
- "resolved": "https://registry.npmmirror.com/three-render-objects/-/three-render-objects-1.29.4.tgz",
29000
- "integrity": "sha512-E6YwTN5zNsaMjo/5rosgnK44b1aq//3YJGJ5BxG9t7+euRm7ZAmNX3NIqFkoDhKtFC5WLoOxZjyNoq8Uc49gaA==",
29001
- "dependencies": {
29002
- "@tweenjs/tween.js": "18 - 23",
29003
- "accessor-fn": "1",
29004
- "kapsule": "1",
29005
- "polished": "4"
29006
- },
29007
- "engines": {
29008
- "node": ">=12"
29009
- },
29010
- "peerDependencies": {
29011
- "three": "*"
29012
- }
29013
- },
29014
  "node_modules/throttle-debounce": {
29015
  "version": "5.0.0",
29016
  "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
@@ -29097,14 +28557,6 @@
29097
  "node": ">=0.10.0"
29098
  }
29099
  },
29100
- "node_modules/to-readable-stream": {
29101
- "version": "1.0.0",
29102
- "resolved": "https://registry.npmmirror.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
29103
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
29104
- "engines": {
29105
- "node": ">=6"
29106
- }
29107
- },
29108
  "node_modules/to-regex": {
29109
  "version": "3.0.2",
29110
  "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz",
@@ -29284,9 +28736,9 @@
29284
  }
29285
  },
29286
  "node_modules/tslib": {
29287
- "version": "2.6.2",
29288
- "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz",
29289
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
29290
  },
29291
  "node_modules/tsutils": {
29292
  "version": "3.21.0",
@@ -29917,17 +29369,6 @@
29917
  "requires-port": "^1.0.0"
29918
  }
29919
  },
29920
- "node_modules/url-parse-lax": {
29921
- "version": "3.0.0",
29922
- "resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
29923
- "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
29924
- "dependencies": {
29925
- "prepend-http": "^2.0.0"
29926
- },
29927
- "engines": {
29928
- "node": ">=4"
29929
- }
29930
- },
29931
  "node_modules/use": {
29932
  "version": "3.1.1",
29933
  "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz",
@@ -30832,19 +30273,6 @@
30832
  "node": ">=10.13.0"
30833
  }
30834
  },
30835
- "node_modules/webvr-polyfill": {
30836
- "version": "0.10.12",
30837
- "resolved": "https://registry.npmmirror.com/webvr-polyfill/-/webvr-polyfill-0.10.12.tgz",
30838
- "integrity": "sha512-trDJEVUQnRIVAnmImjEQ0BlL1NfuWl8+eaEdu+bs4g59c7OtETi/5tFkgEFDRaWEYwHntXs/uFF3OXZuutNGGA==",
30839
- "dependencies": {
30840
- "cardboard-vr-display": "^1.0.19"
30841
- }
30842
- },
30843
- "node_modules/webvr-polyfill-dpdb": {
30844
- "version": "1.0.18",
30845
- "resolved": "https://registry.npmmirror.com/webvr-polyfill-dpdb/-/webvr-polyfill-dpdb-1.0.18.tgz",
30846
- "integrity": "sha512-O0S1ZGEWyPvyZEkS2VbyV7mtir/NM9MNK3EuhbHPoJ8EHTky2pTXehjIl+IiDPr+Lldgx129QGt3NGly7rwRPw=="
30847
- },
30848
  "node_modules/whatwg-encoding": {
30849
  "version": "2.0.0",
30850
  "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
@@ -30958,11 +30386,6 @@
30958
  "node": ">= 0.4"
30959
  }
30960
  },
30961
- "node_modules/word-wrapper": {
30962
- "version": "1.0.7",
30963
- "resolved": "https://registry.npmmirror.com/word-wrapper/-/word-wrapper-1.0.7.tgz",
30964
- "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ=="
30965
- },
30966
  "node_modules/workerize-loader": {
30967
  "version": "2.0.2",
30968
  "resolved": "https://registry.npmmirror.com/workerize-loader/-/workerize-loader-2.0.2.tgz",
@@ -31099,17 +30522,6 @@
31099
  }
31100
  }
31101
  },
31102
- "node_modules/xhr": {
31103
- "version": "2.6.0",
31104
- "resolved": "https://registry.npmmirror.com/xhr/-/xhr-2.6.0.tgz",
31105
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
31106
- "dependencies": {
31107
- "global": "~4.4.0",
31108
- "is-function": "^1.0.1",
31109
- "parse-headers": "^2.0.0",
31110
- "xtend": "^4.0.0"
31111
- }
31112
- },
31113
  "node_modules/xml-name-validator": {
31114
  "version": "4.0.0",
31115
  "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
@@ -31119,31 +30531,6 @@
31119
  "node": ">=12"
31120
  }
31121
  },
31122
- "node_modules/xml-parse-from-string": {
31123
- "version": "1.0.1",
31124
- "resolved": "https://registry.npmmirror.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
31125
- "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="
31126
- },
31127
- "node_modules/xml2js": {
31128
- "version": "0.5.0",
31129
- "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz",
31130
- "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
31131
- "dependencies": {
31132
- "sax": ">=0.6.0",
31133
- "xmlbuilder": "~11.0.0"
31134
- },
31135
- "engines": {
31136
- "node": ">=4.0.0"
31137
- }
31138
- },
31139
- "node_modules/xml2js/node_modules/xmlbuilder": {
31140
- "version": "11.0.1",
31141
- "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
31142
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
31143
- "engines": {
31144
- "node": ">=4.0"
31145
- }
31146
- },
31147
  "node_modules/xmlbuilder": {
31148
  "version": "10.1.1",
31149
  "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz",
 
22
  "@radix-ui/react-label": "^2.1.0",
23
  "@radix-ui/react-navigation-menu": "^1.2.1",
24
  "@radix-ui/react-popover": "^1.1.2",
25
+ "@radix-ui/react-progress": "^1.1.1",
26
+ "@radix-ui/react-scroll-area": "^1.2.2",
27
  "@radix-ui/react-select": "^2.1.2",
28
  "@radix-ui/react-separator": "^1.1.0",
29
  "@radix-ui/react-slider": "^1.2.1",
 
61
  "openai-speech-stream-player": "^1.0.8",
62
  "rc-tween-one": "^3.0.6",
63
  "react-copy-to-clipboard": "^5.1.0",
64
+ "react-dropzone": "^14.3.5",
65
  "react-error-boundary": "^4.0.13",
 
66
  "react-hook-form": "^7.53.1",
67
  "react-i18next": "^14.0.0",
68
  "react-infinite-scroll-component": "^6.1.0",
 
76
  "rehype-raw": "^7.0.0",
77
  "remark-gfm": "^4.0.0",
78
  "remark-math": "^6.0.0",
79
+ "sonner": "^1.7.1",
80
  "tailwind-merge": "^2.5.4",
81
  "tailwindcss-animate": "^1.0.7",
82
  "umi": "^4.0.90",
 
4965
  }
4966
  }
4967
  },
4968
+ "node_modules/@radix-ui/react-progress": {
4969
+ "version": "1.1.1",
4970
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-progress/-/react-progress-1.1.1.tgz",
4971
+ "integrity": "sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==",
4972
+ "dependencies": {
4973
+ "@radix-ui/react-context": "1.1.1",
4974
+ "@radix-ui/react-primitive": "2.0.1"
4975
+ },
4976
+ "peerDependencies": {
4977
+ "@types/react": "*",
4978
+ "@types/react-dom": "*",
4979
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
4980
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
4981
+ },
4982
+ "peerDependenciesMeta": {
4983
+ "@types/react": {
4984
+ "optional": true
4985
+ },
4986
+ "@types/react-dom": {
4987
+ "optional": true
4988
+ }
4989
+ }
4990
+ },
4991
+ "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-compose-refs": {
4992
+ "version": "1.1.1",
4993
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
4994
+ "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
4995
+ "peerDependencies": {
4996
+ "@types/react": "*",
4997
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
4998
+ },
4999
+ "peerDependenciesMeta": {
5000
+ "@types/react": {
5001
+ "optional": true
5002
+ }
5003
+ }
5004
+ },
5005
+ "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": {
5006
+ "version": "2.0.1",
5007
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz",
5008
+ "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==",
5009
+ "dependencies": {
5010
+ "@radix-ui/react-slot": "1.1.1"
5011
+ },
5012
+ "peerDependencies": {
5013
+ "@types/react": "*",
5014
+ "@types/react-dom": "*",
5015
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
5016
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
5017
+ },
5018
+ "peerDependenciesMeta": {
5019
+ "@types/react": {
5020
+ "optional": true
5021
+ },
5022
+ "@types/react-dom": {
5023
+ "optional": true
5024
+ }
5025
+ }
5026
+ },
5027
+ "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-slot": {
5028
+ "version": "1.1.1",
5029
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz",
5030
+ "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==",
5031
+ "dependencies": {
5032
+ "@radix-ui/react-compose-refs": "1.1.1"
5033
+ },
5034
+ "peerDependencies": {
5035
+ "@types/react": "*",
5036
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
5037
+ },
5038
+ "peerDependenciesMeta": {
5039
+ "@types/react": {
5040
+ "optional": true
5041
+ }
5042
+ }
5043
+ },
5044
  "node_modules/@radix-ui/react-roving-focus": {
5045
  "version": "1.1.0",
5046
  "resolved": "https://registry.npmmirror.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz",
 
5085
  }
5086
  }
5087
  },
5088
+ "node_modules/@radix-ui/react-scroll-area": {
5089
+ "version": "1.2.2",
5090
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.2.tgz",
5091
+ "integrity": "sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==",
5092
+ "dependencies": {
5093
+ "@radix-ui/number": "1.1.0",
5094
+ "@radix-ui/primitive": "1.1.1",
5095
+ "@radix-ui/react-compose-refs": "1.1.1",
5096
+ "@radix-ui/react-context": "1.1.1",
5097
+ "@radix-ui/react-direction": "1.1.0",
5098
+ "@radix-ui/react-presence": "1.1.2",
5099
+ "@radix-ui/react-primitive": "2.0.1",
5100
+ "@radix-ui/react-use-callback-ref": "1.1.0",
5101
+ "@radix-ui/react-use-layout-effect": "1.1.0"
5102
+ },
5103
+ "peerDependencies": {
5104
+ "@types/react": "*",
5105
+ "@types/react-dom": "*",
5106
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
5107
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
5108
+ },
5109
+ "peerDependenciesMeta": {
5110
+ "@types/react": {
5111
+ "optional": true
5112
+ },
5113
+ "@types/react-dom": {
5114
+ "optional": true
5115
+ }
5116
+ }
5117
+ },
5118
+ "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/primitive": {
5119
+ "version": "1.1.1",
5120
+ "resolved": "https://registry.npmmirror.com/@radix-ui/primitive/-/primitive-1.1.1.tgz",
5121
+ "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA=="
5122
+ },
5123
+ "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-compose-refs": {
5124
+ "version": "1.1.1",
5125
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
5126
+ "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
5127
+ "peerDependencies": {
5128
+ "@types/react": "*",
5129
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
5130
+ },
5131
+ "peerDependenciesMeta": {
5132
+ "@types/react": {
5133
+ "optional": true
5134
+ }
5135
+ }
5136
+ },
5137
+ "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-presence": {
5138
+ "version": "1.1.2",
5139
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-presence/-/react-presence-1.1.2.tgz",
5140
+ "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
5141
+ "dependencies": {
5142
+ "@radix-ui/react-compose-refs": "1.1.1",
5143
+ "@radix-ui/react-use-layout-effect": "1.1.0"
5144
+ },
5145
+ "peerDependencies": {
5146
+ "@types/react": "*",
5147
+ "@types/react-dom": "*",
5148
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
5149
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
5150
+ },
5151
+ "peerDependenciesMeta": {
5152
+ "@types/react": {
5153
+ "optional": true
5154
+ },
5155
+ "@types/react-dom": {
5156
+ "optional": true
5157
+ }
5158
+ }
5159
+ },
5160
+ "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-primitive": {
5161
+ "version": "2.0.1",
5162
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz",
5163
+ "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==",
5164
+ "dependencies": {
5165
+ "@radix-ui/react-slot": "1.1.1"
5166
+ },
5167
+ "peerDependencies": {
5168
+ "@types/react": "*",
5169
+ "@types/react-dom": "*",
5170
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
5171
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
5172
+ },
5173
+ "peerDependenciesMeta": {
5174
+ "@types/react": {
5175
+ "optional": true
5176
+ },
5177
+ "@types/react-dom": {
5178
+ "optional": true
5179
+ }
5180
+ }
5181
+ },
5182
+ "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-slot": {
5183
+ "version": "1.1.1",
5184
+ "resolved": "https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz",
5185
+ "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==",
5186
+ "dependencies": {
5187
+ "@radix-ui/react-compose-refs": "1.1.1"
5188
+ },
5189
+ "peerDependencies": {
5190
+ "@types/react": "*",
5191
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
5192
+ },
5193
+ "peerDependenciesMeta": {
5194
+ "@types/react": {
5195
+ "optional": true
5196
+ }
5197
+ }
5198
+ },
5199
  "node_modules/@radix-ui/react-select": {
5200
  "version": "2.1.2",
5201
  "resolved": "https://registry.npmmirror.com/@radix-ui/react-select/-/react-select-2.1.2.tgz",
 
5788
  "resolved": "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz",
5789
  "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="
5790
  },
 
 
 
 
 
 
 
 
5791
  "node_modules/@sinonjs/commons": {
5792
  "version": "3.0.1",
5793
  "resolved": "https://registry.npmmirror.com/@sinonjs/commons/-/commons-3.0.1.tgz",
 
5996
  "tslib": "^2.4.0"
5997
  }
5998
  },
 
 
 
 
 
 
 
 
 
 
 
5999
  "node_modules/@tailwindcss/line-clamp": {
6000
  "version": "0.4.4",
6001
  "resolved": "https://registry.npmmirror.com/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz",
 
6397
  "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
6398
  "devOptional": true
6399
  },
 
 
 
 
 
6400
  "node_modules/@types/aria-query": {
6401
  "version": "5.0.4",
6402
  "resolved": "https://registry.npmmirror.com/@types/aria-query/-/aria-query-5.0.4.tgz",
 
9011
  "d3-zoom": "^3.0.0"
9012
  }
9013
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9014
  "node_modules/abab": {
9015
  "version": "2.0.6",
9016
  "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz",
 
9030
  "node": ">= 0.6"
9031
  }
9032
  },
 
 
 
 
 
 
 
 
9033
  "node_modules/acorn": {
9034
  "version": "8.11.3",
9035
  "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz",
 
9095
  "node": ">= 10.0.0"
9096
  }
9097
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9098
  "node_modules/agent-base": {
9099
  "version": "6.0.2",
9100
  "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
 
9160
  "ajv": "^6.9.1"
9161
  }
9162
  },
 
 
 
 
 
9163
  "node_modules/ansi-escapes": {
9164
  "version": "4.3.2",
9165
  "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
 
9391
  "node": ">= 0.4"
9392
  }
9393
  },
 
 
 
 
 
 
 
 
9394
  "node_modules/array-tree-filter": {
9395
  "version": "2.1.0",
9396
  "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
 
9505
  "node": ">=0.10.0"
9506
  }
9507
  },
 
 
 
 
 
9508
  "node_modules/asn1.js": {
9509
  "version": "4.10.1",
9510
  "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-4.10.1.tgz",
 
9629
  "node": ">=8.0.0"
9630
  }
9631
  },
9632
+ "node_modules/attr-accept": {
9633
+ "version": "2.2.5",
9634
+ "resolved": "https://registry.npmmirror.com/attr-accept/-/attr-accept-2.2.5.tgz",
9635
+ "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==",
9636
+ "engines": {
9637
+ "node": ">=4"
9638
+ }
9639
+ },
9640
  "node_modules/autoprefixer": {
9641
  "version": "10.4.19",
9642
  "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.19.tgz",
 
9895
  "url": "https://github.com/sponsors/wooorm"
9896
  }
9897
  },
 
 
 
 
 
 
 
 
 
9898
  "node_modules/big-integer": {
9899
  "version": "1.6.52",
9900
  "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz",
 
10184
  "isarray": "^1.0.0"
10185
  }
10186
  },
 
 
 
 
 
 
 
 
10187
  "node_modules/buffer-from": {
10188
  "version": "1.1.2",
10189
  "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
 
10258
  "node": ">=0.10.0"
10259
  }
10260
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10261
  "node_modules/call-bind": {
10262
  "version": "1.0.7",
10263
  "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz",
 
10346
  "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz",
10347
  "integrity": "sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg=="
10348
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10349
  "node_modules/ccount": {
10350
  "version": "2.0.1",
10351
  "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz",
10352
  "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
10353
  },
 
 
 
 
 
 
 
 
10354
  "node_modules/chalk": {
10355
  "version": "2.4.2",
10356
  "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
 
10694
  "node": ">=12"
10695
  }
10696
  },
 
 
 
 
 
 
 
 
 
 
 
10697
  "node_modules/clsx": {
10698
  "version": "2.1.1",
10699
  "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz",
 
11930
  "node": ">=12"
11931
  }
11932
  },
 
 
 
 
 
 
 
 
 
 
 
 
11933
  "node_modules/d3-scale/node_modules/d3-array": {
11934
  "version": "3.2.4",
11935
  "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz",
 
12043
  "lodash": "^4.17.15"
12044
  }
12045
  },
 
 
 
 
 
 
 
 
 
 
 
12046
  "node_modules/data-uri-to-buffer": {
12047
  "version": "4.0.1",
12048
  "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
 
12183
  "node": ">=0.10"
12184
  }
12185
  },
 
 
 
 
 
 
 
 
 
 
 
12186
  "node_modules/dedent": {
12187
  "version": "1.5.3",
12188
  "resolved": "https://registry.npmmirror.com/dedent/-/dedent-1.5.3.tgz",
 
12197
  }
12198
  }
12199
  },
 
 
 
 
 
 
 
 
 
 
 
12200
  "node_modules/deep-is": {
12201
  "version": "0.1.4",
12202
  "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz",
 
12318
  "node": ">=12"
12319
  }
12320
  },
 
 
 
 
 
12321
  "node_modules/define-data-property": {
12322
  "version": "1.1.4",
12323
  "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",
 
12608
  "node_modules/dom-walk": {
12609
  "version": "0.1.2",
12610
  "resolved": "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz",
12611
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
12612
+ "dev": true
12613
  },
12614
  "node_modules/domain-browser": {
12615
  "version": "1.2.0",
 
12680
  "tslib": "^2.0.3"
12681
  }
12682
  },
 
 
 
 
 
 
 
 
12683
  "node_modules/duck": {
12684
  "version": "0.1.12",
12685
  "resolved": "https://registry.npmmirror.com/duck/-/duck-0.1.12.tgz",
 
12694
  "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
12695
  "dev": true
12696
  },
 
 
 
 
 
12697
  "node_modules/duplexify": {
12698
  "version": "4.1.2",
12699
  "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.2.tgz",
 
14274
  "node": "^10.12.0 || >=12.0.0"
14275
  }
14276
  },
14277
+ "node_modules/file-selector": {
14278
+ "version": "2.1.2",
14279
+ "resolved": "https://registry.npmmirror.com/file-selector/-/file-selector-2.1.2.tgz",
14280
+ "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==",
14281
+ "dependencies": {
14282
+ "tslib": "^2.7.0"
14283
+ },
14284
+ "engines": {
14285
+ "node": ">= 12"
14286
+ }
14287
+ },
14288
  "node_modules/filesize": {
14289
  "version": "8.0.7",
14290
  "resolved": "https://registry.npmmirror.com/filesize/-/filesize-8.0.7.tgz",
 
14436
  "node": ">=0.10.0"
14437
  }
14438
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14439
  "node_modules/foreground-child": {
14440
  "version": "3.1.1",
14441
  "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz",
 
14608
  "dependencies": {
14609
  "map-cache": "^0.2.2"
14610
  },
14611
+ "engines": {
14612
+ "node": ">=0.10.0"
14613
+ }
14614
+ },
14615
+ "node_modules/fresh": {
14616
+ "version": "0.5.2",
14617
+ "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
14618
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
14619
+ "engines": {
14620
+ "node": ">= 0.6"
14621
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14622
  },
14623
  "node_modules/front-matter": {
14624
  "version": "4.0.2",
 
14810
  "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz",
14811
  "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA=="
14812
  },
 
 
 
 
 
14813
  "node_modules/glob": {
14814
  "version": "7.2.3",
14815
  "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
 
14847
  "version": "4.4.0",
14848
  "resolved": "https://registry.npmmirror.com/global/-/global-4.4.0.tgz",
14849
  "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
14850
+ "dev": true,
14851
  "dependencies": {
14852
  "min-document": "^2.19.0",
14853
  "process": "^0.11.10"
 
14937
  "get-intrinsic": "^1.1.3"
14938
  }
14939
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14940
  "node_modules/graceful-fs": {
14941
  "version": "4.2.11",
14942
  "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
 
15772
  "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
15773
  "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
15774
  },
 
 
 
 
 
15775
  "node_modules/http-deceiver": {
15776
  "version": "1.2.7",
15777
  "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz",
 
16025
  "node": ">=8"
16026
  }
16027
  },
 
 
 
 
 
 
 
 
16028
  "node_modules/inflight": {
16029
  "version": "1.0.6",
16030
  "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
 
16254
  "node_modules/is-buffer": {
16255
  "version": "1.1.6",
16256
  "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz",
16257
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
16258
+ "dev": true
16259
  },
16260
  "node_modules/is-callable": {
16261
  "version": "1.2.7",
 
16404
  "node": ">=8"
16405
  }
16406
  },
 
 
 
 
 
16407
  "node_modules/is-generator-fn": {
16408
  "version": "2.1.0",
16409
  "resolved": "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
 
16497
  "node": ">= 0.4"
16498
  }
16499
  },
 
 
 
 
 
 
 
 
16500
  "node_modules/is-path-inside": {
16501
  "version": "3.0.3",
16502
  "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz",
 
16860
  "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
16861
  "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg=="
16862
  },
 
 
 
 
 
 
 
 
16863
  "node_modules/jest": {
16864
  "version": "29.7.0",
16865
  "resolved": "https://registry.npmmirror.com/jest/-/jest-29.7.0.tgz",
 
19420
  "node": ">=8"
19421
  }
19422
  },
 
 
 
 
 
 
 
 
 
 
 
19423
  "node_modules/katex": {
19424
  "version": "0.16.11",
19425
  "resolved": "https://registry.npmmirror.com/katex/-/katex-0.16.11.tgz",
 
19472
  "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz",
19473
  "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="
19474
  },
 
 
 
 
 
 
 
 
 
 
19475
  "node_modules/less": {
19476
  "version": "4.1.3",
19477
  "resolved": "https://registry.npmmirror.com/less/-/less-4.1.3.tgz",
 
20025
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
20026
  }
20027
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20028
  "node_modules/loader-runner": {
20029
  "version": "4.3.0",
20030
  "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
 
20074
  "node_modules/lodash-es": {
20075
  "version": "4.17.21",
20076
  "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
20077
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
20078
+ "dev": true,
20079
+ "peer": true
20080
  },
20081
  "node_modules/lodash._reinterpolate": {
20082
  "version": "3.0.0",
 
20317
  "tslib": "^2.0.3"
20318
  }
20319
  },
 
 
 
 
 
 
 
 
20320
  "node_modules/lowlight": {
20321
  "version": "1.20.0",
20322
  "resolved": "https://registry.npmmirror.com/lowlight/-/lowlight-1.20.0.tgz",
 
20419
  "node": ">=0.10.0"
20420
  }
20421
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20422
  "node_modules/map-obj": {
20423
  "version": "4.3.0",
20424
  "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz",
 
21137
  "node": ">=6"
21138
  }
21139
  },
 
 
 
 
 
 
 
 
21140
  "node_modules/min-document": {
21141
  "version": "2.19.0",
21142
  "resolved": "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz",
21143
  "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
21144
+ "dev": true,
21145
  "dependencies": {
21146
  "dom-walk": "^0.1.0"
21147
  }
 
21178
  "node_modules/minimist": {
21179
  "version": "1.2.8",
21180
  "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
21181
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
21182
+ "dev": true
21183
  },
21184
  "node_modules/minimist-options": {
21185
  "version": "4.1.0",
 
21391
  "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==",
21392
  "dev": true
21393
  },
 
 
 
 
 
21394
  "node_modules/next-tick": {
21395
  "version": "1.1.0",
21396
  "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz",
21397
  "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
21398
  "dev": true
21399
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21400
  "node_modules/no-case": {
21401
  "version": "3.0.4",
21402
  "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz",
 
21630
  "node": ">=0.10.0"
21631
  }
21632
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
21633
  "node_modules/npm-run-path": {
21634
  "version": "4.0.1",
21635
  "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
 
21970
  "node": ">=6"
21971
  }
21972
  },
 
 
 
 
 
 
 
 
21973
  "node_modules/p-event": {
21974
  "version": "4.2.0",
21975
  "resolved": "https://registry.npmmirror.com/p-event/-/p-event-4.2.0.tgz",
 
22112
  "node": ">= 0.10"
22113
  }
22114
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22115
  "node_modules/parse-entities": {
22116
  "version": "4.0.1",
22117
  "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.1.tgz",
 
22132
  "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.10.tgz",
22133
  "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
22134
  },
 
 
 
 
 
22135
  "node_modules/parse-json": {
22136
  "version": "5.2.0",
22137
  "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz",
 
22286
  "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
22287
  "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
22288
  },
 
 
 
 
 
 
 
 
 
 
 
22289
  "node_modules/picocolors": {
22290
  "version": "1.0.0",
22291
  "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
 
22502
  "resolved": "https://registry.npmmirror.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz",
22503
  "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="
22504
  },
 
 
 
 
 
 
 
 
 
 
 
22505
  "node_modules/posix-character-classes": {
22506
  "version": "0.1.1",
22507
  "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
 
23194
  "node": ">= 0.8.0"
23195
  }
23196
  },
 
 
 
 
 
 
 
 
23197
  "node_modules/prettier": {
23198
  "version": "3.2.4",
23199
  "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.2.4.tgz",
 
23394
  "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz",
23395
  "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
23396
  },
 
 
 
 
 
 
 
 
 
23397
  "node_modules/punycode": {
23398
  "version": "1.4.1",
23399
  "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz",
 
23451
  "node": ">=0.6"
23452
  }
23453
  },
 
 
 
 
 
 
 
 
 
 
23454
  "node_modules/query-string": {
23455
  "version": "6.14.1",
23456
  "resolved": "https://registry.npmmirror.com/query-string/-/query-string-6.14.1.tgz",
 
24518
  "node": ">=6"
24519
  }
24520
  },
24521
+ "node_modules/react-dropzone": {
24522
+ "version": "14.3.5",
24523
+ "resolved": "https://registry.npmmirror.com/react-dropzone/-/react-dropzone-14.3.5.tgz",
24524
+ "integrity": "sha512-9nDUaEEpqZLOz5v5SUcFA0CjM4vq8YbqO0WRls+EYT7+DvxUdzDPKNCPLqGfj3YL9MsniCLCD4RFA6M95V6KMQ==",
24525
+ "dependencies": {
24526
+ "attr-accept": "^2.2.4",
24527
+ "file-selector": "^2.1.0",
24528
+ "prop-types": "^15.8.1"
24529
+ },
24530
+ "engines": {
24531
+ "node": ">= 10.13"
24532
+ },
24533
+ "peerDependencies": {
24534
+ "react": ">= 16.8 || 18.0.0"
24535
+ }
24536
+ },
24537
  "node_modules/react-error-boundary": {
24538
  "version": "4.0.13",
24539
  "resolved": "https://registry.npmmirror.com/react-error-boundary/-/react-error-boundary-4.0.13.tgz",
 
24555
  "resolved": "https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
24556
  "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
24557
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24558
  "node_modules/react-helmet-async": {
24559
  "version": "1.3.0",
24560
  "resolved": "https://registry.npmmirror.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz",
 
24631
  "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz",
24632
  "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
24633
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24634
  "node_modules/react-lifecycles-compat": {
24635
  "version": "3.0.4",
24636
  "resolved": "https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
 
26508
  "node": ">=10"
26509
  }
26510
  },
 
 
 
 
 
 
 
 
26511
  "node_modules/restore-cursor": {
26512
  "version": "4.0.0",
26513
  "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz",
 
26698
  "node_modules/sax": {
26699
  "version": "1.3.0",
26700
  "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz",
26701
+ "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
26702
+ "optional": true
26703
  },
26704
  "node_modules/saxes": {
26705
  "version": "6.0.0",
 
27190
  "atomic-sleep": "^1.0.0"
27191
  }
27192
  },
27193
+ "node_modules/sonner": {
27194
+ "version": "1.7.1",
27195
+ "resolved": "https://registry.npmmirror.com/sonner/-/sonner-1.7.1.tgz",
27196
+ "integrity": "sha512-b6LHBfH32SoVasRFECrdY8p8s7hXPDn3OHUFbZZbiB1ctLS9Gdh6rpX2dVrpQA0kiL5jcRzDDldwwLkSKk3+QQ==",
27197
+ "peerDependencies": {
27198
+ "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
27199
+ "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
27200
+ }
27201
+ },
27202
  "node_modules/sort-object-keys": {
27203
  "version": "1.1.3",
27204
  "resolved": "https://registry.npmmirror.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz",
 
27992
  "url": "https://github.com/sponsors/isaacs"
27993
  }
27994
  },
 
 
 
 
 
27995
  "node_modules/superjson": {
27996
  "version": "1.13.3",
27997
  "resolved": "https://registry.npmmirror.com/superjson/-/superjson-1.13.3.tgz",
 
28471
  "real-require": "^0.1.0"
28472
  }
28473
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28474
  "node_modules/throttle-debounce": {
28475
  "version": "5.0.0",
28476
  "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
 
28557
  "node": ">=0.10.0"
28558
  }
28559
  },
 
 
 
 
 
 
 
 
28560
  "node_modules/to-regex": {
28561
  "version": "3.0.2",
28562
  "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz",
 
28736
  }
28737
  },
28738
  "node_modules/tslib": {
28739
+ "version": "2.8.1",
28740
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
28741
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
28742
  },
28743
  "node_modules/tsutils": {
28744
  "version": "3.21.0",
 
29369
  "requires-port": "^1.0.0"
29370
  }
29371
  },
 
 
 
 
 
 
 
 
 
 
 
29372
  "node_modules/use": {
29373
  "version": "3.1.1",
29374
  "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz",
 
30273
  "node": ">=10.13.0"
30274
  }
30275
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
30276
  "node_modules/whatwg-encoding": {
30277
  "version": "2.0.0",
30278
  "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
 
30386
  "node": ">= 0.4"
30387
  }
30388
  },
 
 
 
 
 
30389
  "node_modules/workerize-loader": {
30390
  "version": "2.0.2",
30391
  "resolved": "https://registry.npmmirror.com/workerize-loader/-/workerize-loader-2.0.2.tgz",
 
30522
  }
30523
  }
30524
  },
 
 
 
 
 
 
 
 
 
 
 
30525
  "node_modules/xml-name-validator": {
30526
  "version": "4.0.0",
30527
  "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
 
30531
  "node": ">=12"
30532
  }
30533
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30534
  "node_modules/xmlbuilder": {
30535
  "version": "10.1.1",
30536
  "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz",
web/package.json CHANGED
@@ -33,6 +33,8 @@
33
  "@radix-ui/react-label": "^2.1.0",
34
  "@radix-ui/react-navigation-menu": "^1.2.1",
35
  "@radix-ui/react-popover": "^1.1.2",
 
 
36
  "@radix-ui/react-select": "^2.1.2",
37
  "@radix-ui/react-separator": "^1.1.0",
38
  "@radix-ui/react-slider": "^1.2.1",
@@ -70,8 +72,8 @@
70
  "openai-speech-stream-player": "^1.0.8",
71
  "rc-tween-one": "^3.0.6",
72
  "react-copy-to-clipboard": "^5.1.0",
 
73
  "react-error-boundary": "^4.0.13",
74
- "react-force-graph": "^1.44.4",
75
  "react-hook-form": "^7.53.1",
76
  "react-i18next": "^14.0.0",
77
  "react-infinite-scroll-component": "^6.1.0",
@@ -85,6 +87,7 @@
85
  "rehype-raw": "^7.0.0",
86
  "remark-gfm": "^4.0.0",
87
  "remark-math": "^6.0.0",
 
88
  "tailwind-merge": "^2.5.4",
89
  "tailwindcss-animate": "^1.0.7",
90
  "umi": "^4.0.90",
 
33
  "@radix-ui/react-label": "^2.1.0",
34
  "@radix-ui/react-navigation-menu": "^1.2.1",
35
  "@radix-ui/react-popover": "^1.1.2",
36
+ "@radix-ui/react-progress": "^1.1.1",
37
+ "@radix-ui/react-scroll-area": "^1.2.2",
38
  "@radix-ui/react-select": "^2.1.2",
39
  "@radix-ui/react-separator": "^1.1.0",
40
  "@radix-ui/react-slider": "^1.2.1",
 
72
  "openai-speech-stream-player": "^1.0.8",
73
  "rc-tween-one": "^3.0.6",
74
  "react-copy-to-clipboard": "^5.1.0",
75
+ "react-dropzone": "^14.3.5",
76
  "react-error-boundary": "^4.0.13",
 
77
  "react-hook-form": "^7.53.1",
78
  "react-i18next": "^14.0.0",
79
  "react-infinite-scroll-component": "^6.1.0",
 
87
  "rehype-raw": "^7.0.0",
88
  "remark-gfm": "^4.0.0",
89
  "remark-math": "^6.0.0",
90
+ "sonner": "^1.7.1",
91
  "tailwind-merge": "^2.5.4",
92
  "tailwindcss-animate": "^1.0.7",
93
  "umi": "^4.0.90",
web/src/components/file-upload-dialog/index.tsx ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Button } from '@/components/ui/button';
2
+ import {
3
+ Dialog,
4
+ DialogContent,
5
+ DialogFooter,
6
+ DialogHeader,
7
+ DialogTitle,
8
+ } from '@/components/ui/dialog';
9
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
10
+ import { IModalProps } from '@/interfaces/common';
11
+ import { useState } from 'react';
12
+ import { useTranslation } from 'react-i18next';
13
+ import { FileUploader } from '../file-uploader';
14
+
15
+ export function UploaderTabs() {
16
+ const { t } = useTranslation();
17
+
18
+ const [files, setFiles] = useState<File[]>([]);
19
+ console.log('🚀 ~ TabsDemo ~ files:', files);
20
+
21
+ return (
22
+ <Tabs defaultValue="account">
23
+ <TabsList className="grid w-full grid-cols-2 mb-4">
24
+ <TabsTrigger value="account">{t('fileManager.local')}</TabsTrigger>
25
+ <TabsTrigger value="password">{t('fileManager.s3')}</TabsTrigger>
26
+ </TabsList>
27
+ <TabsContent value="account">
28
+ <FileUploader
29
+ maxFileCount={8}
30
+ maxSize={8 * 1024 * 1024}
31
+ onValueChange={setFiles}
32
+ />
33
+ </TabsContent>
34
+ <TabsContent value="password">{t('common.comingSoon')}</TabsContent>
35
+ </Tabs>
36
+ );
37
+ }
38
+
39
+ export function FileUploadDialog({ hideModal }: IModalProps<any>) {
40
+ const { t } = useTranslation();
41
+
42
+ return (
43
+ <Dialog open onOpenChange={hideModal}>
44
+ <DialogContent className="sm:max-w-[425px]">
45
+ <DialogHeader>
46
+ <DialogTitle>{t('fileManager.uploadFile')}</DialogTitle>
47
+ </DialogHeader>
48
+ <UploaderTabs></UploaderTabs>
49
+ <DialogFooter>
50
+ <Button type="submit" variant={'tertiary'} size={'sm'}>
51
+ {t('common.save')}
52
+ </Button>
53
+ </DialogFooter>
54
+ </DialogContent>
55
+ </Dialog>
56
+ );
57
+ }
web/src/components/file-uploader.tsx ADDED
@@ -0,0 +1,332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // https://github.com/sadmann7/file-uploader
2
+
3
+ 'use client';
4
+
5
+ import { FileText, Upload, X } from 'lucide-react';
6
+ import * as React from 'react';
7
+ import Dropzone, {
8
+ type DropzoneProps,
9
+ type FileRejection,
10
+ } from 'react-dropzone';
11
+ import { toast } from 'sonner';
12
+
13
+ import { Button } from '@/components/ui/button';
14
+ import { Progress } from '@/components/ui/progress';
15
+ import { ScrollArea } from '@/components/ui/scroll-area';
16
+ import { useControllableState } from '@/hooks/use-controllable-state';
17
+ import { cn, formatBytes } from '@/lib/utils';
18
+
19
+ function isFileWithPreview(file: File): file is File & { preview: string } {
20
+ return 'preview' in file && typeof file.preview === 'string';
21
+ }
22
+
23
+ interface FileCardProps {
24
+ file: File;
25
+ onRemove: () => void;
26
+ progress?: number;
27
+ }
28
+
29
+ interface FilePreviewProps {
30
+ file: File & { preview: string };
31
+ }
32
+
33
+ function FilePreview({ file }: FilePreviewProps) {
34
+ if (file.type.startsWith('image/')) {
35
+ return (
36
+ <img
37
+ src={file.preview}
38
+ alt={file.name}
39
+ width={48}
40
+ height={48}
41
+ loading="lazy"
42
+ className="aspect-square shrink-0 rounded-md object-cover"
43
+ />
44
+ );
45
+ }
46
+
47
+ return (
48
+ <FileText className="size-10 text-muted-foreground" aria-hidden="true" />
49
+ );
50
+ }
51
+
52
+ function FileCard({ file, progress, onRemove }: FileCardProps) {
53
+ return (
54
+ <div className="relative flex items-center gap-2.5">
55
+ <div className="flex flex-1 gap-2.5">
56
+ {isFileWithPreview(file) ? <FilePreview file={file} /> : null}
57
+ <div className="flex w-full flex-col gap-2">
58
+ <div className="flex flex-col gap-px">
59
+ <p className="line-clamp-1 text-sm font-medium text-foreground/80">
60
+ {file.name}
61
+ </p>
62
+ <p className="text-xs text-muted-foreground">
63
+ {formatBytes(file.size)}
64
+ </p>
65
+ </div>
66
+ {progress ? <Progress value={progress} /> : null}
67
+ </div>
68
+ </div>
69
+ <div className="flex items-center gap-2">
70
+ <Button
71
+ type="button"
72
+ variant="outline"
73
+ size="icon"
74
+ className="size-7"
75
+ onClick={onRemove}
76
+ >
77
+ <X className="size-4" aria-hidden="true" />
78
+ <span className="sr-only">Remove file</span>
79
+ </Button>
80
+ </div>
81
+ </div>
82
+ );
83
+ }
84
+
85
+ interface FileUploaderProps extends React.HTMLAttributes<HTMLDivElement> {
86
+ /**
87
+ * Value of the uploader.
88
+ * @type File[]
89
+ * @default undefined
90
+ * @example value={files}
91
+ */
92
+ value?: File[];
93
+
94
+ /**
95
+ * Function to be called when the value changes.
96
+ * @type (files: File[]) => void
97
+ * @default undefined
98
+ * @example onValueChange={(files) => setFiles(files)}
99
+ */
100
+ onValueChange?: (files: File[]) => void;
101
+
102
+ /**
103
+ * Function to be called when files are uploaded.
104
+ * @type (files: File[]) => Promise<void>
105
+ * @default undefined
106
+ * @example onUpload={(files) => uploadFiles(files)}
107
+ */
108
+ onUpload?: (files: File[]) => Promise<void>;
109
+
110
+ /**
111
+ * Progress of the uploaded files.
112
+ * @type Record<string, number> | undefined
113
+ * @default undefined
114
+ * @example progresses={{ "file1.png": 50 }}
115
+ */
116
+ progresses?: Record<string, number>;
117
+
118
+ /**
119
+ * Accepted file types for the uploader.
120
+ * @type { [key: string]: string[]}
121
+ * @default
122
+ * ```ts
123
+ * { "image/*": [] }
124
+ * ```
125
+ * @example accept={["image/png", "image/jpeg"]}
126
+ */
127
+ accept?: DropzoneProps['accept'];
128
+
129
+ /**
130
+ * Maximum file size for the uploader.
131
+ * @type number | undefined
132
+ * @default 1024 * 1024 * 2 // 2MB
133
+ * @example maxSize={1024 * 1024 * 2} // 2MB
134
+ */
135
+ maxSize?: DropzoneProps['maxSize'];
136
+
137
+ /**
138
+ * Maximum number of files for the uploader.
139
+ * @type number | undefined
140
+ * @default 1
141
+ * @example maxFileCount={4}
142
+ */
143
+ maxFileCount?: DropzoneProps['maxFiles'];
144
+
145
+ /**
146
+ * Whether the uploader should accept multiple files.
147
+ * @type boolean
148
+ * @default false
149
+ * @example multiple
150
+ */
151
+ multiple?: boolean;
152
+
153
+ /**
154
+ * Whether the uploader is disabled.
155
+ * @type boolean
156
+ * @default false
157
+ * @example disabled
158
+ */
159
+ disabled?: boolean;
160
+ }
161
+
162
+ export function FileUploader(props: FileUploaderProps) {
163
+ const {
164
+ value: valueProp,
165
+ onValueChange,
166
+ onUpload,
167
+ progresses,
168
+ accept = {
169
+ 'image/*': [],
170
+ },
171
+ maxSize = 1024 * 1024 * 2,
172
+ maxFileCount = 1,
173
+ multiple = false,
174
+ disabled = false,
175
+ className,
176
+ ...dropzoneProps
177
+ } = props;
178
+
179
+ const [files, setFiles] = useControllableState({
180
+ prop: valueProp,
181
+ onChange: onValueChange,
182
+ });
183
+
184
+ const onDrop = React.useCallback(
185
+ (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {
186
+ if (!multiple && maxFileCount === 1 && acceptedFiles.length > 1) {
187
+ toast.error('Cannot upload more than 1 file at a time');
188
+ return;
189
+ }
190
+
191
+ if ((files?.length ?? 0) + acceptedFiles.length > maxFileCount) {
192
+ toast.error(`Cannot upload more than ${maxFileCount} files`);
193
+ return;
194
+ }
195
+
196
+ const newFiles = acceptedFiles.map((file) =>
197
+ Object.assign(file, {
198
+ preview: URL.createObjectURL(file),
199
+ }),
200
+ );
201
+
202
+ const updatedFiles = files ? [...files, ...newFiles] : newFiles;
203
+
204
+ setFiles(updatedFiles);
205
+
206
+ if (rejectedFiles.length > 0) {
207
+ rejectedFiles.forEach(({ file }) => {
208
+ toast.error(`File ${file.name} was rejected`);
209
+ });
210
+ }
211
+
212
+ if (
213
+ onUpload &&
214
+ updatedFiles.length > 0 &&
215
+ updatedFiles.length <= maxFileCount
216
+ ) {
217
+ const target =
218
+ updatedFiles.length > 0 ? `${updatedFiles.length} files` : `file`;
219
+
220
+ toast.promise(onUpload(updatedFiles), {
221
+ loading: `Uploading ${target}...`,
222
+ success: () => {
223
+ setFiles([]);
224
+ return `${target} uploaded`;
225
+ },
226
+ error: `Failed to upload ${target}`,
227
+ });
228
+ }
229
+ },
230
+
231
+ [files, maxFileCount, multiple, onUpload, setFiles],
232
+ );
233
+
234
+ function onRemove(index: number) {
235
+ if (!files) return;
236
+ const newFiles = files.filter((_, i) => i !== index);
237
+ setFiles(newFiles);
238
+ onValueChange?.(newFiles);
239
+ }
240
+
241
+ // Revoke preview url when component unmounts
242
+ React.useEffect(() => {
243
+ return () => {
244
+ if (!files) return;
245
+ files.forEach((file) => {
246
+ if (isFileWithPreview(file)) {
247
+ URL.revokeObjectURL(file.preview);
248
+ }
249
+ });
250
+ };
251
+ // eslint-disable-next-line react-hooks/exhaustive-deps
252
+ }, []);
253
+
254
+ const isDisabled = disabled || (files?.length ?? 0) >= maxFileCount;
255
+
256
+ return (
257
+ <div className="relative flex flex-col gap-6 overflow-hidden">
258
+ <Dropzone
259
+ onDrop={onDrop}
260
+ accept={accept}
261
+ maxSize={maxSize}
262
+ maxFiles={maxFileCount}
263
+ multiple={maxFileCount > 1 || multiple}
264
+ disabled={isDisabled}
265
+ >
266
+ {({ getRootProps, getInputProps, isDragActive }) => (
267
+ <div
268
+ {...getRootProps()}
269
+ className={cn(
270
+ 'group relative grid h-52 w-full cursor-pointer place-items-center rounded-lg border-2 border-dashed border-muted-foreground/25 px-5 py-2.5 text-center transition hover:bg-muted/25',
271
+ 'ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
272
+ isDragActive && 'border-muted-foreground/50',
273
+ isDisabled && 'pointer-events-none opacity-60',
274
+ className,
275
+ )}
276
+ {...dropzoneProps}
277
+ >
278
+ <input {...getInputProps()} />
279
+ {isDragActive ? (
280
+ <div className="flex flex-col items-center justify-center gap-4 sm:px-5">
281
+ <div className="rounded-full border border-dashed p-3">
282
+ <Upload
283
+ className="size-7 text-muted-foreground"
284
+ aria-hidden="true"
285
+ />
286
+ </div>
287
+ <p className="font-medium text-muted-foreground">
288
+ Drop the files here
289
+ </p>
290
+ </div>
291
+ ) : (
292
+ <div className="flex flex-col items-center justify-center gap-4 sm:px-5">
293
+ <div className="rounded-full border border-dashed p-3">
294
+ <Upload
295
+ className="size-7 text-muted-foreground"
296
+ aria-hidden="true"
297
+ />
298
+ </div>
299
+ <div className="flex flex-col gap-px">
300
+ <p className="font-medium text-muted-foreground">
301
+ Drag {`'n'`} drop files here, or click to select files
302
+ </p>
303
+ <p className="text-sm text-muted-foreground/70">
304
+ You can upload
305
+ {maxFileCount > 1
306
+ ? ` ${maxFileCount === Infinity ? 'multiple' : maxFileCount}
307
+ files (up to ${formatBytes(maxSize)} each)`
308
+ : ` a file with ${formatBytes(maxSize)}`}
309
+ </p>
310
+ </div>
311
+ </div>
312
+ )}
313
+ </div>
314
+ )}
315
+ </Dropzone>
316
+ {files?.length ? (
317
+ <ScrollArea className="h-fit w-full px-3">
318
+ <div className="flex max-h-48 flex-col gap-4">
319
+ {files?.map((file, index) => (
320
+ <FileCard
321
+ key={index}
322
+ file={file}
323
+ onRemove={() => onRemove(index)}
324
+ progress={progresses?.[file.name]}
325
+ />
326
+ ))}
327
+ </div>
328
+ </ScrollArea>
329
+ ) : null}
330
+ </div>
331
+ );
332
+ }
web/src/components/rename-dialog/index.tsx CHANGED
@@ -2,7 +2,6 @@ import { Button } from '@/components/ui/button';
2
  import {
3
  Dialog,
4
  DialogContent,
5
- DialogDescription,
6
  DialogFooter,
7
  DialogHeader,
8
  DialogTitle,
@@ -11,7 +10,7 @@ import {
11
  import { Input } from '@/components/ui/input';
12
  import { Label } from '@/components/ui/label';
13
 
14
- export function DialogDemo() {
15
  return (
16
  <Dialog>
17
  <DialogTrigger asChild>
@@ -20,9 +19,6 @@ export function DialogDemo() {
20
  <DialogContent className="sm:max-w-[425px]">
21
  <DialogHeader>
22
  <DialogTitle>Edit profile</DialogTitle>
23
- <DialogDescription>
24
- Make changes to your profile here. Click save when you're done.
25
- </DialogDescription>
26
  </DialogHeader>
27
  <div className="grid gap-4 py-4">
28
  <div className="grid grid-cols-4 items-center gap-4">
 
2
  import {
3
  Dialog,
4
  DialogContent,
 
5
  DialogFooter,
6
  DialogHeader,
7
  DialogTitle,
 
10
  import { Input } from '@/components/ui/input';
11
  import { Label } from '@/components/ui/label';
12
 
13
+ export function RenameDialog() {
14
  return (
15
  <Dialog>
16
  <DialogTrigger asChild>
 
19
  <DialogContent className="sm:max-w-[425px]">
20
  <DialogHeader>
21
  <DialogTitle>Edit profile</DialogTitle>
 
 
 
22
  </DialogHeader>
23
  <div className="grid gap-4 py-4">
24
  <div className="grid grid-cols-4 items-center gap-4">
web/src/components/ui/progress.tsx ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 'use client';
2
+
3
+ import * as ProgressPrimitive from '@radix-ui/react-progress';
4
+ import * as React from 'react';
5
+
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const Progress = React.forwardRef<
9
+ React.ElementRef<typeof ProgressPrimitive.Root>,
10
+ React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>
11
+ >(({ className, value, ...props }, ref) => (
12
+ <ProgressPrimitive.Root
13
+ ref={ref}
14
+ className={cn(
15
+ 'relative h-4 w-full overflow-hidden rounded-full bg-secondary',
16
+ className,
17
+ )}
18
+ {...props}
19
+ >
20
+ <ProgressPrimitive.Indicator
21
+ className="h-full w-full flex-1 bg-primary transition-all"
22
+ style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
23
+ />
24
+ </ProgressPrimitive.Root>
25
+ ));
26
+ Progress.displayName = ProgressPrimitive.Root.displayName;
27
+
28
+ export { Progress };
web/src/components/ui/scroll-area.tsx ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 'use client';
2
+
3
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
4
+ import * as React from 'react';
5
+
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const ScrollBar = React.forwardRef<
9
+ React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
10
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
11
+ >(({ className, orientation = 'vertical', ...props }, ref) => (
12
+ <ScrollAreaPrimitive.ScrollAreaScrollbar
13
+ ref={ref}
14
+ orientation={orientation}
15
+ className={cn(
16
+ 'flex touch-none select-none transition-colors',
17
+ orientation === 'vertical' &&
18
+ 'h-full w-2.5 border-l border-l-transparent p-[1px]',
19
+ orientation === 'horizontal' &&
20
+ 'h-2.5 flex-col border-t border-t-transparent p-[1px]',
21
+ className,
22
+ )}
23
+ {...props}
24
+ >
25
+ <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
26
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
27
+ ));
28
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
29
+
30
+ const ScrollArea = React.forwardRef<
31
+ React.ElementRef<typeof ScrollAreaPrimitive.Root>,
32
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
33
+ >(({ className, children, ...props }, ref) => (
34
+ <ScrollAreaPrimitive.Root
35
+ ref={ref}
36
+ className={cn('relative overflow-hidden', className)}
37
+ {...props}
38
+ >
39
+ <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
40
+ {children}
41
+ </ScrollAreaPrimitive.Viewport>
42
+ <ScrollBar />
43
+ <ScrollAreaPrimitive.Corner />
44
+ </ScrollAreaPrimitive.Root>
45
+ ));
46
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
47
+
48
+ export { ScrollArea, ScrollBar };
web/src/components/ui/tabs.tsx CHANGED
@@ -14,7 +14,7 @@ const TabsList = React.forwardRef<
14
  <TabsPrimitive.List
15
  ref={ref}
16
  className={cn(
17
- 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',
18
  className,
19
  )}
20
  {...props}
@@ -29,7 +29,7 @@ const TabsTrigger = React.forwardRef<
29
  <TabsPrimitive.Trigger
30
  ref={ref}
31
  className={cn(
32
- 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm',
33
  className,
34
  )}
35
  {...props}
 
14
  <TabsPrimitive.List
15
  ref={ref}
16
  className={cn(
17
+ 'inline-flex h-10 items-center justify-center rounded-md bg-colors-background-inverse-standard p-1 text-colors-text-neutral-standard',
18
  className,
19
  )}
20
  {...props}
 
29
  <TabsPrimitive.Trigger
30
  ref={ref}
31
  className={cn(
32
+ 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-colors-background-inverse-strong data-[state=active]:text-colors-text-inverse-strong data-[state=active]:shadow-sm',
33
  className,
34
  )}
35
  {...props}
web/src/hooks/use-callback-ref.ts ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-callback-ref/src/useCallbackRef.tsx
5
+ */
6
+
7
+ /**
8
+ * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a
9
+ * prop or avoid re-executing effects when passed as a dependency
10
+ */
11
+ function useCallbackRef<T extends (...args: never[]) => unknown>(
12
+ callback: T | undefined,
13
+ ): T {
14
+ const callbackRef = React.useRef(callback);
15
+
16
+ React.useEffect(() => {
17
+ callbackRef.current = callback;
18
+ });
19
+
20
+ // https://github.com/facebook/react/issues/19240
21
+ return React.useMemo(
22
+ () => ((...args) => callbackRef.current?.(...args)) as T,
23
+ [],
24
+ );
25
+ }
26
+
27
+ export { useCallbackRef };
web/src/hooks/use-controllable-state.ts ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from 'react';
2
+
3
+ import { useCallbackRef } from '@/hooks/use-callback-ref';
4
+
5
+ /**
6
+ * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx
7
+ */
8
+
9
+ type UseControllableStateParams<T> = {
10
+ prop?: T | undefined;
11
+ defaultProp?: T | undefined;
12
+ onChange?: (state: T) => void;
13
+ };
14
+
15
+ type SetStateFn<T> = (prevState?: T) => T;
16
+
17
+ function useUncontrolledState<T>({
18
+ defaultProp,
19
+ onChange,
20
+ }: Omit<UseControllableStateParams<T>, 'prop'>) {
21
+ const uncontrolledState = React.useState<T | undefined>(defaultProp);
22
+ const [value] = uncontrolledState;
23
+ const prevValueRef = React.useRef(value);
24
+ const handleChange = useCallbackRef(onChange);
25
+
26
+ React.useEffect(() => {
27
+ if (prevValueRef.current !== value) {
28
+ handleChange(value as T);
29
+ prevValueRef.current = value;
30
+ }
31
+ }, [value, prevValueRef, handleChange]);
32
+
33
+ return uncontrolledState;
34
+ }
35
+
36
+ function useControllableState<T>({
37
+ prop,
38
+ defaultProp,
39
+ onChange = () => {},
40
+ }: UseControllableStateParams<T>) {
41
+ const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({
42
+ defaultProp,
43
+ onChange,
44
+ });
45
+ const isControlled = prop !== undefined;
46
+ const value = isControlled ? prop : uncontrolledProp;
47
+ const handleChange = useCallbackRef(onChange);
48
+
49
+ const setValue: React.Dispatch<React.SetStateAction<T | undefined>> =
50
+ React.useCallback(
51
+ (nextValue) => {
52
+ if (isControlled) {
53
+ const setter = nextValue as SetStateFn<T>;
54
+ const value =
55
+ typeof nextValue === 'function' ? setter(prop) : nextValue;
56
+ if (value !== prop) handleChange(value as T);
57
+ } else {
58
+ setUncontrolledProp(nextValue);
59
+ }
60
+ },
61
+ [isControlled, prop, setUncontrolledProp, handleChange],
62
+ );
63
+
64
+ return [value, setValue] as const;
65
+ }
66
+
67
+ export { useControllableState };
web/src/lib/utils.ts CHANGED
@@ -4,3 +4,21 @@ import { twMerge } from 'tailwind-merge';
4
  export function cn(...inputs: ClassValue[]) {
5
  return twMerge(clsx(inputs));
6
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  export function cn(...inputs: ClassValue[]) {
5
  return twMerge(clsx(inputs));
6
  }
7
+
8
+ export function formatBytes(
9
+ bytes: number,
10
+ opts: {
11
+ decimals?: number;
12
+ sizeType?: 'accurate' | 'normal';
13
+ } = {},
14
+ ) {
15
+ const { decimals = 0, sizeType = 'normal' } = opts;
16
+
17
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
18
+ const accurateSizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB'];
19
+ if (bytes === 0) return '0 Byte';
20
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
21
+ return `${(bytes / Math.pow(1024, i)).toFixed(decimals)} ${
22
+ sizeType === 'accurate' ? accurateSizes[i] ?? 'Bytes' : sizes[i] ?? 'Bytes'
23
+ }`;
24
+ }
web/src/pages/dataset/dataset/hooks.ts ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useSetModalState } from '@/hooks/common-hooks';
2
+ import {
3
+ useCreateNextDocument,
4
+ useNextWebCrawl,
5
+ useRunNextDocument,
6
+ useSaveNextDocumentName,
7
+ useSetNextDocumentParser,
8
+ useUploadNextDocument,
9
+ } from '@/hooks/document-hooks';
10
+ import { useGetKnowledgeSearchParams } from '@/hooks/route-hook';
11
+ import { IChangeParserConfigRequestBody } from '@/interfaces/request/document';
12
+ import { getUnSupportedFilesCount } from '@/utils/document-util';
13
+ import { UploadFile } from 'antd';
14
+ import { useCallback, useState } from 'react';
15
+ import { useNavigate } from 'umi';
16
+
17
+ export const useNavigateToOtherPage = () => {
18
+ const navigate = useNavigate();
19
+ const { knowledgeId } = useGetKnowledgeSearchParams();
20
+
21
+ const linkToUploadPage = useCallback(() => {
22
+ navigate(`/knowledge/dataset/upload?id=${knowledgeId}`);
23
+ }, [navigate, knowledgeId]);
24
+
25
+ const toChunk = useCallback((id: string) => {}, []);
26
+
27
+ return { linkToUploadPage, toChunk };
28
+ };
29
+
30
+ export const useRenameDocument = (documentId: string) => {
31
+ const { saveName, loading } = useSaveNextDocumentName();
32
+
33
+ const {
34
+ visible: renameVisible,
35
+ hideModal: hideRenameModal,
36
+ showModal: showRenameModal,
37
+ } = useSetModalState();
38
+
39
+ const onRenameOk = useCallback(
40
+ async (name: string) => {
41
+ const ret = await saveName({ documentId, name });
42
+ if (ret === 0) {
43
+ hideRenameModal();
44
+ }
45
+ },
46
+ [hideRenameModal, saveName, documentId],
47
+ );
48
+
49
+ return {
50
+ renameLoading: loading,
51
+ onRenameOk,
52
+ renameVisible,
53
+ hideRenameModal,
54
+ showRenameModal,
55
+ };
56
+ };
57
+
58
+ export const useCreateEmptyDocument = () => {
59
+ const { createDocument, loading } = useCreateNextDocument();
60
+
61
+ const {
62
+ visible: createVisible,
63
+ hideModal: hideCreateModal,
64
+ showModal: showCreateModal,
65
+ } = useSetModalState();
66
+
67
+ const onCreateOk = useCallback(
68
+ async (name: string) => {
69
+ const ret = await createDocument(name);
70
+ if (ret === 0) {
71
+ hideCreateModal();
72
+ }
73
+ },
74
+ [hideCreateModal, createDocument],
75
+ );
76
+
77
+ return {
78
+ createLoading: loading,
79
+ onCreateOk,
80
+ createVisible,
81
+ hideCreateModal,
82
+ showCreateModal,
83
+ };
84
+ };
85
+
86
+ export const useChangeDocumentParser = (documentId: string) => {
87
+ const { setDocumentParser, loading } = useSetNextDocumentParser();
88
+
89
+ const {
90
+ visible: changeParserVisible,
91
+ hideModal: hideChangeParserModal,
92
+ showModal: showChangeParserModal,
93
+ } = useSetModalState();
94
+
95
+ const onChangeParserOk = useCallback(
96
+ async (parserId: string, parserConfig: IChangeParserConfigRequestBody) => {
97
+ const ret = await setDocumentParser({
98
+ parserId,
99
+ documentId,
100
+ parserConfig,
101
+ });
102
+ if (ret === 0) {
103
+ hideChangeParserModal();
104
+ }
105
+ },
106
+ [hideChangeParserModal, setDocumentParser, documentId],
107
+ );
108
+
109
+ return {
110
+ changeParserLoading: loading,
111
+ onChangeParserOk,
112
+ changeParserVisible,
113
+ hideChangeParserModal,
114
+ showChangeParserModal,
115
+ };
116
+ };
117
+
118
+ export const useGetRowSelection = () => {
119
+ const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
120
+
121
+ const rowSelection = {
122
+ selectedRowKeys,
123
+ onChange: (newSelectedRowKeys: React.Key[]) => {
124
+ setSelectedRowKeys(newSelectedRowKeys);
125
+ },
126
+ };
127
+
128
+ return rowSelection;
129
+ };
130
+
131
+ export const useHandleUploadDocument = () => {
132
+ const {
133
+ visible: documentUploadVisible,
134
+ hideModal: hideDocumentUploadModal,
135
+ showModal: showDocumentUploadModal,
136
+ } = useSetModalState();
137
+ const { uploadDocument, loading } = useUploadNextDocument();
138
+
139
+ const onDocumentUploadOk = useCallback(
140
+ async (fileList: UploadFile[]): Promise<number | undefined> => {
141
+ if (fileList.length > 0) {
142
+ const ret: any = await uploadDocument(fileList);
143
+ if (typeof ret?.message !== 'string') {
144
+ return;
145
+ }
146
+ const count = getUnSupportedFilesCount(ret?.message);
147
+ /// 500 error code indicates that some file types are not supported
148
+ let code = ret?.code;
149
+ if (
150
+ ret?.code === 0 ||
151
+ (ret?.code === 500 && count !== fileList.length) // Some files were not uploaded successfully, but some were uploaded successfully.
152
+ ) {
153
+ code = 0;
154
+ hideDocumentUploadModal();
155
+ }
156
+ return code;
157
+ }
158
+ },
159
+ [uploadDocument, hideDocumentUploadModal],
160
+ );
161
+
162
+ return {
163
+ documentUploadLoading: loading,
164
+ onDocumentUploadOk,
165
+ documentUploadVisible,
166
+ hideDocumentUploadModal,
167
+ showDocumentUploadModal,
168
+ };
169
+ };
170
+
171
+ export const useHandleWebCrawl = () => {
172
+ const {
173
+ visible: webCrawlUploadVisible,
174
+ hideModal: hideWebCrawlUploadModal,
175
+ showModal: showWebCrawlUploadModal,
176
+ } = useSetModalState();
177
+ const { webCrawl, loading } = useNextWebCrawl();
178
+
179
+ const onWebCrawlUploadOk = useCallback(
180
+ async (name: string, url: string) => {
181
+ const ret = await webCrawl({ name, url });
182
+ if (ret === 0) {
183
+ hideWebCrawlUploadModal();
184
+ return 0;
185
+ }
186
+ return -1;
187
+ },
188
+ [webCrawl, hideWebCrawlUploadModal],
189
+ );
190
+
191
+ return {
192
+ webCrawlUploadLoading: loading,
193
+ onWebCrawlUploadOk,
194
+ webCrawlUploadVisible,
195
+ hideWebCrawlUploadModal,
196
+ showWebCrawlUploadModal,
197
+ };
198
+ };
199
+
200
+ export const useHandleRunDocumentByIds = (id: string) => {
201
+ const { runDocumentByIds, loading } = useRunNextDocument();
202
+ const [currentId, setCurrentId] = useState<string>('');
203
+ const isLoading = loading && currentId !== '' && currentId === id;
204
+
205
+ const handleRunDocumentByIds = async (
206
+ documentId: string,
207
+ isRunning: boolean,
208
+ shouldDelete: boolean = false,
209
+ ) => {
210
+ if (isLoading) {
211
+ return;
212
+ }
213
+ setCurrentId(documentId);
214
+ try {
215
+ await runDocumentByIds({
216
+ documentIds: [documentId],
217
+ run: isRunning ? 2 : 1,
218
+ shouldDelete,
219
+ });
220
+ setCurrentId('');
221
+ } catch (error) {
222
+ setCurrentId('');
223
+ }
224
+ };
225
+
226
+ return {
227
+ handleRunDocumentByIds,
228
+ loading: isLoading,
229
+ };
230
+ };
web/src/pages/dataset/dataset/index.tsx CHANGED
@@ -1,15 +1,32 @@
 
1
  import ListFilterBar from '@/components/list-filter-bar';
2
  import { Upload } from 'lucide-react';
3
  import { DatasetTable } from './dataset-table';
 
4
 
5
  export default function Dataset() {
 
 
 
 
 
 
 
6
  return (
7
  <section className="p-8 text-foreground">
8
- <ListFilterBar title="Files">
9
  <Upload />
10
  Upload file
11
  </ListFilterBar>
12
  <DatasetTable></DatasetTable>
 
 
 
 
 
 
 
 
13
  </section>
14
  );
15
  }
 
1
+ import { FileUploadDialog } from '@/components/file-upload-dialog';
2
  import ListFilterBar from '@/components/list-filter-bar';
3
  import { Upload } from 'lucide-react';
4
  import { DatasetTable } from './dataset-table';
5
+ import { useHandleUploadDocument } from './hooks';
6
 
7
  export default function Dataset() {
8
+ const {
9
+ documentUploadVisible,
10
+ hideDocumentUploadModal,
11
+ showDocumentUploadModal,
12
+ onDocumentUploadOk,
13
+ documentUploadLoading,
14
+ } = useHandleUploadDocument();
15
  return (
16
  <section className="p-8 text-foreground">
17
+ <ListFilterBar title="Files" showDialog={showDocumentUploadModal}>
18
  <Upload />
19
  Upload file
20
  </ListFilterBar>
21
  <DatasetTable></DatasetTable>
22
+
23
+ {documentUploadVisible && (
24
+ <FileUploadDialog
25
+ hideModal={hideDocumentUploadModal}
26
+ onOk={onDocumentUploadOk}
27
+ loading={documentUploadLoading}
28
+ ></FileUploadDialog>
29
+ )}
30
  </section>
31
  );
32
  }
web/src/pages/datasets/index.tsx CHANGED
@@ -1,6 +1,7 @@
1
  import ListFilterBar from '@/components/list-filter-bar';
2
  import { Button } from '@/components/ui/button';
3
  import { Card, CardContent } from '@/components/ui/card';
 
4
  import { ChevronRight, MoreHorizontal, Plus } from 'lucide-react';
5
  import { DatasetCreatingDialog } from './dataset-creating-dialog';
6
  import { useSaveKnowledge } from './hooks';
@@ -88,6 +89,8 @@ export default function Datasets() {
88
  onCreateOk,
89
  loading: creatingLoading,
90
  } = useSaveKnowledge();
 
 
91
  return (
92
  <section className="p-8 text-foreground">
93
  <ListFilterBar title="Datasets" showDialog={showModal}>
@@ -122,7 +125,11 @@ export default function Datasets() {
122
  Created {dataset.created}
123
  </p>
124
  </div>
125
- <Button variant="secondary" size="icon">
 
 
 
 
126
  <ChevronRight className="h-6 w-6" />
127
  </Button>
128
  </div>
 
1
  import ListFilterBar from '@/components/list-filter-bar';
2
  import { Button } from '@/components/ui/button';
3
  import { Card, CardContent } from '@/components/ui/card';
4
+ import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
5
  import { ChevronRight, MoreHorizontal, Plus } from 'lucide-react';
6
  import { DatasetCreatingDialog } from './dataset-creating-dialog';
7
  import { useSaveKnowledge } from './hooks';
 
89
  onCreateOk,
90
  loading: creatingLoading,
91
  } = useSaveKnowledge();
92
+ const { navigateToDataset } = useNavigatePage();
93
+
94
  return (
95
  <section className="p-8 text-foreground">
96
  <ListFilterBar title="Datasets" showDialog={showModal}>
 
125
  Created {dataset.created}
126
  </p>
127
  </div>
128
+ <Button
129
+ variant="secondary"
130
+ size="icon"
131
+ onClick={navigateToDataset}
132
+ >
133
  <ChevronRight className="h-6 w-6" />
134
  </Button>
135
  </div>