Yassine Mhirsi commited on
Commit
b625f31
·
2 Parent(s): 6830118 51c19ea

Merge branch 'main' of https://huggingface.co/spaces/NLP-Debater-Project/NLP-IBM-Debater

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ src/logo.png filter=lfs diff=lfs merge=lfs -text
package-lock.json CHANGED
@@ -16,8 +16,9 @@
16
  "postgres": "^3.4.7",
17
  "react": "^19.1.0",
18
  "react-dom": "^19.1.0",
 
19
  "react-router-dom": "^7.10.1",
20
- "react-scripts": "5.0.1",
21
  "recharts": "^3.5.1",
22
  "web-vitals": "^2.1.4"
23
  },
@@ -2095,30 +2096,6 @@
2095
  "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
2096
  "license": "MIT"
2097
  },
2098
- "node_modules/@cspotcode/source-map-support": {
2099
- "version": "0.8.1",
2100
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
2101
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
2102
- "license": "MIT",
2103
- "optional": true,
2104
- "dependencies": {
2105
- "@jridgewell/trace-mapping": "0.3.9"
2106
- },
2107
- "engines": {
2108
- "node": ">=12"
2109
- }
2110
- },
2111
- "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
2112
- "version": "0.3.9",
2113
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
2114
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
2115
- "license": "MIT",
2116
- "optional": true,
2117
- "dependencies": {
2118
- "@jridgewell/resolve-uri": "^3.0.3",
2119
- "@jridgewell/sourcemap-codec": "^1.4.10"
2120
- }
2121
- },
2122
  "node_modules/@csstools/normalize.css": {
2123
  "version": "12.1.1",
2124
  "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz",
@@ -3513,34 +3490,6 @@
3513
  "node": ">=10.13.0"
3514
  }
3515
  },
3516
- "node_modules/@tsconfig/node10": {
3517
- "version": "1.0.12",
3518
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
3519
- "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
3520
- "license": "MIT",
3521
- "optional": true
3522
- },
3523
- "node_modules/@tsconfig/node12": {
3524
- "version": "1.0.11",
3525
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
3526
- "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
3527
- "license": "MIT",
3528
- "optional": true
3529
- },
3530
- "node_modules/@tsconfig/node14": {
3531
- "version": "1.0.3",
3532
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
3533
- "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
3534
- "license": "MIT",
3535
- "optional": true
3536
- },
3537
- "node_modules/@tsconfig/node16": {
3538
- "version": "1.0.4",
3539
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
3540
- "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
3541
- "license": "MIT",
3542
- "optional": true
3543
- },
3544
  "node_modules/@types/aria-query": {
3545
  "version": "5.0.4",
3546
  "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
@@ -3689,6 +3638,15 @@
3689
  "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
3690
  "license": "MIT"
3691
  },
 
 
 
 
 
 
 
 
 
3692
  "node_modules/@types/eslint": {
3693
  "version": "8.56.12",
3694
  "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz",
@@ -3715,6 +3673,15 @@
3715
  "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
3716
  "license": "MIT"
3717
  },
 
 
 
 
 
 
 
 
 
3718
  "node_modules/@types/express": {
3719
  "version": "4.17.25",
3720
  "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz",
@@ -3760,6 +3727,15 @@
3760
  "@types/node": "*"
3761
  }
3762
  },
 
 
 
 
 
 
 
 
 
3763
  "node_modules/@types/html-minifier-terser": {
3764
  "version": "6.1.0",
3765
  "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
@@ -3817,18 +3793,32 @@
3817
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
3818
  "license": "MIT"
3819
  },
 
 
 
 
 
 
 
 
 
3820
  "node_modules/@types/mime": {
3821
  "version": "1.3.5",
3822
  "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
3823
  "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
3824
  "license": "MIT"
3825
  },
 
 
 
 
 
 
3826
  "node_modules/@types/node": {
3827
  "version": "25.0.3",
3828
  "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
3829
  "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
3830
  "license": "MIT",
3831
- "peer": true,
3832
  "dependencies": {
3833
  "undici-types": "~7.16.0"
3834
  }
@@ -3876,7 +3866,6 @@
3876
  "version": "19.2.7",
3877
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
3878
  "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
3879
- "devOptional": true,
3880
  "license": "MIT",
3881
  "peer": true,
3882
  "dependencies": {
@@ -3975,6 +3964,12 @@
3975
  "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
3976
  "license": "MIT"
3977
  },
 
 
 
 
 
 
3978
  "node_modules/@types/use-sync-external-store": {
3979
  "version": "0.0.6",
3980
  "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
@@ -5263,6 +5258,16 @@
5263
  "@babel/core": "^7.0.0-0"
5264
  }
5265
  },
 
 
 
 
 
 
 
 
 
 
5266
  "node_modules/balanced-match": {
5267
  "version": "1.0.2",
5268
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -5620,6 +5625,16 @@
5620
  "node": ">=4"
5621
  }
5622
  },
 
 
 
 
 
 
 
 
 
 
5623
  "node_modules/chalk": {
5624
  "version": "4.1.2",
5625
  "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -5660,6 +5675,46 @@
5660
  "node": ">=10"
5661
  }
5662
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5663
  "node_modules/check-types": {
5664
  "version": "11.2.3",
5665
  "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz",
@@ -5916,6 +5971,16 @@
5916
  "node": ">= 0.8"
5917
  }
5918
  },
 
 
 
 
 
 
 
 
 
 
5919
  "node_modules/commander": {
5920
  "version": "8.3.0",
5921
  "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
@@ -6105,13 +6170,6 @@
6105
  "node": ">=10"
6106
  }
6107
  },
6108
- "node_modules/create-require": {
6109
- "version": "1.1.1",
6110
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
6111
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
6112
- "license": "MIT",
6113
- "optional": true
6114
- },
6115
  "node_modules/cross-spawn": {
6116
  "version": "7.0.6",
6117
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -6514,7 +6572,6 @@
6514
  "version": "3.2.3",
6515
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
6516
  "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
6517
- "devOptional": true,
6518
  "license": "MIT"
6519
  },
6520
  "node_modules/d3-array": {
@@ -6738,6 +6795,19 @@
6738
  "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
6739
  "license": "MIT"
6740
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
6741
  "node_modules/dedent": {
6742
  "version": "0.7.0",
6743
  "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
@@ -6898,22 +6968,25 @@
6898
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
6899
  "license": "MIT"
6900
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
6901
  "node_modules/didyoumean": {
6902
  "version": "1.2.2",
6903
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
6904
  "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
6905
  "license": "Apache-2.0"
6906
  },
6907
- "node_modules/diff": {
6908
- "version": "4.0.2",
6909
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
6910
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
6911
- "license": "BSD-3-Clause",
6912
- "optional": true,
6913
- "engines": {
6914
- "node": ">=0.3.1"
6915
- }
6916
- },
6917
  "node_modules/diff-sequences": {
6918
  "version": "27.5.1",
6919
  "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz",
@@ -7166,9 +7239,9 @@
7166
  }
7167
  },
7168
  "node_modules/enhanced-resolve": {
7169
- "version": "5.18.3",
7170
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
7171
- "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
7172
  "license": "MIT",
7173
  "dependencies": {
7174
  "graceful-fs": "^4.2.4",
@@ -7206,9 +7279,9 @@
7206
  }
7207
  },
7208
  "node_modules/es-abstract": {
7209
- "version": "1.24.0",
7210
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
7211
- "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
7212
  "license": "MIT",
7213
  "dependencies": {
7214
  "array-buffer-byte-length": "^1.0.2",
@@ -7298,26 +7371,26 @@
7298
  }
7299
  },
7300
  "node_modules/es-iterator-helpers": {
7301
- "version": "1.2.1",
7302
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
7303
- "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
7304
  "license": "MIT",
7305
  "dependencies": {
7306
  "call-bind": "^1.0.8",
7307
- "call-bound": "^1.0.3",
7308
  "define-properties": "^1.2.1",
7309
- "es-abstract": "^1.23.6",
7310
  "es-errors": "^1.3.0",
7311
- "es-set-tostringtag": "^2.0.3",
7312
  "function-bind": "^1.1.2",
7313
- "get-intrinsic": "^1.2.6",
7314
  "globalthis": "^1.0.4",
7315
  "gopd": "^1.2.0",
7316
  "has-property-descriptors": "^1.0.2",
7317
  "has-proto": "^1.2.0",
7318
  "has-symbols": "^1.1.0",
7319
  "internal-slot": "^1.1.0",
7320
- "iterator.prototype": "^1.1.4",
7321
  "safe-array-concat": "^1.1.3"
7322
  },
7323
  "engines": {
@@ -7325,9 +7398,9 @@
7325
  }
7326
  },
7327
  "node_modules/es-module-lexer": {
7328
- "version": "1.7.0",
7329
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
7330
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
7331
  "license": "MIT"
7332
  },
7333
  "node_modules/es-object-atoms": {
@@ -8049,6 +8122,16 @@
8049
  "node": ">=4.0"
8050
  }
8051
  },
 
 
 
 
 
 
 
 
 
 
8052
  "node_modules/estree-walker": {
8053
  "version": "1.0.1",
8054
  "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
@@ -8195,6 +8278,12 @@
8195
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
8196
  "license": "MIT"
8197
  },
 
 
 
 
 
 
8198
  "node_modules/fast-deep-equal": {
8199
  "version": "3.1.3",
8200
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -9102,6 +9191,46 @@
9102
  "node": ">= 0.4"
9103
  }
9104
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9105
  "node_modules/he": {
9106
  "version": "1.2.0",
9107
  "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -9223,6 +9352,16 @@
9223
  "node": ">=12"
9224
  }
9225
  },
 
 
 
 
 
 
 
 
 
 
9226
  "node_modules/html-webpack-plugin": {
9227
  "version": "5.6.5",
9228
  "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz",
@@ -9526,6 +9665,12 @@
9526
  "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
9527
  "license": "ISC"
9528
  },
 
 
 
 
 
 
9529
  "node_modules/internal-slot": {
9530
  "version": "1.1.0",
9531
  "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
@@ -9558,6 +9703,30 @@
9558
  "node": ">= 10"
9559
  }
9560
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9561
  "node_modules/is-array-buffer": {
9562
  "version": "3.0.5",
9563
  "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
@@ -9703,6 +9872,16 @@
9703
  "url": "https://github.com/sponsors/ljharb"
9704
  }
9705
  },
 
 
 
 
 
 
 
 
 
 
9706
  "node_modules/is-docker": {
9707
  "version": "2.2.1",
9708
  "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -9791,6 +9970,16 @@
9791
  "node": ">=0.10.0"
9792
  }
9793
  },
 
 
 
 
 
 
 
 
 
 
9794
  "node_modules/is-map": {
9795
  "version": "2.0.3",
9796
  "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -11461,6 +11650,16 @@
11461
  "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
11462
  "license": "MIT"
11463
  },
 
 
 
 
 
 
 
 
 
 
11464
  "node_modules/loose-envify": {
11465
  "version": "1.4.0",
11466
  "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -11542,13 +11741,6 @@
11542
  "semver": "bin/semver.js"
11543
  }
11544
  },
11545
- "node_modules/make-error": {
11546
- "version": "1.3.6",
11547
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
11548
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
11549
- "license": "ISC",
11550
- "optional": true
11551
- },
11552
  "node_modules/makeerror": {
11553
  "version": "1.0.12",
11554
  "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@@ -11567,59 +11759,212 @@
11567
  "node": ">= 0.4"
11568
  }
11569
  },
11570
- "node_modules/mdn-data": {
11571
- "version": "2.0.4",
11572
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
11573
- "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
11574
- "license": "CC0-1.0"
11575
- },
11576
- "node_modules/media-typer": {
11577
- "version": "0.3.0",
11578
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
11579
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
11580
  "license": "MIT",
11581
- "engines": {
11582
- "node": ">= 0.6"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11583
  }
11584
  },
11585
- "node_modules/memfs": {
11586
- "version": "3.5.3",
11587
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
11588
- "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
11589
- "license": "Unlicense",
11590
  "dependencies": {
11591
- "fs-monkey": "^1.0.4"
 
 
 
 
 
11592
  },
11593
- "engines": {
11594
- "node": ">= 4.0.0"
 
11595
  }
11596
  },
11597
- "node_modules/merge-descriptors": {
11598
- "version": "1.0.3",
11599
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
11600
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
11601
  "license": "MIT",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11602
  "funding": {
11603
- "url": "https://github.com/sponsors/sindresorhus"
 
11604
  }
11605
  },
11606
- "node_modules/merge-stream": {
11607
- "version": "2.0.0",
11608
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
11609
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
11610
- "license": "MIT"
11611
- },
11612
- "node_modules/merge2": {
11613
- "version": "1.4.1",
11614
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
11615
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
11616
  "license": "MIT",
11617
- "engines": {
11618
- "node": ">= 8"
 
 
 
 
 
 
 
 
 
11619
  }
11620
  },
11621
- "node_modules/methods": {
11622
- "version": "1.1.2",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11623
  "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
11624
  "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
11625
  "license": "MIT",
@@ -11627,6 +11972,448 @@
11627
  "node": ">= 0.6"
11628
  }
11629
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11630
  "node_modules/micromatch": {
11631
  "version": "4.0.8",
11632
  "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -12009,21 +12796,21 @@
12009
  }
12010
  },
12011
  "node_modules/object.getownpropertydescriptors": {
12012
- "version": "2.1.8",
12013
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz",
12014
- "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==",
12015
  "license": "MIT",
12016
  "dependencies": {
12017
- "array.prototype.reduce": "^1.0.6",
12018
- "call-bind": "^1.0.7",
12019
  "define-properties": "^1.2.1",
12020
- "es-abstract": "^1.23.2",
12021
- "es-object-atoms": "^1.0.0",
12022
- "gopd": "^1.0.1",
12023
- "safe-array-concat": "^1.1.2"
12024
  },
12025
  "engines": {
12026
- "node": ">= 0.8"
12027
  },
12028
  "funding": {
12029
  "url": "https://github.com/sponsors/ljharb"
@@ -12228,12 +13015,37 @@
12228
  "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
12229
  "license": "MIT",
12230
  "dependencies": {
12231
- "callsites": "^3.0.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12232
  },
12233
- "engines": {
12234
- "node": ">=6"
 
12235
  }
12236
  },
 
 
 
 
 
 
12237
  "node_modules/parse-json": {
12238
  "version": "5.2.0",
12239
  "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -13807,6 +14619,16 @@
13807
  "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
13808
  "license": "MIT"
13809
  },
 
 
 
 
 
 
 
 
 
 
13810
  "node_modules/proxy-addr": {
13811
  "version": "2.0.7",
13812
  "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -14114,6 +14936,33 @@
14114
  "license": "MIT",
14115
  "peer": true
14116
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14117
  "node_modules/react-redux": {
14118
  "version": "9.2.0",
14119
  "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
@@ -14510,6 +15359,39 @@
14510
  "node": ">= 0.10"
14511
  }
14512
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14513
  "node_modules/renderkid": {
14514
  "version": "3.0.0",
14515
  "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
@@ -15014,9 +15896,9 @@
15014
  }
15015
  },
15016
  "node_modules/send": {
15017
- "version": "0.19.1",
15018
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz",
15019
- "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==",
15020
  "license": "MIT",
15021
  "dependencies": {
15022
  "debug": "2.6.9",
@@ -15025,13 +15907,13 @@
15025
  "encodeurl": "~2.0.0",
15026
  "escape-html": "~1.0.3",
15027
  "etag": "~1.8.1",
15028
- "fresh": "0.5.2",
15029
- "http-errors": "2.0.0",
15030
  "mime": "1.6.0",
15031
  "ms": "2.1.3",
15032
- "on-finished": "2.4.1",
15033
  "range-parser": "~1.2.1",
15034
- "statuses": "2.0.1"
15035
  },
15036
  "engines": {
15037
  "node": ">= 0.8.0"
@@ -15052,31 +15934,6 @@
15052
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
15053
  "license": "MIT"
15054
  },
15055
- "node_modules/send/node_modules/http-errors": {
15056
- "version": "2.0.0",
15057
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
15058
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
15059
- "license": "MIT",
15060
- "dependencies": {
15061
- "depd": "2.0.0",
15062
- "inherits": "2.0.4",
15063
- "setprototypeof": "1.2.0",
15064
- "statuses": "2.0.1",
15065
- "toidentifier": "1.0.1"
15066
- },
15067
- "engines": {
15068
- "node": ">= 0.8"
15069
- }
15070
- },
15071
- "node_modules/send/node_modules/statuses": {
15072
- "version": "2.0.1",
15073
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
15074
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
15075
- "license": "MIT",
15076
- "engines": {
15077
- "node": ">= 0.8"
15078
- }
15079
- },
15080
  "node_modules/serialize-javascript": {
15081
  "version": "6.0.2",
15082
  "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -15165,93 +16022,20 @@
15165
  }
15166
  },
15167
  "node_modules/serve-static": {
15168
- "version": "1.16.2",
15169
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
15170
- "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
15171
  "license": "MIT",
15172
  "dependencies": {
15173
  "encodeurl": "~2.0.0",
15174
  "escape-html": "~1.0.3",
15175
  "parseurl": "~1.3.3",
15176
- "send": "0.19.0"
15177
- },
15178
- "engines": {
15179
- "node": ">= 0.8.0"
15180
- }
15181
- },
15182
- "node_modules/serve-static/node_modules/debug": {
15183
- "version": "2.6.9",
15184
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
15185
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
15186
- "license": "MIT",
15187
- "dependencies": {
15188
- "ms": "2.0.0"
15189
- }
15190
- },
15191
- "node_modules/serve-static/node_modules/debug/node_modules/ms": {
15192
- "version": "2.0.0",
15193
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
15194
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
15195
- "license": "MIT"
15196
- },
15197
- "node_modules/serve-static/node_modules/http-errors": {
15198
- "version": "2.0.0",
15199
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
15200
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
15201
- "license": "MIT",
15202
- "dependencies": {
15203
- "depd": "2.0.0",
15204
- "inherits": "2.0.4",
15205
- "setprototypeof": "1.2.0",
15206
- "statuses": "2.0.1",
15207
- "toidentifier": "1.0.1"
15208
- },
15209
- "engines": {
15210
- "node": ">= 0.8"
15211
- }
15212
- },
15213
- "node_modules/serve-static/node_modules/send": {
15214
- "version": "0.19.0",
15215
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
15216
- "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
15217
- "license": "MIT",
15218
- "dependencies": {
15219
- "debug": "2.6.9",
15220
- "depd": "2.0.0",
15221
- "destroy": "1.2.0",
15222
- "encodeurl": "~1.0.2",
15223
- "escape-html": "~1.0.3",
15224
- "etag": "~1.8.1",
15225
- "fresh": "0.5.2",
15226
- "http-errors": "2.0.0",
15227
- "mime": "1.6.0",
15228
- "ms": "2.1.3",
15229
- "on-finished": "2.4.1",
15230
- "range-parser": "~1.2.1",
15231
- "statuses": "2.0.1"
15232
  },
15233
  "engines": {
15234
  "node": ">= 0.8.0"
15235
  }
15236
  },
15237
- "node_modules/serve-static/node_modules/send/node_modules/encodeurl": {
15238
- "version": "1.0.2",
15239
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
15240
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
15241
- "license": "MIT",
15242
- "engines": {
15243
- "node": ">= 0.8"
15244
- }
15245
- },
15246
- "node_modules/serve-static/node_modules/statuses": {
15247
- "version": "2.0.1",
15248
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
15249
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
15250
- "license": "MIT",
15251
- "engines": {
15252
- "node": ">= 0.8"
15253
- }
15254
- },
15255
  "node_modules/set-cookie-parser": {
15256
  "version": "2.7.2",
15257
  "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
@@ -15518,6 +16302,16 @@
15518
  "deprecated": "Please use @jridgewell/sourcemap-codec instead",
15519
  "license": "MIT"
15520
  },
 
 
 
 
 
 
 
 
 
 
15521
  "node_modules/spdy": {
15522
  "version": "4.0.2",
15523
  "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
@@ -15865,6 +16659,20 @@
15865
  "url": "https://github.com/sponsors/ljharb"
15866
  }
15867
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15868
  "node_modules/stringify-object": {
15869
  "version": "3.3.0",
15870
  "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
@@ -15958,6 +16766,24 @@
15958
  "webpack": "^5.0.0"
15959
  }
15960
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15961
  "node_modules/stylehacks": {
15962
  "version": "5.1.1",
15963
  "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
@@ -16390,9 +17216,9 @@
16390
  }
16391
  },
16392
  "node_modules/terser-webpack-plugin": {
16393
- "version": "5.3.15",
16394
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.15.tgz",
16395
- "integrity": "sha512-PGkOdpRFK+rb1TzVz+msVhw4YMRT9txLF4kRqvJhGhCM324xuR3REBSHALN+l+sAhKUmz0aotnjp5D+P83mLhQ==",
16396
  "license": "MIT",
16397
  "dependencies": {
16398
  "@jridgewell/trace-mapping": "^0.3.25",
@@ -16597,6 +17423,26 @@
16597
  "node": ">=8"
16598
  }
16599
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16600
  "node_modules/tryer": {
16601
  "version": "1.0.1",
16602
  "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -16609,70 +17455,6 @@
16609
  "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
16610
  "license": "Apache-2.0"
16611
  },
16612
- "node_modules/ts-node": {
16613
- "version": "10.9.2",
16614
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
16615
- "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
16616
- "license": "MIT",
16617
- "optional": true,
16618
- "dependencies": {
16619
- "@cspotcode/source-map-support": "^0.8.0",
16620
- "@tsconfig/node10": "^1.0.7",
16621
- "@tsconfig/node12": "^1.0.7",
16622
- "@tsconfig/node14": "^1.0.0",
16623
- "@tsconfig/node16": "^1.0.2",
16624
- "acorn": "^8.4.1",
16625
- "acorn-walk": "^8.1.1",
16626
- "arg": "^4.1.0",
16627
- "create-require": "^1.1.0",
16628
- "diff": "^4.0.1",
16629
- "make-error": "^1.1.1",
16630
- "v8-compile-cache-lib": "^3.0.1",
16631
- "yn": "3.1.1"
16632
- },
16633
- "bin": {
16634
- "ts-node": "dist/bin.js",
16635
- "ts-node-cwd": "dist/bin-cwd.js",
16636
- "ts-node-esm": "dist/bin-esm.js",
16637
- "ts-node-script": "dist/bin-script.js",
16638
- "ts-node-transpile-only": "dist/bin-transpile.js",
16639
- "ts-script": "dist/bin-script-deprecated.js"
16640
- },
16641
- "peerDependencies": {
16642
- "@swc/core": ">=1.2.50",
16643
- "@swc/wasm": ">=1.2.50",
16644
- "@types/node": "*",
16645
- "typescript": ">=2.7"
16646
- },
16647
- "peerDependenciesMeta": {
16648
- "@swc/core": {
16649
- "optional": true
16650
- },
16651
- "@swc/wasm": {
16652
- "optional": true
16653
- }
16654
- }
16655
- },
16656
- "node_modules/ts-node/node_modules/acorn-walk": {
16657
- "version": "8.3.4",
16658
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
16659
- "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
16660
- "license": "MIT",
16661
- "optional": true,
16662
- "dependencies": {
16663
- "acorn": "^8.11.0"
16664
- },
16665
- "engines": {
16666
- "node": ">=0.4.0"
16667
- }
16668
- },
16669
- "node_modules/ts-node/node_modules/arg": {
16670
- "version": "4.1.3",
16671
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
16672
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
16673
- "license": "MIT",
16674
- "optional": true
16675
- },
16676
  "node_modules/tsconfig-paths": {
16677
  "version": "3.15.0",
16678
  "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
@@ -16759,7 +17541,6 @@
16759
  "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
16760
  "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
16761
  "license": "(MIT OR CC0-1.0)",
16762
- "peer": true,
16763
  "engines": {
16764
  "node": ">=10"
16765
  },
@@ -16864,9 +17645,9 @@
16864
  }
16865
  },
16866
  "node_modules/typescript": {
16867
- "version": "4.9.5",
16868
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
16869
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
16870
  "license": "Apache-2.0",
16871
  "peer": true,
16872
  "bin": {
@@ -16874,7 +17655,7 @@
16874
  "tsserver": "bin/tsserver"
16875
  },
16876
  "engines": {
16877
- "node": ">=4.2.0"
16878
  }
16879
  },
16880
  "node_modules/unbox-primitive": {
@@ -16947,6 +17728,37 @@
16947
  "node": ">=4"
16948
  }
16949
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16950
  "node_modules/unique-string": {
16951
  "version": "2.0.0",
16952
  "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
@@ -16959,6 +17771,74 @@
16959
  "node": ">=8"
16960
  }
16961
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16962
  "node_modules/universalify": {
16963
  "version": "2.0.1",
16964
  "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
@@ -17096,13 +17976,6 @@
17096
  "uuid": "dist/bin/uuid"
17097
  }
17098
  },
17099
- "node_modules/v8-compile-cache-lib": {
17100
- "version": "3.0.1",
17101
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
17102
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
17103
- "license": "MIT",
17104
- "optional": true
17105
- },
17106
  "node_modules/v8-to-istanbul": {
17107
  "version": "8.1.1",
17108
  "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
@@ -17132,6 +18005,34 @@
17132
  "node": ">= 0.8"
17133
  }
17134
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17135
  "node_modules/victory-vendor": {
17136
  "version": "37.3.6",
17137
  "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
@@ -17186,9 +18087,9 @@
17186
  }
17187
  },
17188
  "node_modules/watchpack": {
17189
- "version": "2.4.4",
17190
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
17191
- "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
17192
  "license": "MIT",
17193
  "dependencies": {
17194
  "glob-to-regexp": "^0.4.1",
@@ -17223,9 +18124,9 @@
17223
  }
17224
  },
17225
  "node_modules/webpack": {
17226
- "version": "5.103.0",
17227
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz",
17228
- "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==",
17229
  "license": "MIT",
17230
  "peer": true,
17231
  "dependencies": {
@@ -17237,10 +18138,10 @@
17237
  "@webassemblyjs/wasm-parser": "^1.14.1",
17238
  "acorn": "^8.15.0",
17239
  "acorn-import-phases": "^1.0.3",
17240
- "browserslist": "^4.26.3",
17241
  "chrome-trace-event": "^1.0.2",
17242
- "enhanced-resolve": "^5.17.3",
17243
- "es-module-lexer": "^1.2.1",
17244
  "eslint-scope": "5.1.1",
17245
  "events": "^3.2.0",
17246
  "glob-to-regexp": "^0.4.1",
@@ -17251,7 +18152,7 @@
17251
  "neo-async": "^2.6.2",
17252
  "schema-utils": "^4.3.3",
17253
  "tapable": "^2.3.0",
17254
- "terser-webpack-plugin": "^5.3.11",
17255
  "watchpack": "^2.4.4",
17256
  "webpack-sources": "^3.3.3"
17257
  },
@@ -17299,7 +18200,6 @@
17299
  "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
17300
  "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
17301
  "license": "MIT",
17302
- "peer": true,
17303
  "dependencies": {
17304
  "@types/bonjour": "^3.5.9",
17305
  "@types/connect-history-api-fallback": "^1.3.5",
@@ -18082,16 +18982,6 @@
18082
  "node": ">=10"
18083
  }
18084
  },
18085
- "node_modules/yn": {
18086
- "version": "3.1.1",
18087
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
18088
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
18089
- "license": "MIT",
18090
- "optional": true,
18091
- "engines": {
18092
- "node": ">=6"
18093
- }
18094
- },
18095
  "node_modules/yocto-queue": {
18096
  "version": "0.1.0",
18097
  "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
@@ -18103,6 +18993,16 @@
18103
  "funding": {
18104
  "url": "https://github.com/sponsors/sindresorhus"
18105
  }
 
 
 
 
 
 
 
 
 
 
18106
  }
18107
  }
18108
  }
 
16
  "postgres": "^3.4.7",
17
  "react": "^19.1.0",
18
  "react-dom": "^19.1.0",
19
+ "react-markdown": "^9.0.1",
20
  "react-router-dom": "^7.10.1",
21
+ "react-scripts": "^5.0.1",
22
  "recharts": "^3.5.1",
23
  "web-vitals": "^2.1.4"
24
  },
 
2096
  "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
2097
  "license": "MIT"
2098
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2099
  "node_modules/@csstools/normalize.css": {
2100
  "version": "12.1.1",
2101
  "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz",
 
3490
  "node": ">=10.13.0"
3491
  }
3492
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3493
  "node_modules/@types/aria-query": {
3494
  "version": "5.0.4",
3495
  "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
 
3638
  "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
3639
  "license": "MIT"
3640
  },
3641
+ "node_modules/@types/debug": {
3642
+ "version": "4.1.12",
3643
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
3644
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
3645
+ "license": "MIT",
3646
+ "dependencies": {
3647
+ "@types/ms": "*"
3648
+ }
3649
+ },
3650
  "node_modules/@types/eslint": {
3651
  "version": "8.56.12",
3652
  "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz",
 
3673
  "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
3674
  "license": "MIT"
3675
  },
3676
+ "node_modules/@types/estree-jsx": {
3677
+ "version": "1.0.5",
3678
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
3679
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
3680
+ "license": "MIT",
3681
+ "dependencies": {
3682
+ "@types/estree": "*"
3683
+ }
3684
+ },
3685
  "node_modules/@types/express": {
3686
  "version": "4.17.25",
3687
  "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz",
 
3727
  "@types/node": "*"
3728
  }
3729
  },
3730
+ "node_modules/@types/hast": {
3731
+ "version": "3.0.4",
3732
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
3733
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
3734
+ "license": "MIT",
3735
+ "dependencies": {
3736
+ "@types/unist": "*"
3737
+ }
3738
+ },
3739
  "node_modules/@types/html-minifier-terser": {
3740
  "version": "6.1.0",
3741
  "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
 
3793
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
3794
  "license": "MIT"
3795
  },
3796
+ "node_modules/@types/mdast": {
3797
+ "version": "4.0.4",
3798
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
3799
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
3800
+ "license": "MIT",
3801
+ "dependencies": {
3802
+ "@types/unist": "*"
3803
+ }
3804
+ },
3805
  "node_modules/@types/mime": {
3806
  "version": "1.3.5",
3807
  "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
3808
  "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
3809
  "license": "MIT"
3810
  },
3811
+ "node_modules/@types/ms": {
3812
+ "version": "2.1.0",
3813
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
3814
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
3815
+ "license": "MIT"
3816
+ },
3817
  "node_modules/@types/node": {
3818
  "version": "25.0.3",
3819
  "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
3820
  "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
3821
  "license": "MIT",
 
3822
  "dependencies": {
3823
  "undici-types": "~7.16.0"
3824
  }
 
3866
  "version": "19.2.7",
3867
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
3868
  "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
 
3869
  "license": "MIT",
3870
  "peer": true,
3871
  "dependencies": {
 
3964
  "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
3965
  "license": "MIT"
3966
  },
3967
+ "node_modules/@types/unist": {
3968
+ "version": "3.0.3",
3969
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
3970
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
3971
+ "license": "MIT"
3972
+ },
3973
  "node_modules/@types/use-sync-external-store": {
3974
  "version": "0.0.6",
3975
  "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
 
5258
  "@babel/core": "^7.0.0-0"
5259
  }
5260
  },
5261
+ "node_modules/bail": {
5262
+ "version": "2.0.2",
5263
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
5264
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
5265
+ "license": "MIT",
5266
+ "funding": {
5267
+ "type": "github",
5268
+ "url": "https://github.com/sponsors/wooorm"
5269
+ }
5270
+ },
5271
  "node_modules/balanced-match": {
5272
  "version": "1.0.2",
5273
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
 
5625
  "node": ">=4"
5626
  }
5627
  },
5628
+ "node_modules/ccount": {
5629
+ "version": "2.0.1",
5630
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
5631
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
5632
+ "license": "MIT",
5633
+ "funding": {
5634
+ "type": "github",
5635
+ "url": "https://github.com/sponsors/wooorm"
5636
+ }
5637
+ },
5638
  "node_modules/chalk": {
5639
  "version": "4.1.2",
5640
  "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 
5675
  "node": ">=10"
5676
  }
5677
  },
5678
+ "node_modules/character-entities": {
5679
+ "version": "2.0.2",
5680
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
5681
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
5682
+ "license": "MIT",
5683
+ "funding": {
5684
+ "type": "github",
5685
+ "url": "https://github.com/sponsors/wooorm"
5686
+ }
5687
+ },
5688
+ "node_modules/character-entities-html4": {
5689
+ "version": "2.1.0",
5690
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
5691
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
5692
+ "license": "MIT",
5693
+ "funding": {
5694
+ "type": "github",
5695
+ "url": "https://github.com/sponsors/wooorm"
5696
+ }
5697
+ },
5698
+ "node_modules/character-entities-legacy": {
5699
+ "version": "3.0.0",
5700
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
5701
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
5702
+ "license": "MIT",
5703
+ "funding": {
5704
+ "type": "github",
5705
+ "url": "https://github.com/sponsors/wooorm"
5706
+ }
5707
+ },
5708
+ "node_modules/character-reference-invalid": {
5709
+ "version": "2.0.1",
5710
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
5711
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
5712
+ "license": "MIT",
5713
+ "funding": {
5714
+ "type": "github",
5715
+ "url": "https://github.com/sponsors/wooorm"
5716
+ }
5717
+ },
5718
  "node_modules/check-types": {
5719
  "version": "11.2.3",
5720
  "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz",
 
5971
  "node": ">= 0.8"
5972
  }
5973
  },
5974
+ "node_modules/comma-separated-tokens": {
5975
+ "version": "2.0.3",
5976
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
5977
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
5978
+ "license": "MIT",
5979
+ "funding": {
5980
+ "type": "github",
5981
+ "url": "https://github.com/sponsors/wooorm"
5982
+ }
5983
+ },
5984
  "node_modules/commander": {
5985
  "version": "8.3.0",
5986
  "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
 
6170
  "node": ">=10"
6171
  }
6172
  },
 
 
 
 
 
 
 
6173
  "node_modules/cross-spawn": {
6174
  "version": "7.0.6",
6175
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
 
6572
  "version": "3.2.3",
6573
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
6574
  "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
 
6575
  "license": "MIT"
6576
  },
6577
  "node_modules/d3-array": {
 
6795
  "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
6796
  "license": "MIT"
6797
  },
6798
+ "node_modules/decode-named-character-reference": {
6799
+ "version": "1.2.0",
6800
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
6801
+ "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
6802
+ "license": "MIT",
6803
+ "dependencies": {
6804
+ "character-entities": "^2.0.0"
6805
+ },
6806
+ "funding": {
6807
+ "type": "github",
6808
+ "url": "https://github.com/sponsors/wooorm"
6809
+ }
6810
+ },
6811
  "node_modules/dedent": {
6812
  "version": "0.7.0",
6813
  "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
 
6968
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
6969
  "license": "MIT"
6970
  },
6971
+ "node_modules/devlop": {
6972
+ "version": "1.1.0",
6973
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
6974
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
6975
+ "license": "MIT",
6976
+ "dependencies": {
6977
+ "dequal": "^2.0.0"
6978
+ },
6979
+ "funding": {
6980
+ "type": "github",
6981
+ "url": "https://github.com/sponsors/wooorm"
6982
+ }
6983
+ },
6984
  "node_modules/didyoumean": {
6985
  "version": "1.2.2",
6986
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
6987
  "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
6988
  "license": "Apache-2.0"
6989
  },
 
 
 
 
 
 
 
 
 
 
6990
  "node_modules/diff-sequences": {
6991
  "version": "27.5.1",
6992
  "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz",
 
7239
  }
7240
  },
7241
  "node_modules/enhanced-resolve": {
7242
+ "version": "5.18.4",
7243
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
7244
+ "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==",
7245
  "license": "MIT",
7246
  "dependencies": {
7247
  "graceful-fs": "^4.2.4",
 
7279
  }
7280
  },
7281
  "node_modules/es-abstract": {
7282
+ "version": "1.24.1",
7283
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz",
7284
+ "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==",
7285
  "license": "MIT",
7286
  "dependencies": {
7287
  "array-buffer-byte-length": "^1.0.2",
 
7371
  }
7372
  },
7373
  "node_modules/es-iterator-helpers": {
7374
+ "version": "1.2.2",
7375
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz",
7376
+ "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==",
7377
  "license": "MIT",
7378
  "dependencies": {
7379
  "call-bind": "^1.0.8",
7380
+ "call-bound": "^1.0.4",
7381
  "define-properties": "^1.2.1",
7382
+ "es-abstract": "^1.24.1",
7383
  "es-errors": "^1.3.0",
7384
+ "es-set-tostringtag": "^2.1.0",
7385
  "function-bind": "^1.1.2",
7386
+ "get-intrinsic": "^1.3.0",
7387
  "globalthis": "^1.0.4",
7388
  "gopd": "^1.2.0",
7389
  "has-property-descriptors": "^1.0.2",
7390
  "has-proto": "^1.2.0",
7391
  "has-symbols": "^1.1.0",
7392
  "internal-slot": "^1.1.0",
7393
+ "iterator.prototype": "^1.1.5",
7394
  "safe-array-concat": "^1.1.3"
7395
  },
7396
  "engines": {
 
7398
  }
7399
  },
7400
  "node_modules/es-module-lexer": {
7401
+ "version": "2.0.0",
7402
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
7403
+ "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
7404
  "license": "MIT"
7405
  },
7406
  "node_modules/es-object-atoms": {
 
8122
  "node": ">=4.0"
8123
  }
8124
  },
8125
+ "node_modules/estree-util-is-identifier-name": {
8126
+ "version": "3.0.0",
8127
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
8128
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
8129
+ "license": "MIT",
8130
+ "funding": {
8131
+ "type": "opencollective",
8132
+ "url": "https://opencollective.com/unified"
8133
+ }
8134
+ },
8135
  "node_modules/estree-walker": {
8136
  "version": "1.0.1",
8137
  "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
 
8278
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
8279
  "license": "MIT"
8280
  },
8281
+ "node_modules/extend": {
8282
+ "version": "3.0.2",
8283
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
8284
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
8285
+ "license": "MIT"
8286
+ },
8287
  "node_modules/fast-deep-equal": {
8288
  "version": "3.1.3",
8289
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
 
9191
  "node": ">= 0.4"
9192
  }
9193
  },
9194
+ "node_modules/hast-util-to-jsx-runtime": {
9195
+ "version": "2.3.6",
9196
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
9197
+ "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
9198
+ "license": "MIT",
9199
+ "dependencies": {
9200
+ "@types/estree": "^1.0.0",
9201
+ "@types/hast": "^3.0.0",
9202
+ "@types/unist": "^3.0.0",
9203
+ "comma-separated-tokens": "^2.0.0",
9204
+ "devlop": "^1.0.0",
9205
+ "estree-util-is-identifier-name": "^3.0.0",
9206
+ "hast-util-whitespace": "^3.0.0",
9207
+ "mdast-util-mdx-expression": "^2.0.0",
9208
+ "mdast-util-mdx-jsx": "^3.0.0",
9209
+ "mdast-util-mdxjs-esm": "^2.0.0",
9210
+ "property-information": "^7.0.0",
9211
+ "space-separated-tokens": "^2.0.0",
9212
+ "style-to-js": "^1.0.0",
9213
+ "unist-util-position": "^5.0.0",
9214
+ "vfile-message": "^4.0.0"
9215
+ },
9216
+ "funding": {
9217
+ "type": "opencollective",
9218
+ "url": "https://opencollective.com/unified"
9219
+ }
9220
+ },
9221
+ "node_modules/hast-util-whitespace": {
9222
+ "version": "3.0.0",
9223
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
9224
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
9225
+ "license": "MIT",
9226
+ "dependencies": {
9227
+ "@types/hast": "^3.0.0"
9228
+ },
9229
+ "funding": {
9230
+ "type": "opencollective",
9231
+ "url": "https://opencollective.com/unified"
9232
+ }
9233
+ },
9234
  "node_modules/he": {
9235
  "version": "1.2.0",
9236
  "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
 
9352
  "node": ">=12"
9353
  }
9354
  },
9355
+ "node_modules/html-url-attributes": {
9356
+ "version": "3.0.1",
9357
+ "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
9358
+ "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==",
9359
+ "license": "MIT",
9360
+ "funding": {
9361
+ "type": "opencollective",
9362
+ "url": "https://opencollective.com/unified"
9363
+ }
9364
+ },
9365
  "node_modules/html-webpack-plugin": {
9366
  "version": "5.6.5",
9367
  "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz",
 
9665
  "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
9666
  "license": "ISC"
9667
  },
9668
+ "node_modules/inline-style-parser": {
9669
+ "version": "0.2.7",
9670
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz",
9671
+ "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==",
9672
+ "license": "MIT"
9673
+ },
9674
  "node_modules/internal-slot": {
9675
  "version": "1.1.0",
9676
  "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
 
9703
  "node": ">= 10"
9704
  }
9705
  },
9706
+ "node_modules/is-alphabetical": {
9707
+ "version": "2.0.1",
9708
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
9709
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
9710
+ "license": "MIT",
9711
+ "funding": {
9712
+ "type": "github",
9713
+ "url": "https://github.com/sponsors/wooorm"
9714
+ }
9715
+ },
9716
+ "node_modules/is-alphanumerical": {
9717
+ "version": "2.0.1",
9718
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
9719
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
9720
+ "license": "MIT",
9721
+ "dependencies": {
9722
+ "is-alphabetical": "^2.0.0",
9723
+ "is-decimal": "^2.0.0"
9724
+ },
9725
+ "funding": {
9726
+ "type": "github",
9727
+ "url": "https://github.com/sponsors/wooorm"
9728
+ }
9729
+ },
9730
  "node_modules/is-array-buffer": {
9731
  "version": "3.0.5",
9732
  "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
 
9872
  "url": "https://github.com/sponsors/ljharb"
9873
  }
9874
  },
9875
+ "node_modules/is-decimal": {
9876
+ "version": "2.0.1",
9877
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
9878
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
9879
+ "license": "MIT",
9880
+ "funding": {
9881
+ "type": "github",
9882
+ "url": "https://github.com/sponsors/wooorm"
9883
+ }
9884
+ },
9885
  "node_modules/is-docker": {
9886
  "version": "2.2.1",
9887
  "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
 
9970
  "node": ">=0.10.0"
9971
  }
9972
  },
9973
+ "node_modules/is-hexadecimal": {
9974
+ "version": "2.0.1",
9975
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
9976
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
9977
+ "license": "MIT",
9978
+ "funding": {
9979
+ "type": "github",
9980
+ "url": "https://github.com/sponsors/wooorm"
9981
+ }
9982
+ },
9983
  "node_modules/is-map": {
9984
  "version": "2.0.3",
9985
  "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
 
11650
  "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
11651
  "license": "MIT"
11652
  },
11653
+ "node_modules/longest-streak": {
11654
+ "version": "3.1.0",
11655
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
11656
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
11657
+ "license": "MIT",
11658
+ "funding": {
11659
+ "type": "github",
11660
+ "url": "https://github.com/sponsors/wooorm"
11661
+ }
11662
+ },
11663
  "node_modules/loose-envify": {
11664
  "version": "1.4.0",
11665
  "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
 
11741
  "semver": "bin/semver.js"
11742
  }
11743
  },
 
 
 
 
 
 
 
11744
  "node_modules/makeerror": {
11745
  "version": "1.0.12",
11746
  "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
 
11759
  "node": ">= 0.4"
11760
  }
11761
  },
11762
+ "node_modules/mdast-util-from-markdown": {
11763
+ "version": "2.0.2",
11764
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
11765
+ "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
 
 
 
 
 
 
11766
  "license": "MIT",
11767
+ "dependencies": {
11768
+ "@types/mdast": "^4.0.0",
11769
+ "@types/unist": "^3.0.0",
11770
+ "decode-named-character-reference": "^1.0.0",
11771
+ "devlop": "^1.0.0",
11772
+ "mdast-util-to-string": "^4.0.0",
11773
+ "micromark": "^4.0.0",
11774
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
11775
+ "micromark-util-decode-string": "^2.0.0",
11776
+ "micromark-util-normalize-identifier": "^2.0.0",
11777
+ "micromark-util-symbol": "^2.0.0",
11778
+ "micromark-util-types": "^2.0.0",
11779
+ "unist-util-stringify-position": "^4.0.0"
11780
+ },
11781
+ "funding": {
11782
+ "type": "opencollective",
11783
+ "url": "https://opencollective.com/unified"
11784
  }
11785
  },
11786
+ "node_modules/mdast-util-mdx-expression": {
11787
+ "version": "2.0.1",
11788
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
11789
+ "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
11790
+ "license": "MIT",
11791
  "dependencies": {
11792
+ "@types/estree-jsx": "^1.0.0",
11793
+ "@types/hast": "^3.0.0",
11794
+ "@types/mdast": "^4.0.0",
11795
+ "devlop": "^1.0.0",
11796
+ "mdast-util-from-markdown": "^2.0.0",
11797
+ "mdast-util-to-markdown": "^2.0.0"
11798
  },
11799
+ "funding": {
11800
+ "type": "opencollective",
11801
+ "url": "https://opencollective.com/unified"
11802
  }
11803
  },
11804
+ "node_modules/mdast-util-mdx-jsx": {
11805
+ "version": "3.2.0",
11806
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz",
11807
+ "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
11808
  "license": "MIT",
11809
+ "dependencies": {
11810
+ "@types/estree-jsx": "^1.0.0",
11811
+ "@types/hast": "^3.0.0",
11812
+ "@types/mdast": "^4.0.0",
11813
+ "@types/unist": "^3.0.0",
11814
+ "ccount": "^2.0.0",
11815
+ "devlop": "^1.1.0",
11816
+ "mdast-util-from-markdown": "^2.0.0",
11817
+ "mdast-util-to-markdown": "^2.0.0",
11818
+ "parse-entities": "^4.0.0",
11819
+ "stringify-entities": "^4.0.0",
11820
+ "unist-util-stringify-position": "^4.0.0",
11821
+ "vfile-message": "^4.0.0"
11822
+ },
11823
  "funding": {
11824
+ "type": "opencollective",
11825
+ "url": "https://opencollective.com/unified"
11826
  }
11827
  },
11828
+ "node_modules/mdast-util-mdxjs-esm": {
11829
+ "version": "2.0.1",
11830
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
11831
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
 
 
 
 
 
 
11832
  "license": "MIT",
11833
+ "dependencies": {
11834
+ "@types/estree-jsx": "^1.0.0",
11835
+ "@types/hast": "^3.0.0",
11836
+ "@types/mdast": "^4.0.0",
11837
+ "devlop": "^1.0.0",
11838
+ "mdast-util-from-markdown": "^2.0.0",
11839
+ "mdast-util-to-markdown": "^2.0.0"
11840
+ },
11841
+ "funding": {
11842
+ "type": "opencollective",
11843
+ "url": "https://opencollective.com/unified"
11844
  }
11845
  },
11846
+ "node_modules/mdast-util-phrasing": {
11847
+ "version": "4.1.0",
11848
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
11849
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
11850
+ "license": "MIT",
11851
+ "dependencies": {
11852
+ "@types/mdast": "^4.0.0",
11853
+ "unist-util-is": "^6.0.0"
11854
+ },
11855
+ "funding": {
11856
+ "type": "opencollective",
11857
+ "url": "https://opencollective.com/unified"
11858
+ }
11859
+ },
11860
+ "node_modules/mdast-util-to-hast": {
11861
+ "version": "13.2.1",
11862
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
11863
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
11864
+ "license": "MIT",
11865
+ "dependencies": {
11866
+ "@types/hast": "^3.0.0",
11867
+ "@types/mdast": "^4.0.0",
11868
+ "@ungap/structured-clone": "^1.0.0",
11869
+ "devlop": "^1.0.0",
11870
+ "micromark-util-sanitize-uri": "^2.0.0",
11871
+ "trim-lines": "^3.0.0",
11872
+ "unist-util-position": "^5.0.0",
11873
+ "unist-util-visit": "^5.0.0",
11874
+ "vfile": "^6.0.0"
11875
+ },
11876
+ "funding": {
11877
+ "type": "opencollective",
11878
+ "url": "https://opencollective.com/unified"
11879
+ }
11880
+ },
11881
+ "node_modules/mdast-util-to-markdown": {
11882
+ "version": "2.1.2",
11883
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
11884
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
11885
+ "license": "MIT",
11886
+ "dependencies": {
11887
+ "@types/mdast": "^4.0.0",
11888
+ "@types/unist": "^3.0.0",
11889
+ "longest-streak": "^3.0.0",
11890
+ "mdast-util-phrasing": "^4.0.0",
11891
+ "mdast-util-to-string": "^4.0.0",
11892
+ "micromark-util-classify-character": "^2.0.0",
11893
+ "micromark-util-decode-string": "^2.0.0",
11894
+ "unist-util-visit": "^5.0.0",
11895
+ "zwitch": "^2.0.0"
11896
+ },
11897
+ "funding": {
11898
+ "type": "opencollective",
11899
+ "url": "https://opencollective.com/unified"
11900
+ }
11901
+ },
11902
+ "node_modules/mdast-util-to-string": {
11903
+ "version": "4.0.0",
11904
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
11905
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
11906
+ "license": "MIT",
11907
+ "dependencies": {
11908
+ "@types/mdast": "^4.0.0"
11909
+ },
11910
+ "funding": {
11911
+ "type": "opencollective",
11912
+ "url": "https://opencollective.com/unified"
11913
+ }
11914
+ },
11915
+ "node_modules/mdn-data": {
11916
+ "version": "2.0.4",
11917
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
11918
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
11919
+ "license": "CC0-1.0"
11920
+ },
11921
+ "node_modules/media-typer": {
11922
+ "version": "0.3.0",
11923
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
11924
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
11925
+ "license": "MIT",
11926
+ "engines": {
11927
+ "node": ">= 0.6"
11928
+ }
11929
+ },
11930
+ "node_modules/memfs": {
11931
+ "version": "3.5.3",
11932
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
11933
+ "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
11934
+ "license": "Unlicense",
11935
+ "dependencies": {
11936
+ "fs-monkey": "^1.0.4"
11937
+ },
11938
+ "engines": {
11939
+ "node": ">= 4.0.0"
11940
+ }
11941
+ },
11942
+ "node_modules/merge-descriptors": {
11943
+ "version": "1.0.3",
11944
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
11945
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
11946
+ "license": "MIT",
11947
+ "funding": {
11948
+ "url": "https://github.com/sponsors/sindresorhus"
11949
+ }
11950
+ },
11951
+ "node_modules/merge-stream": {
11952
+ "version": "2.0.0",
11953
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
11954
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
11955
+ "license": "MIT"
11956
+ },
11957
+ "node_modules/merge2": {
11958
+ "version": "1.4.1",
11959
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
11960
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
11961
+ "license": "MIT",
11962
+ "engines": {
11963
+ "node": ">= 8"
11964
+ }
11965
+ },
11966
+ "node_modules/methods": {
11967
+ "version": "1.1.2",
11968
  "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
11969
  "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
11970
  "license": "MIT",
 
11972
  "node": ">= 0.6"
11973
  }
11974
  },
11975
+ "node_modules/micromark": {
11976
+ "version": "4.0.2",
11977
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
11978
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
11979
+ "funding": [
11980
+ {
11981
+ "type": "GitHub Sponsors",
11982
+ "url": "https://github.com/sponsors/unifiedjs"
11983
+ },
11984
+ {
11985
+ "type": "OpenCollective",
11986
+ "url": "https://opencollective.com/unified"
11987
+ }
11988
+ ],
11989
+ "license": "MIT",
11990
+ "dependencies": {
11991
+ "@types/debug": "^4.0.0",
11992
+ "debug": "^4.0.0",
11993
+ "decode-named-character-reference": "^1.0.0",
11994
+ "devlop": "^1.0.0",
11995
+ "micromark-core-commonmark": "^2.0.0",
11996
+ "micromark-factory-space": "^2.0.0",
11997
+ "micromark-util-character": "^2.0.0",
11998
+ "micromark-util-chunked": "^2.0.0",
11999
+ "micromark-util-combine-extensions": "^2.0.0",
12000
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
12001
+ "micromark-util-encode": "^2.0.0",
12002
+ "micromark-util-normalize-identifier": "^2.0.0",
12003
+ "micromark-util-resolve-all": "^2.0.0",
12004
+ "micromark-util-sanitize-uri": "^2.0.0",
12005
+ "micromark-util-subtokenize": "^2.0.0",
12006
+ "micromark-util-symbol": "^2.0.0",
12007
+ "micromark-util-types": "^2.0.0"
12008
+ }
12009
+ },
12010
+ "node_modules/micromark-core-commonmark": {
12011
+ "version": "2.0.3",
12012
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
12013
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
12014
+ "funding": [
12015
+ {
12016
+ "type": "GitHub Sponsors",
12017
+ "url": "https://github.com/sponsors/unifiedjs"
12018
+ },
12019
+ {
12020
+ "type": "OpenCollective",
12021
+ "url": "https://opencollective.com/unified"
12022
+ }
12023
+ ],
12024
+ "license": "MIT",
12025
+ "dependencies": {
12026
+ "decode-named-character-reference": "^1.0.0",
12027
+ "devlop": "^1.0.0",
12028
+ "micromark-factory-destination": "^2.0.0",
12029
+ "micromark-factory-label": "^2.0.0",
12030
+ "micromark-factory-space": "^2.0.0",
12031
+ "micromark-factory-title": "^2.0.0",
12032
+ "micromark-factory-whitespace": "^2.0.0",
12033
+ "micromark-util-character": "^2.0.0",
12034
+ "micromark-util-chunked": "^2.0.0",
12035
+ "micromark-util-classify-character": "^2.0.0",
12036
+ "micromark-util-html-tag-name": "^2.0.0",
12037
+ "micromark-util-normalize-identifier": "^2.0.0",
12038
+ "micromark-util-resolve-all": "^2.0.0",
12039
+ "micromark-util-subtokenize": "^2.0.0",
12040
+ "micromark-util-symbol": "^2.0.0",
12041
+ "micromark-util-types": "^2.0.0"
12042
+ }
12043
+ },
12044
+ "node_modules/micromark-factory-destination": {
12045
+ "version": "2.0.1",
12046
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
12047
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
12048
+ "funding": [
12049
+ {
12050
+ "type": "GitHub Sponsors",
12051
+ "url": "https://github.com/sponsors/unifiedjs"
12052
+ },
12053
+ {
12054
+ "type": "OpenCollective",
12055
+ "url": "https://opencollective.com/unified"
12056
+ }
12057
+ ],
12058
+ "license": "MIT",
12059
+ "dependencies": {
12060
+ "micromark-util-character": "^2.0.0",
12061
+ "micromark-util-symbol": "^2.0.0",
12062
+ "micromark-util-types": "^2.0.0"
12063
+ }
12064
+ },
12065
+ "node_modules/micromark-factory-label": {
12066
+ "version": "2.0.1",
12067
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
12068
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
12069
+ "funding": [
12070
+ {
12071
+ "type": "GitHub Sponsors",
12072
+ "url": "https://github.com/sponsors/unifiedjs"
12073
+ },
12074
+ {
12075
+ "type": "OpenCollective",
12076
+ "url": "https://opencollective.com/unified"
12077
+ }
12078
+ ],
12079
+ "license": "MIT",
12080
+ "dependencies": {
12081
+ "devlop": "^1.0.0",
12082
+ "micromark-util-character": "^2.0.0",
12083
+ "micromark-util-symbol": "^2.0.0",
12084
+ "micromark-util-types": "^2.0.0"
12085
+ }
12086
+ },
12087
+ "node_modules/micromark-factory-space": {
12088
+ "version": "2.0.1",
12089
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
12090
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
12091
+ "funding": [
12092
+ {
12093
+ "type": "GitHub Sponsors",
12094
+ "url": "https://github.com/sponsors/unifiedjs"
12095
+ },
12096
+ {
12097
+ "type": "OpenCollective",
12098
+ "url": "https://opencollective.com/unified"
12099
+ }
12100
+ ],
12101
+ "license": "MIT",
12102
+ "dependencies": {
12103
+ "micromark-util-character": "^2.0.0",
12104
+ "micromark-util-types": "^2.0.0"
12105
+ }
12106
+ },
12107
+ "node_modules/micromark-factory-title": {
12108
+ "version": "2.0.1",
12109
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
12110
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
12111
+ "funding": [
12112
+ {
12113
+ "type": "GitHub Sponsors",
12114
+ "url": "https://github.com/sponsors/unifiedjs"
12115
+ },
12116
+ {
12117
+ "type": "OpenCollective",
12118
+ "url": "https://opencollective.com/unified"
12119
+ }
12120
+ ],
12121
+ "license": "MIT",
12122
+ "dependencies": {
12123
+ "micromark-factory-space": "^2.0.0",
12124
+ "micromark-util-character": "^2.0.0",
12125
+ "micromark-util-symbol": "^2.0.0",
12126
+ "micromark-util-types": "^2.0.0"
12127
+ }
12128
+ },
12129
+ "node_modules/micromark-factory-whitespace": {
12130
+ "version": "2.0.1",
12131
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
12132
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
12133
+ "funding": [
12134
+ {
12135
+ "type": "GitHub Sponsors",
12136
+ "url": "https://github.com/sponsors/unifiedjs"
12137
+ },
12138
+ {
12139
+ "type": "OpenCollective",
12140
+ "url": "https://opencollective.com/unified"
12141
+ }
12142
+ ],
12143
+ "license": "MIT",
12144
+ "dependencies": {
12145
+ "micromark-factory-space": "^2.0.0",
12146
+ "micromark-util-character": "^2.0.0",
12147
+ "micromark-util-symbol": "^2.0.0",
12148
+ "micromark-util-types": "^2.0.0"
12149
+ }
12150
+ },
12151
+ "node_modules/micromark-util-character": {
12152
+ "version": "2.1.1",
12153
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
12154
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
12155
+ "funding": [
12156
+ {
12157
+ "type": "GitHub Sponsors",
12158
+ "url": "https://github.com/sponsors/unifiedjs"
12159
+ },
12160
+ {
12161
+ "type": "OpenCollective",
12162
+ "url": "https://opencollective.com/unified"
12163
+ }
12164
+ ],
12165
+ "license": "MIT",
12166
+ "dependencies": {
12167
+ "micromark-util-symbol": "^2.0.0",
12168
+ "micromark-util-types": "^2.0.0"
12169
+ }
12170
+ },
12171
+ "node_modules/micromark-util-chunked": {
12172
+ "version": "2.0.1",
12173
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
12174
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
12175
+ "funding": [
12176
+ {
12177
+ "type": "GitHub Sponsors",
12178
+ "url": "https://github.com/sponsors/unifiedjs"
12179
+ },
12180
+ {
12181
+ "type": "OpenCollective",
12182
+ "url": "https://opencollective.com/unified"
12183
+ }
12184
+ ],
12185
+ "license": "MIT",
12186
+ "dependencies": {
12187
+ "micromark-util-symbol": "^2.0.0"
12188
+ }
12189
+ },
12190
+ "node_modules/micromark-util-classify-character": {
12191
+ "version": "2.0.1",
12192
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
12193
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
12194
+ "funding": [
12195
+ {
12196
+ "type": "GitHub Sponsors",
12197
+ "url": "https://github.com/sponsors/unifiedjs"
12198
+ },
12199
+ {
12200
+ "type": "OpenCollective",
12201
+ "url": "https://opencollective.com/unified"
12202
+ }
12203
+ ],
12204
+ "license": "MIT",
12205
+ "dependencies": {
12206
+ "micromark-util-character": "^2.0.0",
12207
+ "micromark-util-symbol": "^2.0.0",
12208
+ "micromark-util-types": "^2.0.0"
12209
+ }
12210
+ },
12211
+ "node_modules/micromark-util-combine-extensions": {
12212
+ "version": "2.0.1",
12213
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
12214
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
12215
+ "funding": [
12216
+ {
12217
+ "type": "GitHub Sponsors",
12218
+ "url": "https://github.com/sponsors/unifiedjs"
12219
+ },
12220
+ {
12221
+ "type": "OpenCollective",
12222
+ "url": "https://opencollective.com/unified"
12223
+ }
12224
+ ],
12225
+ "license": "MIT",
12226
+ "dependencies": {
12227
+ "micromark-util-chunked": "^2.0.0",
12228
+ "micromark-util-types": "^2.0.0"
12229
+ }
12230
+ },
12231
+ "node_modules/micromark-util-decode-numeric-character-reference": {
12232
+ "version": "2.0.2",
12233
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
12234
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
12235
+ "funding": [
12236
+ {
12237
+ "type": "GitHub Sponsors",
12238
+ "url": "https://github.com/sponsors/unifiedjs"
12239
+ },
12240
+ {
12241
+ "type": "OpenCollective",
12242
+ "url": "https://opencollective.com/unified"
12243
+ }
12244
+ ],
12245
+ "license": "MIT",
12246
+ "dependencies": {
12247
+ "micromark-util-symbol": "^2.0.0"
12248
+ }
12249
+ },
12250
+ "node_modules/micromark-util-decode-string": {
12251
+ "version": "2.0.1",
12252
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
12253
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
12254
+ "funding": [
12255
+ {
12256
+ "type": "GitHub Sponsors",
12257
+ "url": "https://github.com/sponsors/unifiedjs"
12258
+ },
12259
+ {
12260
+ "type": "OpenCollective",
12261
+ "url": "https://opencollective.com/unified"
12262
+ }
12263
+ ],
12264
+ "license": "MIT",
12265
+ "dependencies": {
12266
+ "decode-named-character-reference": "^1.0.0",
12267
+ "micromark-util-character": "^2.0.0",
12268
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
12269
+ "micromark-util-symbol": "^2.0.0"
12270
+ }
12271
+ },
12272
+ "node_modules/micromark-util-encode": {
12273
+ "version": "2.0.1",
12274
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
12275
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
12276
+ "funding": [
12277
+ {
12278
+ "type": "GitHub Sponsors",
12279
+ "url": "https://github.com/sponsors/unifiedjs"
12280
+ },
12281
+ {
12282
+ "type": "OpenCollective",
12283
+ "url": "https://opencollective.com/unified"
12284
+ }
12285
+ ],
12286
+ "license": "MIT"
12287
+ },
12288
+ "node_modules/micromark-util-html-tag-name": {
12289
+ "version": "2.0.1",
12290
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
12291
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
12292
+ "funding": [
12293
+ {
12294
+ "type": "GitHub Sponsors",
12295
+ "url": "https://github.com/sponsors/unifiedjs"
12296
+ },
12297
+ {
12298
+ "type": "OpenCollective",
12299
+ "url": "https://opencollective.com/unified"
12300
+ }
12301
+ ],
12302
+ "license": "MIT"
12303
+ },
12304
+ "node_modules/micromark-util-normalize-identifier": {
12305
+ "version": "2.0.1",
12306
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
12307
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
12308
+ "funding": [
12309
+ {
12310
+ "type": "GitHub Sponsors",
12311
+ "url": "https://github.com/sponsors/unifiedjs"
12312
+ },
12313
+ {
12314
+ "type": "OpenCollective",
12315
+ "url": "https://opencollective.com/unified"
12316
+ }
12317
+ ],
12318
+ "license": "MIT",
12319
+ "dependencies": {
12320
+ "micromark-util-symbol": "^2.0.0"
12321
+ }
12322
+ },
12323
+ "node_modules/micromark-util-resolve-all": {
12324
+ "version": "2.0.1",
12325
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
12326
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
12327
+ "funding": [
12328
+ {
12329
+ "type": "GitHub Sponsors",
12330
+ "url": "https://github.com/sponsors/unifiedjs"
12331
+ },
12332
+ {
12333
+ "type": "OpenCollective",
12334
+ "url": "https://opencollective.com/unified"
12335
+ }
12336
+ ],
12337
+ "license": "MIT",
12338
+ "dependencies": {
12339
+ "micromark-util-types": "^2.0.0"
12340
+ }
12341
+ },
12342
+ "node_modules/micromark-util-sanitize-uri": {
12343
+ "version": "2.0.1",
12344
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
12345
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
12346
+ "funding": [
12347
+ {
12348
+ "type": "GitHub Sponsors",
12349
+ "url": "https://github.com/sponsors/unifiedjs"
12350
+ },
12351
+ {
12352
+ "type": "OpenCollective",
12353
+ "url": "https://opencollective.com/unified"
12354
+ }
12355
+ ],
12356
+ "license": "MIT",
12357
+ "dependencies": {
12358
+ "micromark-util-character": "^2.0.0",
12359
+ "micromark-util-encode": "^2.0.0",
12360
+ "micromark-util-symbol": "^2.0.0"
12361
+ }
12362
+ },
12363
+ "node_modules/micromark-util-subtokenize": {
12364
+ "version": "2.1.0",
12365
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
12366
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
12367
+ "funding": [
12368
+ {
12369
+ "type": "GitHub Sponsors",
12370
+ "url": "https://github.com/sponsors/unifiedjs"
12371
+ },
12372
+ {
12373
+ "type": "OpenCollective",
12374
+ "url": "https://opencollective.com/unified"
12375
+ }
12376
+ ],
12377
+ "license": "MIT",
12378
+ "dependencies": {
12379
+ "devlop": "^1.0.0",
12380
+ "micromark-util-chunked": "^2.0.0",
12381
+ "micromark-util-symbol": "^2.0.0",
12382
+ "micromark-util-types": "^2.0.0"
12383
+ }
12384
+ },
12385
+ "node_modules/micromark-util-symbol": {
12386
+ "version": "2.0.1",
12387
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
12388
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
12389
+ "funding": [
12390
+ {
12391
+ "type": "GitHub Sponsors",
12392
+ "url": "https://github.com/sponsors/unifiedjs"
12393
+ },
12394
+ {
12395
+ "type": "OpenCollective",
12396
+ "url": "https://opencollective.com/unified"
12397
+ }
12398
+ ],
12399
+ "license": "MIT"
12400
+ },
12401
+ "node_modules/micromark-util-types": {
12402
+ "version": "2.0.2",
12403
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
12404
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
12405
+ "funding": [
12406
+ {
12407
+ "type": "GitHub Sponsors",
12408
+ "url": "https://github.com/sponsors/unifiedjs"
12409
+ },
12410
+ {
12411
+ "type": "OpenCollective",
12412
+ "url": "https://opencollective.com/unified"
12413
+ }
12414
+ ],
12415
+ "license": "MIT"
12416
+ },
12417
  "node_modules/micromatch": {
12418
  "version": "4.0.8",
12419
  "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
 
12796
  }
12797
  },
12798
  "node_modules/object.getownpropertydescriptors": {
12799
+ "version": "2.1.9",
12800
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz",
12801
+ "integrity": "sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g==",
12802
  "license": "MIT",
12803
  "dependencies": {
12804
+ "array.prototype.reduce": "^1.0.8",
12805
+ "call-bind": "^1.0.8",
12806
  "define-properties": "^1.2.1",
12807
+ "es-abstract": "^1.24.0",
12808
+ "es-object-atoms": "^1.1.1",
12809
+ "gopd": "^1.2.0",
12810
+ "safe-array-concat": "^1.1.3"
12811
  },
12812
  "engines": {
12813
+ "node": ">= 0.4"
12814
  },
12815
  "funding": {
12816
  "url": "https://github.com/sponsors/ljharb"
 
13015
  "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
13016
  "license": "MIT",
13017
  "dependencies": {
13018
+ "callsites": "^3.0.0"
13019
+ },
13020
+ "engines": {
13021
+ "node": ">=6"
13022
+ }
13023
+ },
13024
+ "node_modules/parse-entities": {
13025
+ "version": "4.0.2",
13026
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
13027
+ "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
13028
+ "license": "MIT",
13029
+ "dependencies": {
13030
+ "@types/unist": "^2.0.0",
13031
+ "character-entities-legacy": "^3.0.0",
13032
+ "character-reference-invalid": "^2.0.0",
13033
+ "decode-named-character-reference": "^1.0.0",
13034
+ "is-alphanumerical": "^2.0.0",
13035
+ "is-decimal": "^2.0.0",
13036
+ "is-hexadecimal": "^2.0.0"
13037
  },
13038
+ "funding": {
13039
+ "type": "github",
13040
+ "url": "https://github.com/sponsors/wooorm"
13041
  }
13042
  },
13043
+ "node_modules/parse-entities/node_modules/@types/unist": {
13044
+ "version": "2.0.11",
13045
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
13046
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
13047
+ "license": "MIT"
13048
+ },
13049
  "node_modules/parse-json": {
13050
  "version": "5.2.0",
13051
  "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
 
14619
  "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
14620
  "license": "MIT"
14621
  },
14622
+ "node_modules/property-information": {
14623
+ "version": "7.1.0",
14624
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
14625
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
14626
+ "license": "MIT",
14627
+ "funding": {
14628
+ "type": "github",
14629
+ "url": "https://github.com/sponsors/wooorm"
14630
+ }
14631
+ },
14632
  "node_modules/proxy-addr": {
14633
  "version": "2.0.7",
14634
  "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
 
14936
  "license": "MIT",
14937
  "peer": true
14938
  },
14939
+ "node_modules/react-markdown": {
14940
+ "version": "9.1.0",
14941
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.1.0.tgz",
14942
+ "integrity": "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==",
14943
+ "license": "MIT",
14944
+ "dependencies": {
14945
+ "@types/hast": "^3.0.0",
14946
+ "@types/mdast": "^4.0.0",
14947
+ "devlop": "^1.0.0",
14948
+ "hast-util-to-jsx-runtime": "^2.0.0",
14949
+ "html-url-attributes": "^3.0.0",
14950
+ "mdast-util-to-hast": "^13.0.0",
14951
+ "remark-parse": "^11.0.0",
14952
+ "remark-rehype": "^11.0.0",
14953
+ "unified": "^11.0.0",
14954
+ "unist-util-visit": "^5.0.0",
14955
+ "vfile": "^6.0.0"
14956
+ },
14957
+ "funding": {
14958
+ "type": "opencollective",
14959
+ "url": "https://opencollective.com/unified"
14960
+ },
14961
+ "peerDependencies": {
14962
+ "@types/react": ">=18",
14963
+ "react": ">=18"
14964
+ }
14965
+ },
14966
  "node_modules/react-redux": {
14967
  "version": "9.2.0",
14968
  "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
 
15359
  "node": ">= 0.10"
15360
  }
15361
  },
15362
+ "node_modules/remark-parse": {
15363
+ "version": "11.0.0",
15364
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
15365
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
15366
+ "license": "MIT",
15367
+ "dependencies": {
15368
+ "@types/mdast": "^4.0.0",
15369
+ "mdast-util-from-markdown": "^2.0.0",
15370
+ "micromark-util-types": "^2.0.0",
15371
+ "unified": "^11.0.0"
15372
+ },
15373
+ "funding": {
15374
+ "type": "opencollective",
15375
+ "url": "https://opencollective.com/unified"
15376
+ }
15377
+ },
15378
+ "node_modules/remark-rehype": {
15379
+ "version": "11.1.2",
15380
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
15381
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
15382
+ "license": "MIT",
15383
+ "dependencies": {
15384
+ "@types/hast": "^3.0.0",
15385
+ "@types/mdast": "^4.0.0",
15386
+ "mdast-util-to-hast": "^13.0.0",
15387
+ "unified": "^11.0.0",
15388
+ "vfile": "^6.0.0"
15389
+ },
15390
+ "funding": {
15391
+ "type": "opencollective",
15392
+ "url": "https://opencollective.com/unified"
15393
+ }
15394
+ },
15395
  "node_modules/renderkid": {
15396
  "version": "3.0.0",
15397
  "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
 
15896
  }
15897
  },
15898
  "node_modules/send": {
15899
+ "version": "0.19.2",
15900
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
15901
+ "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
15902
  "license": "MIT",
15903
  "dependencies": {
15904
  "debug": "2.6.9",
 
15907
  "encodeurl": "~2.0.0",
15908
  "escape-html": "~1.0.3",
15909
  "etag": "~1.8.1",
15910
+ "fresh": "~0.5.2",
15911
+ "http-errors": "~2.0.1",
15912
  "mime": "1.6.0",
15913
  "ms": "2.1.3",
15914
+ "on-finished": "~2.4.1",
15915
  "range-parser": "~1.2.1",
15916
+ "statuses": "~2.0.2"
15917
  },
15918
  "engines": {
15919
  "node": ">= 0.8.0"
 
15934
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
15935
  "license": "MIT"
15936
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15937
  "node_modules/serialize-javascript": {
15938
  "version": "6.0.2",
15939
  "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
 
16022
  }
16023
  },
16024
  "node_modules/serve-static": {
16025
+ "version": "1.16.3",
16026
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
16027
+ "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
16028
  "license": "MIT",
16029
  "dependencies": {
16030
  "encodeurl": "~2.0.0",
16031
  "escape-html": "~1.0.3",
16032
  "parseurl": "~1.3.3",
16033
+ "send": "~0.19.1"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16034
  },
16035
  "engines": {
16036
  "node": ">= 0.8.0"
16037
  }
16038
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16039
  "node_modules/set-cookie-parser": {
16040
  "version": "2.7.2",
16041
  "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
 
16302
  "deprecated": "Please use @jridgewell/sourcemap-codec instead",
16303
  "license": "MIT"
16304
  },
16305
+ "node_modules/space-separated-tokens": {
16306
+ "version": "2.0.2",
16307
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
16308
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
16309
+ "license": "MIT",
16310
+ "funding": {
16311
+ "type": "github",
16312
+ "url": "https://github.com/sponsors/wooorm"
16313
+ }
16314
+ },
16315
  "node_modules/spdy": {
16316
  "version": "4.0.2",
16317
  "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
 
16659
  "url": "https://github.com/sponsors/ljharb"
16660
  }
16661
  },
16662
+ "node_modules/stringify-entities": {
16663
+ "version": "4.0.4",
16664
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
16665
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
16666
+ "license": "MIT",
16667
+ "dependencies": {
16668
+ "character-entities-html4": "^2.0.0",
16669
+ "character-entities-legacy": "^3.0.0"
16670
+ },
16671
+ "funding": {
16672
+ "type": "github",
16673
+ "url": "https://github.com/sponsors/wooorm"
16674
+ }
16675
+ },
16676
  "node_modules/stringify-object": {
16677
  "version": "3.3.0",
16678
  "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
 
16766
  "webpack": "^5.0.0"
16767
  }
16768
  },
16769
+ "node_modules/style-to-js": {
16770
+ "version": "1.1.21",
16771
+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz",
16772
+ "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==",
16773
+ "license": "MIT",
16774
+ "dependencies": {
16775
+ "style-to-object": "1.0.14"
16776
+ }
16777
+ },
16778
+ "node_modules/style-to-object": {
16779
+ "version": "1.0.14",
16780
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz",
16781
+ "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==",
16782
+ "license": "MIT",
16783
+ "dependencies": {
16784
+ "inline-style-parser": "0.2.7"
16785
+ }
16786
+ },
16787
  "node_modules/stylehacks": {
16788
  "version": "5.1.1",
16789
  "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
 
17216
  }
17217
  },
17218
  "node_modules/terser-webpack-plugin": {
17219
+ "version": "5.3.16",
17220
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
17221
+ "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
17222
  "license": "MIT",
17223
  "dependencies": {
17224
  "@jridgewell/trace-mapping": "^0.3.25",
 
17423
  "node": ">=8"
17424
  }
17425
  },
17426
+ "node_modules/trim-lines": {
17427
+ "version": "3.0.1",
17428
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
17429
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
17430
+ "license": "MIT",
17431
+ "funding": {
17432
+ "type": "github",
17433
+ "url": "https://github.com/sponsors/wooorm"
17434
+ }
17435
+ },
17436
+ "node_modules/trough": {
17437
+ "version": "2.2.0",
17438
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
17439
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
17440
+ "license": "MIT",
17441
+ "funding": {
17442
+ "type": "github",
17443
+ "url": "https://github.com/sponsors/wooorm"
17444
+ }
17445
+ },
17446
  "node_modules/tryer": {
17447
  "version": "1.0.1",
17448
  "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
 
17455
  "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
17456
  "license": "Apache-2.0"
17457
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17458
  "node_modules/tsconfig-paths": {
17459
  "version": "3.15.0",
17460
  "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
 
17541
  "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
17542
  "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
17543
  "license": "(MIT OR CC0-1.0)",
 
17544
  "engines": {
17545
  "node": ">=10"
17546
  },
 
17645
  }
17646
  },
17647
  "node_modules/typescript": {
17648
+ "version": "5.9.3",
17649
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
17650
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
17651
  "license": "Apache-2.0",
17652
  "peer": true,
17653
  "bin": {
 
17655
  "tsserver": "bin/tsserver"
17656
  },
17657
  "engines": {
17658
+ "node": ">=14.17"
17659
  }
17660
  },
17661
  "node_modules/unbox-primitive": {
 
17728
  "node": ">=4"
17729
  }
17730
  },
17731
+ "node_modules/unified": {
17732
+ "version": "11.0.5",
17733
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
17734
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
17735
+ "license": "MIT",
17736
+ "dependencies": {
17737
+ "@types/unist": "^3.0.0",
17738
+ "bail": "^2.0.0",
17739
+ "devlop": "^1.0.0",
17740
+ "extend": "^3.0.0",
17741
+ "is-plain-obj": "^4.0.0",
17742
+ "trough": "^2.0.0",
17743
+ "vfile": "^6.0.0"
17744
+ },
17745
+ "funding": {
17746
+ "type": "opencollective",
17747
+ "url": "https://opencollective.com/unified"
17748
+ }
17749
+ },
17750
+ "node_modules/unified/node_modules/is-plain-obj": {
17751
+ "version": "4.1.0",
17752
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
17753
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
17754
+ "license": "MIT",
17755
+ "engines": {
17756
+ "node": ">=12"
17757
+ },
17758
+ "funding": {
17759
+ "url": "https://github.com/sponsors/sindresorhus"
17760
+ }
17761
+ },
17762
  "node_modules/unique-string": {
17763
  "version": "2.0.0",
17764
  "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
 
17771
  "node": ">=8"
17772
  }
17773
  },
17774
+ "node_modules/unist-util-is": {
17775
+ "version": "6.0.1",
17776
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
17777
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
17778
+ "license": "MIT",
17779
+ "dependencies": {
17780
+ "@types/unist": "^3.0.0"
17781
+ },
17782
+ "funding": {
17783
+ "type": "opencollective",
17784
+ "url": "https://opencollective.com/unified"
17785
+ }
17786
+ },
17787
+ "node_modules/unist-util-position": {
17788
+ "version": "5.0.0",
17789
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
17790
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
17791
+ "license": "MIT",
17792
+ "dependencies": {
17793
+ "@types/unist": "^3.0.0"
17794
+ },
17795
+ "funding": {
17796
+ "type": "opencollective",
17797
+ "url": "https://opencollective.com/unified"
17798
+ }
17799
+ },
17800
+ "node_modules/unist-util-stringify-position": {
17801
+ "version": "4.0.0",
17802
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
17803
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
17804
+ "license": "MIT",
17805
+ "dependencies": {
17806
+ "@types/unist": "^3.0.0"
17807
+ },
17808
+ "funding": {
17809
+ "type": "opencollective",
17810
+ "url": "https://opencollective.com/unified"
17811
+ }
17812
+ },
17813
+ "node_modules/unist-util-visit": {
17814
+ "version": "5.0.0",
17815
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
17816
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
17817
+ "license": "MIT",
17818
+ "dependencies": {
17819
+ "@types/unist": "^3.0.0",
17820
+ "unist-util-is": "^6.0.0",
17821
+ "unist-util-visit-parents": "^6.0.0"
17822
+ },
17823
+ "funding": {
17824
+ "type": "opencollective",
17825
+ "url": "https://opencollective.com/unified"
17826
+ }
17827
+ },
17828
+ "node_modules/unist-util-visit-parents": {
17829
+ "version": "6.0.2",
17830
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
17831
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
17832
+ "license": "MIT",
17833
+ "dependencies": {
17834
+ "@types/unist": "^3.0.0",
17835
+ "unist-util-is": "^6.0.0"
17836
+ },
17837
+ "funding": {
17838
+ "type": "opencollective",
17839
+ "url": "https://opencollective.com/unified"
17840
+ }
17841
+ },
17842
  "node_modules/universalify": {
17843
  "version": "2.0.1",
17844
  "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
 
17976
  "uuid": "dist/bin/uuid"
17977
  }
17978
  },
 
 
 
 
 
 
 
17979
  "node_modules/v8-to-istanbul": {
17980
  "version": "8.1.1",
17981
  "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
 
18005
  "node": ">= 0.8"
18006
  }
18007
  },
18008
+ "node_modules/vfile": {
18009
+ "version": "6.0.3",
18010
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
18011
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
18012
+ "license": "MIT",
18013
+ "dependencies": {
18014
+ "@types/unist": "^3.0.0",
18015
+ "vfile-message": "^4.0.0"
18016
+ },
18017
+ "funding": {
18018
+ "type": "opencollective",
18019
+ "url": "https://opencollective.com/unified"
18020
+ }
18021
+ },
18022
+ "node_modules/vfile-message": {
18023
+ "version": "4.0.3",
18024
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
18025
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
18026
+ "license": "MIT",
18027
+ "dependencies": {
18028
+ "@types/unist": "^3.0.0",
18029
+ "unist-util-stringify-position": "^4.0.0"
18030
+ },
18031
+ "funding": {
18032
+ "type": "opencollective",
18033
+ "url": "https://opencollective.com/unified"
18034
+ }
18035
+ },
18036
  "node_modules/victory-vendor": {
18037
  "version": "37.3.6",
18038
  "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
 
18087
  }
18088
  },
18089
  "node_modules/watchpack": {
18090
+ "version": "2.5.0",
18091
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz",
18092
+ "integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==",
18093
  "license": "MIT",
18094
  "dependencies": {
18095
  "glob-to-regexp": "^0.4.1",
 
18124
  }
18125
  },
18126
  "node_modules/webpack": {
18127
+ "version": "5.104.1",
18128
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz",
18129
+ "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
18130
  "license": "MIT",
18131
  "peer": true,
18132
  "dependencies": {
 
18138
  "@webassemblyjs/wasm-parser": "^1.14.1",
18139
  "acorn": "^8.15.0",
18140
  "acorn-import-phases": "^1.0.3",
18141
+ "browserslist": "^4.28.1",
18142
  "chrome-trace-event": "^1.0.2",
18143
+ "enhanced-resolve": "^5.17.4",
18144
+ "es-module-lexer": "^2.0.0",
18145
  "eslint-scope": "5.1.1",
18146
  "events": "^3.2.0",
18147
  "glob-to-regexp": "^0.4.1",
 
18152
  "neo-async": "^2.6.2",
18153
  "schema-utils": "^4.3.3",
18154
  "tapable": "^2.3.0",
18155
+ "terser-webpack-plugin": "^5.3.16",
18156
  "watchpack": "^2.4.4",
18157
  "webpack-sources": "^3.3.3"
18158
  },
 
18200
  "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
18201
  "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
18202
  "license": "MIT",
 
18203
  "dependencies": {
18204
  "@types/bonjour": "^3.5.9",
18205
  "@types/connect-history-api-fallback": "^1.3.5",
 
18982
  "node": ">=10"
18983
  }
18984
  },
 
 
 
 
 
 
 
 
 
 
18985
  "node_modules/yocto-queue": {
18986
  "version": "0.1.0",
18987
  "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
 
18993
  "funding": {
18994
  "url": "https://github.com/sponsors/sindresorhus"
18995
  }
18996
+ },
18997
+ "node_modules/zwitch": {
18998
+ "version": "2.0.4",
18999
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
19000
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
19001
+ "license": "MIT",
19002
+ "funding": {
19003
+ "type": "github",
19004
+ "url": "https://github.com/sponsors/wooorm"
19005
+ }
19006
  }
19007
  }
19008
  }
package.json CHANGED
@@ -11,8 +11,9 @@
11
  "postgres": "^3.4.7",
12
  "react": "^19.1.0",
13
  "react-dom": "^19.1.0",
 
14
  "react-router-dom": "^7.10.1",
15
- "react-scripts": "5.0.1",
16
  "recharts": "^3.5.1",
17
  "web-vitals": "^2.1.4"
18
  },
 
11
  "postgres": "^3.4.7",
12
  "react": "^19.1.0",
13
  "react-dom": "^19.1.0",
14
+ "react-markdown": "^9.0.1",
15
  "react-router-dom": "^7.10.1",
16
+ "react-scripts": "^5.0.1",
17
  "recharts": "^3.5.1",
18
  "web-vitals": "^2.1.4"
19
  },
src/app/App.tsx CHANGED
@@ -9,7 +9,7 @@ import { useAuth } from './hooks/index.ts';
9
 
10
 
11
  const App = () => {
12
- // Use reactive authentication state
13
  const { isAuthenticated } = useAuth();
14
 
15
  return (
 
9
 
10
 
11
  const App = () => {
12
+ // add Use reactive authentication state
13
  const { isAuthenticated } = useAuth();
14
 
15
  return (
src/app/components/chat/ChatInput.tsx CHANGED
@@ -41,6 +41,26 @@ const normalizeToolName = (toolName: string): string => {
41
  return toolName;
42
  };
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  const ChatInput = ({ onSubmit, onAudioSubmit, placeholder = 'Ask a follow-up...' }: ChatInputProps) => {
45
  const [input, setInput] = useState('');
46
  const [isRecording, setIsRecording] = useState(false);
@@ -48,6 +68,9 @@ const ChatInput = ({ onSubmit, onAudioSubmit, placeholder = 'Ask a follow-up...'
48
  const [selectedTool, setSelectedTool] = useState<string | null>(null);
49
  const [selectedStance, setSelectedStance] = useState<'positive' | 'negative' | null>(null);
50
  const [searchQuery, setSearchQuery] = useState('');
 
 
 
51
  const [focusedIndex, setFocusedIndex] = useState(-1);
52
  const [dropdownPosition, setDropdownPosition] = useState<'below' | 'above'>('below');
53
  const [dropdownMaxHeight, setDropdownMaxHeight] = useState(320);
@@ -67,14 +90,31 @@ const ChatInput = ({ onSubmit, onAudioSubmit, placeholder = 'Ask a follow-up...'
67
  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
68
  e.preventDefault();
69
  e.stopPropagation();
70
- if (input.trim()) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  if (onSubmit) {
72
  onSubmit(input, selectedTool, selectedStance || undefined);
73
  }
74
  console.log('Submitted:', input);
75
  setInput('');
76
  // Reset stance after submit if generate argument tool
77
- if (selectedTool && normalizeToolName(selectedTool) === 'generate argument') {
78
  setSelectedStance(null);
79
  }
80
  }
@@ -548,33 +588,69 @@ const ChatInput = ({ onSubmit, onAudioSubmit, placeholder = 'Ask a follow-up...'
548
  </div>
549
  ) : (
550
  <div className="animate-fade-in">
551
- <textarea
552
- value={input}
553
- onChange={(e) => setInput(e.target.value)}
554
- onKeyDown={(e) => {
555
- if (e.key === 'Enter' && !e.shiftKey) {
556
- e.preventDefault();
557
- if (input.trim()) {
558
- if (onSubmit) {
559
- onSubmit(input, selectedTool, selectedStance || undefined);
560
- }
561
- setInput('');
562
- // Reset stance after submit if generate argument tool
563
- if (selectedTool && normalizeToolName(selectedTool) === 'generate argument') {
564
- setSelectedStance(null);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
565
  }
566
  }
567
- }
568
- }}
569
- placeholder={placeholder}
570
- className="w-full bg-transparent text-zinc-800 dark:text-gray-300 placeholder-zinc-400 dark:placeholder-gray-500 resize-none border-none outline-none text-base leading-relaxed min-h-[24px] max-h-32 transition-all duration-200"
571
- rows={1}
572
- onInput={(e) => {
573
- const target = e.target as HTMLTextAreaElement;
574
- target.style.height = 'auto';
575
- target.style.height = target.scrollHeight + 'px';
576
- }}
577
- />
578
 
579
  {/* Stance selection buttons for generate argument tool */}
580
  {selectedTool && normalizeToolName(selectedTool) === 'generate argument' && (
@@ -799,7 +875,11 @@ const ChatInput = ({ onSubmit, onAudioSubmit, placeholder = 'Ask a follow-up...'
799
 
800
  <button
801
  type="submit"
802
- disabled={!input.trim()}
 
 
 
 
803
  className="h-8 w-8 p-0 bg-zinc-300 dark:bg-zinc-700 hover:bg-zinc-400 dark:hover:bg-zinc-600 disabled:bg-zinc-200 dark:disabled:bg-zinc-800 disabled:text-zinc-400 dark:disabled:text-zinc-500 text-zinc-800 dark:text-white rounded-lg transition-all duration-200 hover:scale-110 disabled:hover:scale-100 flex items-center justify-center disabled:cursor-not-allowed"
804
  >
805
  <ArrowUp className="h-5 w-5" />
 
41
  return toolName;
42
  };
43
 
44
+ // Helper function to get dynamic placeholder based on selected tool
45
+ const getPlaceholder = (selectedTool: string | null, defaultPlaceholder: string): string => {
46
+ if (!selectedTool) {
47
+ return defaultPlaceholder;
48
+ }
49
+
50
+ const normalizedTool = normalizeToolName(selectedTool);
51
+
52
+ switch (normalizedTool) {
53
+ case 'detect stance':
54
+ return ''; // Will use separate fields, no placeholder needed
55
+ case 'generate argument':
56
+ return 'Enter a debate topic to generate an argument (e.g., "cannabis legalization")...';
57
+ case 'extract topic':
58
+ return 'Enter text to extract the topic (e.g., "Should we legalize assisted suicide?")...';
59
+ default:
60
+ return defaultPlaceholder;
61
+ }
62
+ };
63
+
64
  const ChatInput = ({ onSubmit, onAudioSubmit, placeholder = 'Ask a follow-up...' }: ChatInputProps) => {
65
  const [input, setInput] = useState('');
66
  const [isRecording, setIsRecording] = useState(false);
 
68
  const [selectedTool, setSelectedTool] = useState<string | null>(null);
69
  const [selectedStance, setSelectedStance] = useState<'positive' | 'negative' | null>(null);
70
  const [searchQuery, setSearchQuery] = useState('');
71
+ // Separate inputs for detect stance tool
72
+ const [detectStanceTopic, setDetectStanceTopic] = useState('');
73
+ const [detectStanceArgument, setDetectStanceArgument] = useState('');
74
  const [focusedIndex, setFocusedIndex] = useState(-1);
75
  const [dropdownPosition, setDropdownPosition] = useState<'below' | 'above'>('below');
76
  const [dropdownMaxHeight, setDropdownMaxHeight] = useState(320);
 
90
  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
91
  e.preventDefault();
92
  e.stopPropagation();
93
+
94
+ const normalizedTool = selectedTool ? normalizeToolName(selectedTool) : null;
95
+
96
+ // Handle detect stance tool with two fields
97
+ if (normalizedTool === 'detect stance') {
98
+ if (detectStanceTopic.trim() && detectStanceArgument.trim()) {
99
+ // Format as JSON string for detect stance: topic and argument
100
+ const detectStanceInput = JSON.stringify({
101
+ topic: detectStanceTopic.trim(),
102
+ argument: detectStanceArgument.trim(),
103
+ });
104
+ if (onSubmit) {
105
+ onSubmit(detectStanceInput, selectedTool);
106
+ }
107
+ setDetectStanceTopic('');
108
+ setDetectStanceArgument('');
109
+ }
110
+ } else if (input.trim()) {
111
  if (onSubmit) {
112
  onSubmit(input, selectedTool, selectedStance || undefined);
113
  }
114
  console.log('Submitted:', input);
115
  setInput('');
116
  // Reset stance after submit if generate argument tool
117
+ if (normalizedTool === 'generate argument') {
118
  setSelectedStance(null);
119
  }
120
  }
 
588
  </div>
589
  ) : (
590
  <div className="animate-fade-in">
591
+ {/* Two input fields for detect stance tool */}
592
+ {selectedTool && normalizeToolName(selectedTool) === 'detect stance' ? (
593
+ <div className="space-y-3">
594
+ <div>
595
+ <label className="block text-xs font-medium text-zinc-600 dark:text-zinc-400 mb-1.5">
596
+ Topic
597
+ </label>
598
+ <input
599
+ type="text"
600
+ value={detectStanceTopic}
601
+ onChange={(e) => setDetectStanceTopic(e.target.value)}
602
+ placeholder="Enter the debate topic (e.g., Climate change is real)"
603
+ className="w-full bg-transparent text-zinc-800 dark:text-gray-300 placeholder-zinc-400 dark:placeholder-gray-500 border border-zinc-300 dark:border-zinc-600 rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-teal-500 dark:focus:ring-teal-400"
604
+ />
605
+ </div>
606
+ <div>
607
+ <label className="block text-xs font-medium text-zinc-600 dark:text-zinc-400 mb-1.5">
608
+ Argument
609
+ </label>
610
+ <textarea
611
+ value={detectStanceArgument}
612
+ onChange={(e) => setDetectStanceArgument(e.target.value)}
613
+ placeholder="Enter the argument to analyze (e.g., Rising global temperatures prove it)"
614
+ className="w-full bg-transparent text-zinc-800 dark:text-gray-300 placeholder-zinc-400 dark:placeholder-gray-500 border border-zinc-300 dark:border-zinc-600 rounded-lg px-3 py-2 text-sm resize-none focus:outline-none focus:ring-2 focus:ring-teal-500 dark:focus:ring-teal-400 min-h-[60px]"
615
+ rows={2}
616
+ onKeyDown={(e) => {
617
+ if (e.key === 'Enter' && !e.shiftKey && detectStanceTopic.trim() && detectStanceArgument.trim()) {
618
+ e.preventDefault();
619
+ handleSubmit(e as any);
620
+ }
621
+ }}
622
+ />
623
+ </div>
624
+ </div>
625
+ ) : (
626
+ <textarea
627
+ value={input}
628
+ onChange={(e) => setInput(e.target.value)}
629
+ onKeyDown={(e) => {
630
+ if (e.key === 'Enter' && !e.shiftKey) {
631
+ e.preventDefault();
632
+ if (input.trim()) {
633
+ if (onSubmit) {
634
+ onSubmit(input, selectedTool, selectedStance || undefined);
635
+ }
636
+ setInput('');
637
+ // Reset stance after submit if generate argument tool
638
+ if (selectedTool && normalizeToolName(selectedTool) === 'generate argument') {
639
+ setSelectedStance(null);
640
+ }
641
  }
642
  }
643
+ }}
644
+ placeholder={getPlaceholder(selectedTool, placeholder)}
645
+ className="w-full bg-transparent text-zinc-800 dark:text-gray-300 placeholder-zinc-400 dark:placeholder-gray-500 resize-none border-none outline-none text-base leading-relaxed min-h-[24px] max-h-32 transition-all duration-200"
646
+ rows={1}
647
+ onInput={(e) => {
648
+ const target = e.target as HTMLTextAreaElement;
649
+ target.style.height = 'auto';
650
+ target.style.height = target.scrollHeight + 'px';
651
+ }}
652
+ />
653
+ )}
654
 
655
  {/* Stance selection buttons for generate argument tool */}
656
  {selectedTool && normalizeToolName(selectedTool) === 'generate argument' && (
 
875
 
876
  <button
877
  type="submit"
878
+ disabled={
879
+ selectedTool && normalizeToolName(selectedTool) === 'detect stance'
880
+ ? !detectStanceTopic.trim() || !detectStanceArgument.trim()
881
+ : !input.trim()
882
+ }
883
  className="h-8 w-8 p-0 bg-zinc-300 dark:bg-zinc-700 hover:bg-zinc-400 dark:hover:bg-zinc-600 disabled:bg-zinc-200 dark:disabled:bg-zinc-800 disabled:text-zinc-400 dark:disabled:text-zinc-500 text-zinc-800 dark:text-white rounded-lg transition-all duration-200 hover:scale-110 disabled:hover:scale-100 flex items-center justify-center disabled:cursor-not-allowed"
884
  >
885
  <ArrowUp className="h-5 w-5" />
src/app/components/chat/MessageList.tsx CHANGED
@@ -1,4 +1,5 @@
1
  import React, { useEffect, useRef } from 'react';
 
2
  import type { ChatMessage } from '../../types/chat.types.ts';
3
  import { Loader2, AlertCircle, RotateCcw } from 'lucide-react';
4
  import AudioPlayer from './AudioPlayer.tsx';
@@ -11,6 +12,19 @@ type MessageListProps = {
11
  onRetry?: () => void;
12
  };
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  const MessageList = ({ messages, isLoading = false, error = null, onRetry }: MessageListProps) => {
15
  const messagesEndRef = useRef<HTMLDivElement>(null);
16
 
@@ -31,9 +45,9 @@ const MessageList = ({ messages, isLoading = false, error = null, onRetry }: Mes
31
 
32
  const getToolClasses = (message: ChatMessage) => {
33
  if (message.role !== 'assistant' || !message.tool) return '';
34
-
35
  const toolLower = message.tool.toLowerCase();
36
-
37
  // Match tool names flexibly (case-insensitive, handles variations)
38
  if (toolLower.includes('detect') && toolLower.includes('stance')) {
39
  return 'border-l-4 border-blue-400 pl-3 bg-blue-50/30 dark:bg-blue-900/10';
@@ -44,16 +58,16 @@ const MessageList = ({ messages, isLoading = false, error = null, onRetry }: Mes
44
  if (toolLower.includes('extract') && toolLower.includes('topic')) {
45
  return 'border-l-4 border-emerald-400 pl-3 bg-emerald-50/30 dark:bg-emerald-900/10';
46
  }
47
-
48
  // Default styling for other tools
49
  return 'border-l-4 border-teal-400 pl-3 bg-teal-50/30 dark:bg-teal-900/10';
50
  };
51
 
52
  const getToolLabel = (tool: string | null | undefined): string => {
53
  if (!tool) return '';
54
-
55
  const toolLower = tool.toLowerCase();
56
-
57
  if (toolLower.includes('detect') && toolLower.includes('stance')) {
58
  return 'Detect Stance';
59
  }
@@ -63,13 +77,13 @@ const MessageList = ({ messages, isLoading = false, error = null, onRetry }: Mes
63
  if (toolLower.includes('extract') && toolLower.includes('topic')) {
64
  return 'Extract Topic';
65
  }
66
-
67
  // Return formatted tool name (capitalize first letter of each word)
68
- return tool.split(/[\s_-]+/).map(word =>
69
  word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()
70
  ).join(' ');
71
  };
72
-
73
  return (
74
  <div className="flex-1 overflow-y-auto px-4 py-6 space-y-4">
75
  {messages.length === 0 && !isLoading && (
@@ -90,73 +104,190 @@ const MessageList = ({ messages, isLoading = false, error = null, onRetry }: Mes
90
  </div>
91
  )}
92
 
93
- {messages.map((message, index) => (
94
- <div
95
- key={message.id}
96
- className={`flex ${message.role === 'user' ? 'justify-end' : 'justify-start'}`}
97
- >
98
  <div
99
- className={`max-w-3xl px-4 py-3 rounded-2xl ${
100
- message.role === 'user'
 
 
 
101
  ? 'bg-teal-500 text-white ml-12'
102
  : 'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100 mr-12'
103
- }${getToolClasses(message)}`} // Apply tool-specific classes
104
- >
105
- {message.audioUrl ? (
106
- // Audio message display with toggleable text transcript
107
- <div>
108
- <AudioPlayer
109
- src={message.audioUrl}
110
- autoPlay={message.role === 'assistant' && index === messages.length - 1} // Auto-play only the most recent AI response
111
- />
112
  <TranscriptToggle content={message.content} />
113
- </div>
114
- ) : (
115
- // Regular text message
116
- <div>
117
- {message.tool && message.role === 'assistant' && (
118
- <div className="mb-2 text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">
119
- {getToolLabel(message.tool)}
120
- </div>
121
- )}
122
-
123
- <div className="whitespace-pre-wrap break-words">
124
- {message.content}
125
  </div>
 
 
 
 
 
 
 
126
 
127
- {message.role === 'assistant' && message.tool &&
128
- message.tool.toLowerCase().includes('generate') &&
129
- message.tool.toLowerCase().includes('argument') && (
130
- <div className="mt-3 flex gap-2">
131
- <button
132
- type="button"
133
- className="px-3 py-1 text-xs rounded-full bg-emerald-100 text-emerald-800 hover:bg-emerald-200 dark:bg-emerald-900/40 dark:text-emerald-200 transition-colors"
134
- >
135
- Positive stance
136
- </button>
137
- <button
138
- type="button"
139
- className="px-3 py-1 text-xs rounded-full bg-rose-100 text-rose-800 hover:bg-rose-200 dark:bg-rose-900/40 dark:text-rose-200 transition-colors"
140
- >
141
- Negative stance
142
- </button>
143
- </div>
144
- )}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  </div>
146
- )}
147
- <div
148
- className={`text-xs mt-1 ${
149
- message.role === 'user'
150
- ? 'text-teal-100'
151
- : 'text-gray-500 dark:text-gray-400'
152
- }`}
153
- >
154
- {formatTime(message.timestamp)}
155
  </div>
156
  </div>
157
- </div>
158
- ))}
159
-
160
 
161
  {isLoading && (
162
  <div className="flex justify-start">
 
1
  import React, { useEffect, useRef } from 'react';
2
+ import ReactMarkdown from 'react-markdown';
3
  import type { ChatMessage } from '../../types/chat.types.ts';
4
  import { Loader2, AlertCircle, RotateCcw } from 'lucide-react';
5
  import AudioPlayer from './AudioPlayer.tsx';
 
12
  onRetry?: () => void;
13
  };
14
 
15
+ /**
16
+ * Helper to determine if a message should use the specialized detection stance UI
17
+ */
18
+ const isSpecializedStanceUI = (message: ChatMessage): boolean => {
19
+ const toolLower = message.tool?.toLowerCase() || '';
20
+ if (!toolLower.includes('detect') || !toolLower.includes('stance')) return false;
21
+
22
+ if (message.role === 'user') {
23
+ return message.content.includes('**Topic:**');
24
+ }
25
+ return message.role === 'assistant';
26
+ };
27
+
28
  const MessageList = ({ messages, isLoading = false, error = null, onRetry }: MessageListProps) => {
29
  const messagesEndRef = useRef<HTMLDivElement>(null);
30
 
 
45
 
46
  const getToolClasses = (message: ChatMessage) => {
47
  if (message.role !== 'assistant' || !message.tool) return '';
48
+
49
  const toolLower = message.tool.toLowerCase();
50
+
51
  // Match tool names flexibly (case-insensitive, handles variations)
52
  if (toolLower.includes('detect') && toolLower.includes('stance')) {
53
  return 'border-l-4 border-blue-400 pl-3 bg-blue-50/30 dark:bg-blue-900/10';
 
58
  if (toolLower.includes('extract') && toolLower.includes('topic')) {
59
  return 'border-l-4 border-emerald-400 pl-3 bg-emerald-50/30 dark:bg-emerald-900/10';
60
  }
61
+
62
  // Default styling for other tools
63
  return 'border-l-4 border-teal-400 pl-3 bg-teal-50/30 dark:bg-teal-900/10';
64
  };
65
 
66
  const getToolLabel = (tool: string | null | undefined): string => {
67
  if (!tool) return '';
68
+
69
  const toolLower = tool.toLowerCase();
70
+
71
  if (toolLower.includes('detect') && toolLower.includes('stance')) {
72
  return 'Detect Stance';
73
  }
 
77
  if (toolLower.includes('extract') && toolLower.includes('topic')) {
78
  return 'Extract Topic';
79
  }
80
+
81
  // Return formatted tool name (capitalize first letter of each word)
82
+ return tool.split(/[\s_-]+/).map(word =>
83
  word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()
84
  ).join(' ');
85
  };
86
+
87
  return (
88
  <div className="flex-1 overflow-y-auto px-4 py-6 space-y-4">
89
  {messages.length === 0 && !isLoading && (
 
104
  </div>
105
  )}
106
 
107
+ {messages.map((message, index) => {
108
+ const showSpecializedStance = isSpecializedStanceUI(message);
109
+
110
+ return (
 
111
  <div
112
+ key={message.id}
113
+ className={`flex ${message.role === 'user' ? 'justify-end' : 'justify-start'}`}
114
+ >
115
+ <div
116
+ className={`max-w-3xl px-4 py-3 rounded-2xl ${message.role === 'user'
117
  ? 'bg-teal-500 text-white ml-12'
118
  : 'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100 mr-12'
119
+ }${getToolClasses(message) ? ' ' + getToolClasses(message) : ''}`}
120
+ >
121
+ {message.audioUrl ? (
122
+ <div>
123
+ <AudioPlayer
124
+ src={message.audioUrl}
125
+ autoPlay={message.role === 'assistant' && index === messages.length - 1}
126
+ />
 
127
  <TranscriptToggle content={message.content} />
 
 
 
 
 
 
 
 
 
 
 
 
128
  </div>
129
+ ) : (
130
+ <div className="space-y-3">
131
+ {message.tool && message.role === 'assistant' && (
132
+ <div className="mb-1 text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">
133
+ {getToolLabel(message.tool)}
134
+ </div>
135
+ )}
136
 
137
+ {showSpecializedStance ? (
138
+ <div className="space-y-3">
139
+ {message.role === 'user' ? (
140
+ <div className="space-y-2">
141
+ {message.content.split('\n').map((line, idx) => {
142
+ if (line.startsWith('**Topic:**')) {
143
+ const topicText = line.replace('**Topic:**', '').trim();
144
+ return (
145
+ <div key={idx}>
146
+ <span className="text-xs font-semibold opacity-90">Topic: </span>
147
+ <span className="text-sm">{topicText}</span>
148
+ </div>
149
+ );
150
+ } else if (line.startsWith('**Argument:**')) {
151
+ const argumentText = line.replace('**Argument:**', '').trim();
152
+ return (
153
+ <div key={idx}>
154
+ <span className="text-xs font-semibold opacity-90">Argument: </span>
155
+ <span className="text-sm">{argumentText}</span>
156
+ </div>
157
+ );
158
+ }
159
+ return null;
160
+ })}
161
+ </div>
162
+ ) : (
163
+ <div className="space-y-3">
164
+ {message.content.split('\n').map((line, idx) => {
165
+ if (line.startsWith('**Stance:**')) {
166
+ const stanceText = line.replace('**Stance:**', '').trim();
167
+ const isPro = stanceText.includes('PRO') || stanceText.toLowerCase().includes('positive');
168
+ return (
169
+ <div key={idx} className="flex items-center gap-2">
170
+ <span className="text-xs font-semibold text-gray-600 dark:text-gray-400">Stance:</span>
171
+ <span className={`px-2.5 py-1 rounded-full text-xs font-semibold ${isPro
172
+ ? 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900/40 dark:text-emerald-200'
173
+ : 'bg-rose-100 text-rose-800 dark:bg-rose-900/40 dark:text-rose-200'
174
+ }`}>
175
+ {stanceText}
176
+ </span>
177
+ </div>
178
+ );
179
+ } else if (line.startsWith('**Confidence:**')) {
180
+ const confidenceText = line.replace('**Confidence:**', '').trim();
181
+ const confidenceValue = parseFloat(confidenceText.replace('%', '')) || 0;
182
+ const getConfidenceColor = (value: number) => {
183
+ if (value >= 80) return 'bg-emerald-500';
184
+ if (value >= 60) return 'bg-yellow-500';
185
+ return 'bg-orange-500';
186
+ };
187
+ return (
188
+ <div key={idx} className="space-y-2">
189
+ <div className="flex items-center justify-between gap-2">
190
+ <span className="text-xs font-semibold text-gray-600 dark:text-gray-400">Confidence:</span>
191
+ <span className="text-sm font-medium text-gray-700 dark:text-gray-300">{confidenceText}</span>
192
+ </div>
193
+ <div className="w-full bg-gray-200 dark:bg-gray-700 rounded-full h-1.5 overflow-hidden">
194
+ <div
195
+ className={`h-full transition-all duration-500 ${getConfidenceColor(confidenceValue)}`}
196
+ style={{ width: `${Math.min(confidenceValue, 100)}%` }}
197
+ />
198
+ </div>
199
+ </div>
200
+ );
201
+ } else if (line.startsWith('**Explanation:**')) {
202
+ const explanationParts = message.content.split('**Explanation:**\n');
203
+ const explanationText = explanationParts.length > 1 ? explanationParts[1] : '';
204
+ return (
205
+ <div key={idx} className="pt-2 border-t border-gray-200 dark:border-gray-700">
206
+ <div className="text-xs font-semibold text-gray-600 dark:text-gray-400 mb-1">Explanation:</div>
207
+ <div className="text-sm text-gray-700 dark:text-gray-300 whitespace-pre-wrap leading-relaxed">
208
+ {explanationText}
209
+ </div>
210
+ </div>
211
+ );
212
+ }
213
+ return null;
214
+ })}
215
+ </div>
216
+ )}
217
+ </div>
218
+ ) : (
219
+ <div className="text-sm leading-relaxed break-words">
220
+ <ReactMarkdown
221
+ components={{
222
+ p: ({ node, ...props }) => (
223
+ <p {...props} className="whitespace-pre-wrap mb-2 last:mb-0" />
224
+ ),
225
+ ul: ({ node, ...props }) => (
226
+ <ul {...props} className="list-disc ml-5 space-y-1 mb-2 last:mb-0" />
227
+ ),
228
+ ol: ({ node, ...props }) => (
229
+ <ol {...props} className="list-decimal ml-5 space-y-1 mb-2 last:mb-0" />
230
+ ),
231
+ li: ({ node, ...props }) => (
232
+ <li {...props} className="ml-1" />
233
+ ),
234
+ }}
235
+ >
236
+ {typeof message.content === 'string' ? message.content : ''}
237
+ </ReactMarkdown>
238
+ </div>
239
+ )}
240
+
241
+ {/* Process pipeline for extract topic tool */}
242
+ {message.role === 'assistant' &&
243
+ message.tool?.toLowerCase().includes('extract') &&
244
+ message.tool?.toLowerCase().includes('topic') &&
245
+ message.process && (
246
+ <div className="mt-3 pt-3 border-t border-gray-200 dark:border-gray-700">
247
+ <div className="flex items-center gap-2 flex-wrap">
248
+ <span className="text-[10px] uppercase tracking-wide text-gray-400 dark:text-gray-500 font-medium">
249
+ Process:
250
+ </span>
251
+ {message.process.split('→').map((step, sIdx, steps) => (
252
+ <React.Fragment key={sIdx}>
253
+ <span className="px-2 py-0.5 text-[10px] bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400 rounded font-medium">
254
+ {step.trim()}
255
+ </span>
256
+ {sIdx < steps.length - 1 && (
257
+ <span className="text-gray-400 dark:text-gray-600 text-xs">→</span>
258
+ )}
259
+ </React.Fragment>
260
+ ))}
261
+ </div>
262
+ </div>
263
+ )}
264
+
265
+ {/* Stance info for generate argument tool */}
266
+ {message.role === 'assistant' &&
267
+ message.tool?.toLowerCase().includes('generate') &&
268
+ message.tool?.toLowerCase().includes('argument') &&
269
+ message.stance && (
270
+ <div className="mt-2 flex gap-2">
271
+ <span className={`px-2.5 py-0.5 text-[10px] rounded-full font-semibold uppercase tracking-wider ${message.stance === 'positive'
272
+ ? 'bg-emerald-500 text-white'
273
+ : 'bg-rose-500 text-white'
274
+ }`}>
275
+ {message.stance} stance
276
+ </span>
277
+ </div>
278
+ )}
279
+ </div>
280
+ )}
281
+ <div
282
+ className={`text-[10px] mt-2 opacity-60 ${message.role === 'user' ? 'text-right opacity-80' : 'text-left'
283
+ }`}
284
+ >
285
+ {formatTime(message.timestamp)}
286
  </div>
 
 
 
 
 
 
 
 
 
287
  </div>
288
  </div>
289
+ );
290
+ })}
 
291
 
292
  {isLoading && (
293
  <div className="flex justify-start">
src/app/components/chat/TranscriptToggle.tsx CHANGED
@@ -1,11 +1,12 @@
1
  import React, { useState } from 'react';
 
2
  import { ChevronDown, ChevronUp } from 'lucide-react';
3
 
4
  type TranscriptToggleProps = {
5
  content: string;
6
  };
7
 
8
- const TranscriptToggle: React.FC<TranscriptToggleProps> = ({ content }) => {
9
  const [isExpanded, setIsExpanded] = useState(false);
10
 
11
  const toggleTranscript = () => {
@@ -28,10 +29,33 @@ const TranscriptToggle: React.FC<TranscriptToggleProps> = ({ content }) => {
28
  )}
29
  </button>
30
  {isExpanded && (
31
- <div
32
- className="mt-2 pt-2 border-t border-gray-200 dark:border-gray-700 whitespace-pre-wrap break-words text-gray-800 dark:text-gray-200"
33
  >
34
- {content}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  </div>
36
  )}
37
  </div>
 
1
  import React, { useState } from 'react';
2
+ import ReactMarkdown from 'react-markdown';
3
  import { ChevronDown, ChevronUp } from 'lucide-react';
4
 
5
  type TranscriptToggleProps = {
6
  content: string;
7
  };
8
 
9
+ const TranscriptToggle = ({ content }: TranscriptToggleProps) => {
10
  const [isExpanded, setIsExpanded] = useState(false);
11
 
12
  const toggleTranscript = () => {
 
29
  )}
30
  </button>
31
  {isExpanded && (
32
+ <div
33
+ className="mt-2 pt-2 border-t border-gray-200 dark:border-gray-700 text-gray-800 dark:text-gray-200 text-sm leading-relaxed break-words"
34
  >
35
+ <ReactMarkdown
36
+ components={{
37
+ p: ({ node, ...props }) => (
38
+ <p {...props} className="whitespace-pre-wrap mb-2 last:mb-0" />
39
+ ),
40
+ ul: ({ node, ...props }) => (
41
+ <ul
42
+ {...props}
43
+ className="list-disc ml-5 space-y-1 mb-2 last:mb-0"
44
+ />
45
+ ),
46
+ ol: ({ node, ...props }) => (
47
+ <ol
48
+ {...props}
49
+ className="list-decimal ml-5 space-y-1 mb-2 last:mb-0"
50
+ />
51
+ ),
52
+ li: ({ node, ...props }) => (
53
+ <li {...props} className="ml-1" />
54
+ ),
55
+ }}
56
+ >
57
+ {content}
58
+ </ReactMarkdown>
59
  </div>
60
  )}
61
  </div>
src/app/hooks/useChat.ts CHANGED
@@ -167,10 +167,29 @@ Example output:
167
  }, [addMessage]);
168
 
169
  const sendMessage = useCallback(async (content: string, selectedTool?: string | null, stance?: 'positive' | 'negative') => {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  // Add user message
171
  const userMessage: Omit<ChatMessage, 'id' | 'timestamp'> = {
172
  role: 'user',
173
- content,
174
  tool: selectedTool ?? null,
175
  };
176
 
@@ -180,13 +199,184 @@ Example output:
180
  setState(prev => ({ ...prev, isLoading: true, error: null }));
181
 
182
  try {
 
 
 
 
 
 
 
 
 
 
 
 
183
  // Check if generate argument tool is selected (check for multiple possible names)
184
  const isGenerateArgumentTool = selectedTool && (
185
  selectedTool.toLowerCase().includes('generate') &&
186
  selectedTool.toLowerCase().includes('argument')
187
  );
188
 
189
- if (isGenerateArgumentTool) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  console.log('Generate argument tool detected:', selectedTool);
191
  // Extract topic and position from content
192
  let topic: string;
@@ -211,6 +401,7 @@ Example output:
211
  role: 'assistant',
212
  content: argumentResponse.enhanced_argument,
213
  tool: selectedTool ?? 'generate_argument',
 
214
  };
215
 
216
  addMessage(assistantMessage);
 
167
  }, [addMessage]);
168
 
169
  const sendMessage = useCallback(async (content: string, selectedTool?: string | null, stance?: 'positive' | 'negative') => {
170
+ // Check if detect stance tool is selected (to format user message differently)
171
+ const isDetectStanceTool = selectedTool && (
172
+ selectedTool.toLowerCase().includes('detect') &&
173
+ selectedTool.toLowerCase().includes('stance')
174
+ );
175
+
176
+ // Format user message content based on tool
177
+ let userMessageContent = content;
178
+ if (isDetectStanceTool) {
179
+ try {
180
+ const parsed = JSON.parse(content);
181
+ // Format as readable text instead of JSON
182
+ userMessageContent = `**Topic:** ${parsed.topic}\n**Argument:** ${parsed.argument}`;
183
+ } catch (error) {
184
+ // If parsing fails, use original content
185
+ userMessageContent = content;
186
+ }
187
+ }
188
+
189
  // Add user message
190
  const userMessage: Omit<ChatMessage, 'id' | 'timestamp'> = {
191
  role: 'user',
192
+ content: userMessageContent,
193
  tool: selectedTool ?? null,
194
  };
195
 
 
199
  setState(prev => ({ ...prev, isLoading: true, error: null }));
200
 
201
  try {
202
+ // Check if detect stance tool is selected
203
+ const isDetectStanceTool = selectedTool && (
204
+ selectedTool.toLowerCase().includes('detect') &&
205
+ selectedTool.toLowerCase().includes('stance')
206
+ );
207
+
208
+ // Check if extract topic tool is selected
209
+ const isExtractTopicTool = selectedTool && (
210
+ selectedTool.toLowerCase().includes('extract') &&
211
+ selectedTool.toLowerCase().includes('topic')
212
+ );
213
+
214
  // Check if generate argument tool is selected (check for multiple possible names)
215
  const isGenerateArgumentTool = selectedTool && (
216
  selectedTool.toLowerCase().includes('generate') &&
217
  selectedTool.toLowerCase().includes('argument')
218
  );
219
 
220
+ if (isDetectStanceTool) {
221
+ console.log('Detect stance tool detected:', selectedTool);
222
+
223
+ // Parse the JSON input containing topic and argument
224
+ let topic: string;
225
+ let argument: string;
226
+ try {
227
+ const parsed = JSON.parse(content);
228
+ topic = parsed.topic;
229
+ argument = parsed.argument;
230
+ } catch (error) {
231
+ throw new Error('Invalid input format. Expected JSON with "topic" and "argument" fields.');
232
+ }
233
+
234
+ // Get user ID
235
+ const userId = getUserId();
236
+ if (!userId) {
237
+ throw new Error('User ID not found. Please register or log in.');
238
+ }
239
+
240
+ // Get detect stance webhook URL
241
+ const detectStanceWebhookUrl = process.env.REACT_APP_DETECT_STANCE_N8N_WEBHOOK_URL;
242
+ const baseWebhookUrl = process.env.REACT_APP_N8N_WEBHOOK_URL;
243
+ const webhookUrl = detectStanceWebhookUrl || baseWebhookUrl;
244
+
245
+ if (!webhookUrl) {
246
+ throw new Error('REACT_APP_DETECT_STANCE_N8N_WEBHOOK_URL or REACT_APP_N8N_WEBHOOK_URL environment variable is not set');
247
+ }
248
+
249
+ // Determine the endpoint (use full URL if provided, otherwise append endpoint)
250
+ const endpoint = detectStanceWebhookUrl
251
+ ? '' // Full URL provided, no endpoint needed
252
+ : '/detect-stance'; // Append endpoint to base URL
253
+
254
+ // Call the detect stance endpoint
255
+ const response = await fetch(`${webhookUrl}${endpoint}`, {
256
+ method: 'POST',
257
+ headers: {
258
+ 'Content-Type': 'application/json',
259
+ },
260
+ body: JSON.stringify({
261
+ topic: topic,
262
+ argument: argument,
263
+ }),
264
+ });
265
+
266
+ if (!response.ok) {
267
+ const errorText = await response.text();
268
+ console.error('Detect stance API error:', response.status, errorText);
269
+ throw new Error(`HTTP error! status: ${response.status}: ${errorText}`);
270
+ }
271
+
272
+ const data = await response.json();
273
+ console.log('Detect stance API response:', data);
274
+
275
+ // Handle array response (n8n webhook format)
276
+ const result = Array.isArray(data) && data.length > 0 ? data[0] : data;
277
+
278
+ if (!result.success) {
279
+ throw new Error('Stance detection failed');
280
+ }
281
+
282
+ // Format the response for display
283
+ const stanceDisplay = result.stance === 'PRO' ? 'Positive (PRO)' : result.stance === 'CON' ? 'Negative (CON)' : result.stance;
284
+ const confidenceDisplay = result.confidence_percentage || `${(result.confidence * 100).toFixed(1)}%`;
285
+
286
+ // Create formatted content
287
+ const formattedContent = `**Stance:** ${stanceDisplay}\n**Confidence:** ${confidenceDisplay}\n\n**Explanation:**\n${result.explanation || 'No explanation provided'}`;
288
+
289
+ // Add assistant response with the stance detection results
290
+ const assistantMessage: Omit<ChatMessage, 'id' | 'timestamp'> = {
291
+ role: 'assistant',
292
+ content: formattedContent,
293
+ tool: selectedTool ?? 'detect_stance',
294
+ stance: result.stance === 'PRO' ? 'positive' : result.stance === 'CON' ? 'negative' : null,
295
+ };
296
+
297
+ addMessage(assistantMessage);
298
+ } else if (isExtractTopicTool) {
299
+ console.log('Extract topic tool detected:', selectedTool);
300
+
301
+ // Get user ID
302
+ const userId = getUserId();
303
+ if (!userId) {
304
+ throw new Error('User ID not found. Please register or log in.');
305
+ }
306
+
307
+ // Get extract topic webhook URL (specific or fallback to base URL)
308
+ const extractTopicWebhookUrl = process.env.REACT_APP_EXTRACT_TOPIC_N8N_WEBHOOK_URL;
309
+ const baseWebhookUrl = process.env.REACT_APP_N8N_WEBHOOK_URL;
310
+ const webhookUrl = extractTopicWebhookUrl || baseWebhookUrl;
311
+
312
+ if (!webhookUrl) {
313
+ throw new Error('REACT_APP_EXTRACT_TOPIC_N8N_WEBHOOK_URL or REACT_APP_N8N_WEBHOOK_URL environment variable is not set');
314
+ }
315
+
316
+ // Determine the endpoint (use full URL if provided, otherwise append endpoint)
317
+ const endpoint = extractTopicWebhookUrl
318
+ ? '' // Full URL provided, no endpoint needed
319
+ : '/extract-topic'; // Append endpoint to base URL
320
+
321
+ // Call the extract topic endpoint
322
+ const response = await fetch(`${webhookUrl}${endpoint}`, {
323
+ method: 'POST',
324
+ headers: {
325
+ 'Content-Type': 'application/json',
326
+ },
327
+ body: JSON.stringify({
328
+ text: content,
329
+ user_id: userId,
330
+ }),
331
+ });
332
+
333
+ if (!response.ok) {
334
+ const errorText = await response.text();
335
+ console.error('Extract topic API error:', response.status, errorText);
336
+ throw new Error(`HTTP error! status: ${response.status}: ${errorText}`);
337
+ }
338
+
339
+ const data = await response.json();
340
+ console.log('Extract topic API response:', data);
341
+
342
+ // Extract llm_improved_topic from response
343
+ let extractedTopic: string;
344
+
345
+ if (data?.llm_improved_topic) {
346
+ extractedTopic = String(data.llm_improved_topic);
347
+ // Clean up the topic: remove surrounding quotes and escape characters
348
+ extractedTopic = extractedTopic
349
+ .replace(/^["']|["']$/g, '') // Remove surrounding quotes
350
+ .replace(/\\"/g, '"') // Unescape quotes
351
+ .replace(/\\n/g, ' ') // Replace newlines with spaces
352
+ .trim();
353
+ } else if (data?.topic) {
354
+ extractedTopic = String(data.topic);
355
+ } else if (data?.extracted_topic) {
356
+ extractedTopic = String(data.extracted_topic);
357
+ } else {
358
+ console.warn('Could not find llm_improved_topic in response. Full response:', JSON.stringify(data, null, 2));
359
+ extractedTopic = 'Unable to extract topic. Please check the n8n webhook response format.';
360
+ }
361
+
362
+ // Ensure we have a valid topic string
363
+ if (!extractedTopic || extractedTopic.trim() === '') {
364
+ extractedTopic = 'Unable to extract topic. Please check the n8n webhook response format.';
365
+ }
366
+
367
+ // Extract process pipeline information
368
+ const processPipeline = data?.process ? String(data.process) : undefined;
369
+
370
+ // Add assistant response with the extracted topic and process
371
+ const assistantMessage: Omit<ChatMessage, 'id' | 'timestamp'> = {
372
+ role: 'assistant',
373
+ content: extractedTopic,
374
+ tool: selectedTool ?? 'extract_topic',
375
+ process: processPipeline,
376
+ };
377
+
378
+ addMessage(assistantMessage);
379
+ } else if (isGenerateArgumentTool) {
380
  console.log('Generate argument tool detected:', selectedTool);
381
  // Extract topic and position from content
382
  let topic: string;
 
401
  role: 'assistant',
402
  content: argumentResponse.enhanced_argument,
403
  tool: selectedTool ?? 'generate_argument',
404
+ stance: stance || null, // Store the selected stance
405
  };
406
 
407
  addMessage(assistantMessage);
src/app/layouts/MainLayout.tsx CHANGED
@@ -5,6 +5,7 @@ import { useAuth } from '../hooks/index.ts';
5
  import { logoutAndNotify } from '../utils/index.ts';
6
  import ThemeToggle from '../components/common/ThemeToggle.tsx';
7
  import Navigation from '../components/navigation/Navigation.tsx';
 
8
 
9
  type MainLayoutProps = {
10
  children?: any;
@@ -32,19 +33,42 @@ const MainLayout = ({ children }: MainLayoutProps) => {
32
 
33
  return (
34
  <div className="min-h-screen bg-white dark:bg-black transition-colors duration-200 relative">
35
- <Navigation />
36
- <div className="fixed top-4 right-4 z-50 flex items-center gap-2">
37
- {isAuthenticated && (
38
- <button
39
- onClick={handleLogout}
40
- className="px-3 py-2 text-sm font-medium rounded-lg bg-red-500 hover:bg-red-600 text-white transition-all duration-200 hover:scale-105"
41
- >
42
- Logout
43
- </button>
44
- )}
45
- <ThemeToggle />
46
- </div>
47
- {children}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  </div>
49
  );
50
  };
 
5
  import { logoutAndNotify } from '../utils/index.ts';
6
  import ThemeToggle from '../components/common/ThemeToggle.tsx';
7
  import Navigation from '../components/navigation/Navigation.tsx';
8
+ import logo from '../../logo.png';
9
 
10
  type MainLayoutProps = {
11
  children?: any;
 
33
 
34
  return (
35
  <div className="min-h-screen bg-white dark:bg-black transition-colors duration-200 relative">
36
+ {/* Top bar */}
37
+ <header className="fixed top-0 left-0 right-0 z-50">
38
+ <div className="max-w-6xl mx-auto px-4 py-3 flex items-center justify-between gap-4">
39
+ {/* Logo + title */}
40
+ <div className="flex items-left gap-3">
41
+ <img
42
+ src={logo}
43
+ alt="NLP Project Debater"
44
+ className="h-9 w-auto rounded-md shadow-lg"
45
+ />
46
+ </div>
47
+
48
+ {/* Center navigation */}
49
+ <div className="flex-1 flex justify-center">
50
+ <Navigation />
51
+ </div>
52
+
53
+ {/* Right controls */}
54
+ <div className="flex items-center gap-2">
55
+ {isAuthenticated && (
56
+ <button
57
+ onClick={handleLogout}
58
+ className="px-3 py-2 text-sm font-medium rounded-lg bg-red-500 hover:bg-red-600 text-white transition-all duration-200 hover:scale-105"
59
+ >
60
+ Logout
61
+ </button>
62
+ )}
63
+ <ThemeToggle />
64
+ </div>
65
+ </div>
66
+ </header>
67
+
68
+ {/* Push content below fixed header */}
69
+ <main className="pt-20">
70
+ {children}
71
+ </main>
72
  </div>
73
  );
74
  };
src/app/pages/ChatPage.tsx CHANGED
@@ -2,6 +2,7 @@ import React from 'react';
2
  import ChatInput from '../components/chat/ChatInput.tsx';
3
  import MessageList from '../components/chat/MessageList.tsx';
4
  import { useChat } from '../hooks/useChat.ts';
 
5
 
6
  const ChatPage = () => {
7
  const { messages, isLoading, error, sendMessage, sendAudioMessage, retryLastMessage } = useChat();
@@ -17,7 +18,7 @@ const ChatPage = () => {
17
  const hasConversation = messages.length > 0;
18
 
19
  return (
20
- <div className={`flex min-h-screen bg-white dark:bg-black transition-colors duration-200 ${hasConversation ? 'flex-col' : ''}`}>
21
  {hasConversation ? (
22
  <>
23
  {/* Messages */}
@@ -38,10 +39,24 @@ const ChatPage = () => {
38
  </div>
39
  </>
40
  ) : (
41
- /* Centered input when no conversation */
42
- <div className="flex items-center justify-center px-4 pt-20 pb-10 w-full">
43
- <div className="w-full max-w-4xl">
44
- <ChatInput onSubmit={handleMessageSubmit} onAudioSubmit={handleAudioSubmit} placeholder="Ask me anything..." />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  </div>
46
  </div>
47
  )}
 
2
  import ChatInput from '../components/chat/ChatInput.tsx';
3
  import MessageList from '../components/chat/MessageList.tsx';
4
  import { useChat } from '../hooks/useChat.ts';
5
+ import logo from '../../logo.png';
6
 
7
  const ChatPage = () => {
8
  const { messages, isLoading, error, sendMessage, sendAudioMessage, retryLastMessage } = useChat();
 
18
  const hasConversation = messages.length > 0;
19
 
20
  return (
21
+ <div className={`flex min-h-[calc(100vh-5rem)] bg-white dark:bg-black transition-colors duration-200 ${hasConversation ? 'flex-col' : ''}`}>
22
  {hasConversation ? (
23
  <>
24
  {/* Messages */}
 
39
  </div>
40
  </>
41
  ) : (
42
+ /* Centered logo and input when no conversation */
43
+ <div className="flex items-center justify-center px-4 pt-10 pb-10 w-full">
44
+ <div className="w-full max-w-4xl flex flex-col">
45
+ <div className="flex flex-col items-center mb-8">
46
+ <img
47
+ src={logo}
48
+ alt="NLP Project Debater"
49
+ className="h-40 w-auto mb-3 rounded-xl"
50
+ />
51
+ <p className="text-sm text-zinc-500 dark:text-zinc-400 text-center max-w-md">
52
+ Start a new debate by asking a question or proposing a motion. The assistant will help you explore arguments and stances.
53
+ </p>
54
+ </div>
55
+ <ChatInput
56
+ onSubmit={handleMessageSubmit}
57
+ onAudioSubmit={handleAudioSubmit}
58
+ placeholder="Ask me anything..."
59
+ />
60
  </div>
61
  </div>
62
  )}
src/app/types/chat.types.ts CHANGED
@@ -8,6 +8,8 @@ export type ChatMessage = {
8
  extractedArgument?: string; // Extracted transcription for user audio messages
9
  timestamp: Date;
10
  tool?: string | null;
 
 
11
  };
12
 
13
  export type ChatState = {
 
8
  extractedArgument?: string; // Extracted transcription for user audio messages
9
  timestamp: Date;
10
  tool?: string | null;
11
+ stance?: 'positive' | 'negative' | null; // Selected stance for generate argument tool
12
+ process?: string; // Process pipeline for extract topic tool
13
  };
14
 
15
  export type ChatState = {
src/custom.d.ts ADDED
@@ -0,0 +1 @@
 
 
1
+
src/logo.png ADDED

Git LFS Details

  • SHA256: b999bedf7e5ed7ca65ebbc496615a5df6066f00366092dc468c47d5dc852f2be
  • Pointer size: 132 Bytes
  • Size of remote file: 2.17 MB
src/logo.svg DELETED