Pulastya B commited on
Commit
212d2d5
·
1 Parent(s): 9865103

Fix markdown rendering: add remark-gfm for tables, improve code blocks, headings, and overall styling

Browse files
FRRONTEEEND/components/ChatInterface.tsx CHANGED
@@ -5,6 +5,7 @@ import { Send, Plus, Search, Settings, MoreHorizontal, User, Bot, ArrowLeft, Pap
5
  import { cn } from '../lib/utils';
6
  import { Logo } from './Logo';
7
  import ReactMarkdown from 'react-markdown';
 
8
  import { useAuth } from '../lib/AuthContext';
9
  import { trackQuery, incrementSessionQueries } from '../lib/supabase';
10
 
@@ -896,17 +897,60 @@ export const ChatInterface: React.FC<{ onBack: () => void }> = ({ onBack }) => {
896
  )}
897
  {msg.role === 'assistant' ? (
898
  <ReactMarkdown
 
899
  className="prose prose-invert prose-sm max-w-none prose-p:leading-relaxed prose-pre:bg-black/40 prose-pre:border prose-pre:border-white/10 prose-headings:text-white prose-strong:text-white prose-li:text-white/80"
900
  components={{
901
- p: ({node, ...props}) => <p className="mb-3 last:mb-0" {...props} />,
902
- ul: ({node, ...props}) => <ul className="mb-3 space-y-1" {...props} />,
903
- ol: ({node, ...props}) => <ol className="mb-3 space-y-1" {...props} />,
904
- li: ({node, ...props}) => <li className="ml-4" {...props} />,
 
 
 
 
905
  strong: ({node, ...props}) => <strong className="font-semibold text-white" {...props} />,
906
- code: ({node, inline, ...props}: any) =>
907
- inline ?
908
- <code className="px-1.5 py-0.5 rounded bg-white/10 text-indigo-300 text-xs font-mono" {...props} /> :
909
- <code className="block p-3 rounded-lg bg-black/40 border border-white/10 text-xs font-mono overflow-x-auto" {...props} />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
910
  }}
911
  >
912
  {msg.content || ''}
 
5
  import { cn } from '../lib/utils';
6
  import { Logo } from './Logo';
7
  import ReactMarkdown from 'react-markdown';
8
+ import remarkGfm from 'remark-gfm';
9
  import { useAuth } from '../lib/AuthContext';
10
  import { trackQuery, incrementSessionQueries } from '../lib/supabase';
11
 
 
897
  )}
898
  {msg.role === 'assistant' ? (
899
  <ReactMarkdown
900
+ remarkPlugins={[remarkGfm]}
901
  className="prose prose-invert prose-sm max-w-none prose-p:leading-relaxed prose-pre:bg-black/40 prose-pre:border prose-pre:border-white/10 prose-headings:text-white prose-strong:text-white prose-li:text-white/80"
902
  components={{
903
+ // Headings
904
+ h1: ({node, ...props}) => <h1 className="text-xl font-bold text-white mb-4 mt-6 first:mt-0 border-b border-white/10 pb-2" {...props} />,
905
+ h2: ({node, ...props}) => <h2 className="text-lg font-semibold text-white mb-3 mt-5 first:mt-0" {...props} />,
906
+ h3: ({node, ...props}) => <h3 className="text-base font-semibold text-indigo-300 mb-2 mt-4 first:mt-0" {...props} />,
907
+ h4: ({node, ...props}) => <h4 className="text-sm font-semibold text-indigo-200 mb-2 mt-3 first:mt-0" {...props} />,
908
+
909
+ // Paragraphs and text
910
+ p: ({node, ...props}) => <p className="mb-3 last:mb-0 text-white/80 leading-relaxed" {...props} />,
911
  strong: ({node, ...props}) => <strong className="font-semibold text-white" {...props} />,
912
+ em: ({node, ...props}) => <em className="text-indigo-200 italic" {...props} />,
913
+
914
+ // Lists
915
+ ul: ({node, ...props}) => <ul className="mb-3 space-y-1.5 list-disc list-outside ml-4" {...props} />,
916
+ ol: ({node, ...props}) => <ol className="mb-3 space-y-1.5 list-decimal list-outside ml-4" {...props} />,
917
+ li: ({node, ...props}) => <li className="text-white/80 pl-1" {...props} />,
918
+
919
+ // Code - inline and block
920
+ code: ({node, inline, className, children, ...props}: any) => {
921
+ if (inline) {
922
+ return <code className="px-1.5 py-0.5 rounded bg-indigo-500/20 text-indigo-300 text-xs font-mono border border-indigo-500/20" {...props}>{children}</code>;
923
+ }
924
+ return (
925
+ <code className="block p-4 rounded-lg bg-black/60 border border-white/10 text-xs font-mono overflow-x-auto text-emerald-300 my-3" {...props}>
926
+ {children}
927
+ </code>
928
+ );
929
+ },
930
+ pre: ({node, ...props}) => <pre className="bg-transparent p-0 m-0 overflow-visible" {...props} />,
931
+
932
+ // Tables - CRITICAL for proper table rendering
933
+ table: ({node, ...props}) => (
934
+ <div className="my-4 overflow-x-auto rounded-lg border border-white/10">
935
+ <table className="w-full text-sm" {...props} />
936
+ </div>
937
+ ),
938
+ thead: ({node, ...props}) => <thead className="bg-white/5 border-b border-white/10" {...props} />,
939
+ tbody: ({node, ...props}) => <tbody className="divide-y divide-white/5" {...props} />,
940
+ tr: ({node, ...props}) => <tr className="hover:bg-white/[0.02] transition-colors" {...props} />,
941
+ th: ({node, ...props}) => <th className="px-4 py-3 text-left text-xs font-semibold text-indigo-300 uppercase tracking-wider" {...props} />,
942
+ td: ({node, ...props}) => <td className="px-4 py-3 text-white/70 text-xs" {...props} />,
943
+
944
+ // Blockquotes
945
+ blockquote: ({node, ...props}) => (
946
+ <blockquote className="border-l-4 border-indigo-500/50 pl-4 py-2 my-3 bg-indigo-500/5 rounded-r-lg text-white/70 italic" {...props} />
947
+ ),
948
+
949
+ // Horizontal rule
950
+ hr: ({node, ...props}) => <hr className="my-6 border-white/10" {...props} />,
951
+
952
+ // Links
953
+ a: ({node, ...props}) => <a className="text-indigo-400 hover:text-indigo-300 underline underline-offset-2" {...props} />,
954
  }}
955
  >
956
  {msg.content || ''}
FRRONTEEEND/package-lock.json CHANGED
@@ -21,6 +21,8 @@
21
  "react": "^19.2.3",
22
  "react-dom": "^19.2.3",
23
  "react-markdown": "^9.0.1",
 
 
24
  "sonner": "^2.0.7",
25
  "tailwind-merge": "^3.4.0"
26
  },
@@ -2359,6 +2361,18 @@
2359
  "dev": true,
2360
  "license": "ISC"
2361
  },
 
 
 
 
 
 
 
 
 
 
 
 
2362
  "node_modules/esbuild": {
2363
  "version": "0.25.12",
2364
  "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
@@ -2411,6 +2425,18 @@
2411
  "node": ">=6"
2412
  }
2413
  },
 
 
 
 
 
 
 
 
 
 
 
 
2414
  "node_modules/estree-util-is-identifier-name": {
2415
  "version": "3.0.0",
2416
  "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
@@ -2506,6 +2532,64 @@
2506
  "node": ">=6"
2507
  }
2508
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2509
  "node_modules/hast-util-to-jsx-runtime": {
2510
  "version": "2.3.6",
2511
  "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
@@ -2533,6 +2617,25 @@
2533
  "url": "https://opencollective.com/unified"
2534
  }
2535
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2536
  "node_modules/hast-util-whitespace": {
2537
  "version": "3.0.0",
2538
  "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
@@ -2546,6 +2649,23 @@
2546
  "url": "https://opencollective.com/unified"
2547
  }
2548
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2549
  "node_modules/html-url-attributes": {
2550
  "version": "3.0.1",
2551
  "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
@@ -2556,6 +2676,16 @@
2556
  "url": "https://opencollective.com/unified"
2557
  }
2558
  },
 
 
 
 
 
 
 
 
 
 
2559
  "node_modules/iceberg-js": {
2560
  "version": "0.8.1",
2561
  "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz",
@@ -2689,6 +2819,32 @@
2689
  "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
2690
  }
2691
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2692
  "node_modules/mdast-util-from-markdown": {
2693
  "version": "2.0.2",
2694
  "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
@@ -2713,6 +2869,107 @@
2713
  "url": "https://opencollective.com/unified"
2714
  }
2715
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2716
  "node_modules/mdast-util-mdx-expression": {
2717
  "version": "2.0.1",
2718
  "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
@@ -2911,6 +3168,127 @@
2911
  "micromark-util-types": "^2.0.0"
2912
  }
2913
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2914
  "node_modules/micromark-factory-destination": {
2915
  "version": "2.0.1",
2916
  "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
@@ -3356,6 +3734,18 @@
3356
  "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
3357
  "license": "MIT"
3358
  },
 
 
 
 
 
 
 
 
 
 
 
 
3359
  "node_modules/picocolors": {
3360
  "version": "1.1.1",
3361
  "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -3545,6 +3935,39 @@
3545
  }
3546
  }
3547
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3548
  "node_modules/remark-parse": {
3549
  "version": "11.0.0",
3550
  "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
@@ -3578,6 +4001,21 @@
3578
  "url": "https://opencollective.com/unified"
3579
  }
3580
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3581
  "node_modules/rollup": {
3582
  "version": "4.54.0",
3583
  "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz",
@@ -3946,6 +4384,20 @@
3946
  "url": "https://opencollective.com/unified"
3947
  }
3948
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3949
  "node_modules/vfile-message": {
3950
  "version": "4.0.3",
3951
  "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
@@ -4036,6 +4488,16 @@
4036
  }
4037
  }
4038
  },
 
 
 
 
 
 
 
 
 
 
4039
  "node_modules/ws": {
4040
  "version": "8.19.0",
4041
  "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
 
21
  "react": "^19.2.3",
22
  "react-dom": "^19.2.3",
23
  "react-markdown": "^9.0.1",
24
+ "rehype-raw": "^7.0.0",
25
+ "remark-gfm": "^4.0.1",
26
  "sonner": "^2.0.7",
27
  "tailwind-merge": "^3.4.0"
28
  },
 
2361
  "dev": true,
2362
  "license": "ISC"
2363
  },
2364
+ "node_modules/entities": {
2365
+ "version": "6.0.1",
2366
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
2367
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
2368
+ "license": "BSD-2-Clause",
2369
+ "engines": {
2370
+ "node": ">=0.12"
2371
+ },
2372
+ "funding": {
2373
+ "url": "https://github.com/fb55/entities?sponsor=1"
2374
+ }
2375
+ },
2376
  "node_modules/esbuild": {
2377
  "version": "0.25.12",
2378
  "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
 
2425
  "node": ">=6"
2426
  }
2427
  },
2428
+ "node_modules/escape-string-regexp": {
2429
+ "version": "5.0.0",
2430
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
2431
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
2432
+ "license": "MIT",
2433
+ "engines": {
2434
+ "node": ">=12"
2435
+ },
2436
+ "funding": {
2437
+ "url": "https://github.com/sponsors/sindresorhus"
2438
+ }
2439
+ },
2440
  "node_modules/estree-util-is-identifier-name": {
2441
  "version": "3.0.0",
2442
  "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
 
2532
  "node": ">=6"
2533
  }
2534
  },
2535
+ "node_modules/hast-util-from-parse5": {
2536
+ "version": "8.0.3",
2537
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
2538
+ "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
2539
+ "license": "MIT",
2540
+ "dependencies": {
2541
+ "@types/hast": "^3.0.0",
2542
+ "@types/unist": "^3.0.0",
2543
+ "devlop": "^1.0.0",
2544
+ "hastscript": "^9.0.0",
2545
+ "property-information": "^7.0.0",
2546
+ "vfile": "^6.0.0",
2547
+ "vfile-location": "^5.0.0",
2548
+ "web-namespaces": "^2.0.0"
2549
+ },
2550
+ "funding": {
2551
+ "type": "opencollective",
2552
+ "url": "https://opencollective.com/unified"
2553
+ }
2554
+ },
2555
+ "node_modules/hast-util-parse-selector": {
2556
+ "version": "4.0.0",
2557
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
2558
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
2559
+ "license": "MIT",
2560
+ "dependencies": {
2561
+ "@types/hast": "^3.0.0"
2562
+ },
2563
+ "funding": {
2564
+ "type": "opencollective",
2565
+ "url": "https://opencollective.com/unified"
2566
+ }
2567
+ },
2568
+ "node_modules/hast-util-raw": {
2569
+ "version": "9.1.0",
2570
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
2571
+ "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
2572
+ "license": "MIT",
2573
+ "dependencies": {
2574
+ "@types/hast": "^3.0.0",
2575
+ "@types/unist": "^3.0.0",
2576
+ "@ungap/structured-clone": "^1.0.0",
2577
+ "hast-util-from-parse5": "^8.0.0",
2578
+ "hast-util-to-parse5": "^8.0.0",
2579
+ "html-void-elements": "^3.0.0",
2580
+ "mdast-util-to-hast": "^13.0.0",
2581
+ "parse5": "^7.0.0",
2582
+ "unist-util-position": "^5.0.0",
2583
+ "unist-util-visit": "^5.0.0",
2584
+ "vfile": "^6.0.0",
2585
+ "web-namespaces": "^2.0.0",
2586
+ "zwitch": "^2.0.0"
2587
+ },
2588
+ "funding": {
2589
+ "type": "opencollective",
2590
+ "url": "https://opencollective.com/unified"
2591
+ }
2592
+ },
2593
  "node_modules/hast-util-to-jsx-runtime": {
2594
  "version": "2.3.6",
2595
  "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
 
2617
  "url": "https://opencollective.com/unified"
2618
  }
2619
  },
2620
+ "node_modules/hast-util-to-parse5": {
2621
+ "version": "8.0.1",
2622
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
2623
+ "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
2624
+ "license": "MIT",
2625
+ "dependencies": {
2626
+ "@types/hast": "^3.0.0",
2627
+ "comma-separated-tokens": "^2.0.0",
2628
+ "devlop": "^1.0.0",
2629
+ "property-information": "^7.0.0",
2630
+ "space-separated-tokens": "^2.0.0",
2631
+ "web-namespaces": "^2.0.0",
2632
+ "zwitch": "^2.0.0"
2633
+ },
2634
+ "funding": {
2635
+ "type": "opencollective",
2636
+ "url": "https://opencollective.com/unified"
2637
+ }
2638
+ },
2639
  "node_modules/hast-util-whitespace": {
2640
  "version": "3.0.0",
2641
  "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
 
2649
  "url": "https://opencollective.com/unified"
2650
  }
2651
  },
2652
+ "node_modules/hastscript": {
2653
+ "version": "9.0.1",
2654
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
2655
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
2656
+ "license": "MIT",
2657
+ "dependencies": {
2658
+ "@types/hast": "^3.0.0",
2659
+ "comma-separated-tokens": "^2.0.0",
2660
+ "hast-util-parse-selector": "^4.0.0",
2661
+ "property-information": "^7.0.0",
2662
+ "space-separated-tokens": "^2.0.0"
2663
+ },
2664
+ "funding": {
2665
+ "type": "opencollective",
2666
+ "url": "https://opencollective.com/unified"
2667
+ }
2668
+ },
2669
  "node_modules/html-url-attributes": {
2670
  "version": "3.0.1",
2671
  "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
 
2676
  "url": "https://opencollective.com/unified"
2677
  }
2678
  },
2679
+ "node_modules/html-void-elements": {
2680
+ "version": "3.0.0",
2681
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
2682
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
2683
+ "license": "MIT",
2684
+ "funding": {
2685
+ "type": "github",
2686
+ "url": "https://github.com/sponsors/wooorm"
2687
+ }
2688
+ },
2689
  "node_modules/iceberg-js": {
2690
  "version": "0.8.1",
2691
  "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz",
 
2819
  "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
2820
  }
2821
  },
2822
+ "node_modules/markdown-table": {
2823
+ "version": "3.0.4",
2824
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
2825
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
2826
+ "license": "MIT",
2827
+ "funding": {
2828
+ "type": "github",
2829
+ "url": "https://github.com/sponsors/wooorm"
2830
+ }
2831
+ },
2832
+ "node_modules/mdast-util-find-and-replace": {
2833
+ "version": "3.0.2",
2834
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
2835
+ "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
2836
+ "license": "MIT",
2837
+ "dependencies": {
2838
+ "@types/mdast": "^4.0.0",
2839
+ "escape-string-regexp": "^5.0.0",
2840
+ "unist-util-is": "^6.0.0",
2841
+ "unist-util-visit-parents": "^6.0.0"
2842
+ },
2843
+ "funding": {
2844
+ "type": "opencollective",
2845
+ "url": "https://opencollective.com/unified"
2846
+ }
2847
+ },
2848
  "node_modules/mdast-util-from-markdown": {
2849
  "version": "2.0.2",
2850
  "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
 
2869
  "url": "https://opencollective.com/unified"
2870
  }
2871
  },
2872
+ "node_modules/mdast-util-gfm": {
2873
+ "version": "3.1.0",
2874
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
2875
+ "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
2876
+ "license": "MIT",
2877
+ "dependencies": {
2878
+ "mdast-util-from-markdown": "^2.0.0",
2879
+ "mdast-util-gfm-autolink-literal": "^2.0.0",
2880
+ "mdast-util-gfm-footnote": "^2.0.0",
2881
+ "mdast-util-gfm-strikethrough": "^2.0.0",
2882
+ "mdast-util-gfm-table": "^2.0.0",
2883
+ "mdast-util-gfm-task-list-item": "^2.0.0",
2884
+ "mdast-util-to-markdown": "^2.0.0"
2885
+ },
2886
+ "funding": {
2887
+ "type": "opencollective",
2888
+ "url": "https://opencollective.com/unified"
2889
+ }
2890
+ },
2891
+ "node_modules/mdast-util-gfm-autolink-literal": {
2892
+ "version": "2.0.1",
2893
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
2894
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
2895
+ "license": "MIT",
2896
+ "dependencies": {
2897
+ "@types/mdast": "^4.0.0",
2898
+ "ccount": "^2.0.0",
2899
+ "devlop": "^1.0.0",
2900
+ "mdast-util-find-and-replace": "^3.0.0",
2901
+ "micromark-util-character": "^2.0.0"
2902
+ },
2903
+ "funding": {
2904
+ "type": "opencollective",
2905
+ "url": "https://opencollective.com/unified"
2906
+ }
2907
+ },
2908
+ "node_modules/mdast-util-gfm-footnote": {
2909
+ "version": "2.1.0",
2910
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
2911
+ "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
2912
+ "license": "MIT",
2913
+ "dependencies": {
2914
+ "@types/mdast": "^4.0.0",
2915
+ "devlop": "^1.1.0",
2916
+ "mdast-util-from-markdown": "^2.0.0",
2917
+ "mdast-util-to-markdown": "^2.0.0",
2918
+ "micromark-util-normalize-identifier": "^2.0.0"
2919
+ },
2920
+ "funding": {
2921
+ "type": "opencollective",
2922
+ "url": "https://opencollective.com/unified"
2923
+ }
2924
+ },
2925
+ "node_modules/mdast-util-gfm-strikethrough": {
2926
+ "version": "2.0.0",
2927
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
2928
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
2929
+ "license": "MIT",
2930
+ "dependencies": {
2931
+ "@types/mdast": "^4.0.0",
2932
+ "mdast-util-from-markdown": "^2.0.0",
2933
+ "mdast-util-to-markdown": "^2.0.0"
2934
+ },
2935
+ "funding": {
2936
+ "type": "opencollective",
2937
+ "url": "https://opencollective.com/unified"
2938
+ }
2939
+ },
2940
+ "node_modules/mdast-util-gfm-table": {
2941
+ "version": "2.0.0",
2942
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
2943
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
2944
+ "license": "MIT",
2945
+ "dependencies": {
2946
+ "@types/mdast": "^4.0.0",
2947
+ "devlop": "^1.0.0",
2948
+ "markdown-table": "^3.0.0",
2949
+ "mdast-util-from-markdown": "^2.0.0",
2950
+ "mdast-util-to-markdown": "^2.0.0"
2951
+ },
2952
+ "funding": {
2953
+ "type": "opencollective",
2954
+ "url": "https://opencollective.com/unified"
2955
+ }
2956
+ },
2957
+ "node_modules/mdast-util-gfm-task-list-item": {
2958
+ "version": "2.0.0",
2959
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
2960
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
2961
+ "license": "MIT",
2962
+ "dependencies": {
2963
+ "@types/mdast": "^4.0.0",
2964
+ "devlop": "^1.0.0",
2965
+ "mdast-util-from-markdown": "^2.0.0",
2966
+ "mdast-util-to-markdown": "^2.0.0"
2967
+ },
2968
+ "funding": {
2969
+ "type": "opencollective",
2970
+ "url": "https://opencollective.com/unified"
2971
+ }
2972
+ },
2973
  "node_modules/mdast-util-mdx-expression": {
2974
  "version": "2.0.1",
2975
  "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
 
3168
  "micromark-util-types": "^2.0.0"
3169
  }
3170
  },
3171
+ "node_modules/micromark-extension-gfm": {
3172
+ "version": "3.0.0",
3173
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
3174
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
3175
+ "license": "MIT",
3176
+ "dependencies": {
3177
+ "micromark-extension-gfm-autolink-literal": "^2.0.0",
3178
+ "micromark-extension-gfm-footnote": "^2.0.0",
3179
+ "micromark-extension-gfm-strikethrough": "^2.0.0",
3180
+ "micromark-extension-gfm-table": "^2.0.0",
3181
+ "micromark-extension-gfm-tagfilter": "^2.0.0",
3182
+ "micromark-extension-gfm-task-list-item": "^2.0.0",
3183
+ "micromark-util-combine-extensions": "^2.0.0",
3184
+ "micromark-util-types": "^2.0.0"
3185
+ },
3186
+ "funding": {
3187
+ "type": "opencollective",
3188
+ "url": "https://opencollective.com/unified"
3189
+ }
3190
+ },
3191
+ "node_modules/micromark-extension-gfm-autolink-literal": {
3192
+ "version": "2.1.0",
3193
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
3194
+ "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
3195
+ "license": "MIT",
3196
+ "dependencies": {
3197
+ "micromark-util-character": "^2.0.0",
3198
+ "micromark-util-sanitize-uri": "^2.0.0",
3199
+ "micromark-util-symbol": "^2.0.0",
3200
+ "micromark-util-types": "^2.0.0"
3201
+ },
3202
+ "funding": {
3203
+ "type": "opencollective",
3204
+ "url": "https://opencollective.com/unified"
3205
+ }
3206
+ },
3207
+ "node_modules/micromark-extension-gfm-footnote": {
3208
+ "version": "2.1.0",
3209
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
3210
+ "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
3211
+ "license": "MIT",
3212
+ "dependencies": {
3213
+ "devlop": "^1.0.0",
3214
+ "micromark-core-commonmark": "^2.0.0",
3215
+ "micromark-factory-space": "^2.0.0",
3216
+ "micromark-util-character": "^2.0.0",
3217
+ "micromark-util-normalize-identifier": "^2.0.0",
3218
+ "micromark-util-sanitize-uri": "^2.0.0",
3219
+ "micromark-util-symbol": "^2.0.0",
3220
+ "micromark-util-types": "^2.0.0"
3221
+ },
3222
+ "funding": {
3223
+ "type": "opencollective",
3224
+ "url": "https://opencollective.com/unified"
3225
+ }
3226
+ },
3227
+ "node_modules/micromark-extension-gfm-strikethrough": {
3228
+ "version": "2.1.0",
3229
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
3230
+ "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
3231
+ "license": "MIT",
3232
+ "dependencies": {
3233
+ "devlop": "^1.0.0",
3234
+ "micromark-util-chunked": "^2.0.0",
3235
+ "micromark-util-classify-character": "^2.0.0",
3236
+ "micromark-util-resolve-all": "^2.0.0",
3237
+ "micromark-util-symbol": "^2.0.0",
3238
+ "micromark-util-types": "^2.0.0"
3239
+ },
3240
+ "funding": {
3241
+ "type": "opencollective",
3242
+ "url": "https://opencollective.com/unified"
3243
+ }
3244
+ },
3245
+ "node_modules/micromark-extension-gfm-table": {
3246
+ "version": "2.1.1",
3247
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
3248
+ "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
3249
+ "license": "MIT",
3250
+ "dependencies": {
3251
+ "devlop": "^1.0.0",
3252
+ "micromark-factory-space": "^2.0.0",
3253
+ "micromark-util-character": "^2.0.0",
3254
+ "micromark-util-symbol": "^2.0.0",
3255
+ "micromark-util-types": "^2.0.0"
3256
+ },
3257
+ "funding": {
3258
+ "type": "opencollective",
3259
+ "url": "https://opencollective.com/unified"
3260
+ }
3261
+ },
3262
+ "node_modules/micromark-extension-gfm-tagfilter": {
3263
+ "version": "2.0.0",
3264
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
3265
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
3266
+ "license": "MIT",
3267
+ "dependencies": {
3268
+ "micromark-util-types": "^2.0.0"
3269
+ },
3270
+ "funding": {
3271
+ "type": "opencollective",
3272
+ "url": "https://opencollective.com/unified"
3273
+ }
3274
+ },
3275
+ "node_modules/micromark-extension-gfm-task-list-item": {
3276
+ "version": "2.1.0",
3277
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
3278
+ "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
3279
+ "license": "MIT",
3280
+ "dependencies": {
3281
+ "devlop": "^1.0.0",
3282
+ "micromark-factory-space": "^2.0.0",
3283
+ "micromark-util-character": "^2.0.0",
3284
+ "micromark-util-symbol": "^2.0.0",
3285
+ "micromark-util-types": "^2.0.0"
3286
+ },
3287
+ "funding": {
3288
+ "type": "opencollective",
3289
+ "url": "https://opencollective.com/unified"
3290
+ }
3291
+ },
3292
  "node_modules/micromark-factory-destination": {
3293
  "version": "2.0.1",
3294
  "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
 
3734
  "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
3735
  "license": "MIT"
3736
  },
3737
+ "node_modules/parse5": {
3738
+ "version": "7.3.0",
3739
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
3740
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
3741
+ "license": "MIT",
3742
+ "dependencies": {
3743
+ "entities": "^6.0.0"
3744
+ },
3745
+ "funding": {
3746
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
3747
+ }
3748
+ },
3749
  "node_modules/picocolors": {
3750
  "version": "1.1.1",
3751
  "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
 
3935
  }
3936
  }
3937
  },
3938
+ "node_modules/rehype-raw": {
3939
+ "version": "7.0.0",
3940
+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
3941
+ "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
3942
+ "license": "MIT",
3943
+ "dependencies": {
3944
+ "@types/hast": "^3.0.0",
3945
+ "hast-util-raw": "^9.0.0",
3946
+ "vfile": "^6.0.0"
3947
+ },
3948
+ "funding": {
3949
+ "type": "opencollective",
3950
+ "url": "https://opencollective.com/unified"
3951
+ }
3952
+ },
3953
+ "node_modules/remark-gfm": {
3954
+ "version": "4.0.1",
3955
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
3956
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
3957
+ "license": "MIT",
3958
+ "dependencies": {
3959
+ "@types/mdast": "^4.0.0",
3960
+ "mdast-util-gfm": "^3.0.0",
3961
+ "micromark-extension-gfm": "^3.0.0",
3962
+ "remark-parse": "^11.0.0",
3963
+ "remark-stringify": "^11.0.0",
3964
+ "unified": "^11.0.0"
3965
+ },
3966
+ "funding": {
3967
+ "type": "opencollective",
3968
+ "url": "https://opencollective.com/unified"
3969
+ }
3970
+ },
3971
  "node_modules/remark-parse": {
3972
  "version": "11.0.0",
3973
  "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
 
4001
  "url": "https://opencollective.com/unified"
4002
  }
4003
  },
4004
+ "node_modules/remark-stringify": {
4005
+ "version": "11.0.0",
4006
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
4007
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
4008
+ "license": "MIT",
4009
+ "dependencies": {
4010
+ "@types/mdast": "^4.0.0",
4011
+ "mdast-util-to-markdown": "^2.0.0",
4012
+ "unified": "^11.0.0"
4013
+ },
4014
+ "funding": {
4015
+ "type": "opencollective",
4016
+ "url": "https://opencollective.com/unified"
4017
+ }
4018
+ },
4019
  "node_modules/rollup": {
4020
  "version": "4.54.0",
4021
  "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz",
 
4384
  "url": "https://opencollective.com/unified"
4385
  }
4386
  },
4387
+ "node_modules/vfile-location": {
4388
+ "version": "5.0.3",
4389
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
4390
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
4391
+ "license": "MIT",
4392
+ "dependencies": {
4393
+ "@types/unist": "^3.0.0",
4394
+ "vfile": "^6.0.0"
4395
+ },
4396
+ "funding": {
4397
+ "type": "opencollective",
4398
+ "url": "https://opencollective.com/unified"
4399
+ }
4400
+ },
4401
  "node_modules/vfile-message": {
4402
  "version": "4.0.3",
4403
  "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
 
4488
  }
4489
  }
4490
  },
4491
+ "node_modules/web-namespaces": {
4492
+ "version": "2.0.1",
4493
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
4494
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
4495
+ "license": "MIT",
4496
+ "funding": {
4497
+ "type": "github",
4498
+ "url": "https://github.com/sponsors/wooorm"
4499
+ }
4500
+ },
4501
  "node_modules/ws": {
4502
  "version": "8.19.0",
4503
  "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
FRRONTEEEND/package.json CHANGED
@@ -22,6 +22,8 @@
22
  "react": "^19.2.3",
23
  "react-dom": "^19.2.3",
24
  "react-markdown": "^9.0.1",
 
 
25
  "sonner": "^2.0.7",
26
  "tailwind-merge": "^3.4.0"
27
  },
 
22
  "react": "^19.2.3",
23
  "react-dom": "^19.2.3",
24
  "react-markdown": "^9.0.1",
25
+ "rehype-raw": "^7.0.0",
26
+ "remark-gfm": "^4.0.1",
27
  "sonner": "^2.0.7",
28
  "tailwind-merge": "^3.4.0"
29
  },