code syntax highlights
This commit is contained in:
		
							parent
							
								
									f17a08a827
								
							
						
					
					
						commit
						761314c20b
					
				|  | @ -25,7 +25,8 @@ Expect frequent improvements. | |||
| 
 | ||||
| **Recent updates:** | ||||
| 
 | ||||
| - [x] Added markdown support | ||||
| - [x] Added markdown support (3/17/23) | ||||
| - [x] Add code syntax highlighting (3/18/23) | ||||
| 
 | ||||
| ## Modifications | ||||
| 
 | ||||
|  | @ -82,3 +83,7 @@ You should be able to start chatting. | |||
| ## Contact | ||||
| 
 | ||||
| If you have any questions, feel free to reach out to me on [Twitter](https://twitter.com/mckaywrigley). | ||||
| 
 | ||||
| ## Contributors | ||||
| 
 | ||||
| @PeterTakahashi: Added input support for Japanese users (3/17/23) | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| import { Message } from "@/types"; | ||||
| import { FC } from "react"; | ||||
| import ReactMarkdown from "react-markdown"; | ||||
| import { CodeBlock } from "../Markdown/CodeBlock"; | ||||
| 
 | ||||
| interface Props { | ||||
|   message: Message; | ||||
|  | @ -16,7 +17,30 @@ export const ChatMessage: FC<Props> = ({ message }) => { | |||
|         <div className="mr-4 font-bold min-w-[40px]">{message.role === "assistant" ? "AI:" : "You:"}</div> | ||||
| 
 | ||||
|         <div className="prose dark:prose-invert"> | ||||
|           <ReactMarkdown>{message.content}</ReactMarkdown> | ||||
|           <ReactMarkdown | ||||
|             components={{ | ||||
|               code({ node, inline, className, children, ...props }) { | ||||
|                 const match = /language-(\w+)/.exec(className || ""); | ||||
|                 return !inline && match ? ( | ||||
|                   <CodeBlock | ||||
|                     key={Math.random()} | ||||
|                     language={match[1]} | ||||
|                     value={String(children).replace(/\n$/, "")} | ||||
|                     {...props} | ||||
|                   /> | ||||
|                 ) : ( | ||||
|                   <code | ||||
|                     className={className} | ||||
|                     {...props} | ||||
|                   > | ||||
|                     {children} | ||||
|                   </code> | ||||
|                 ); | ||||
|               } | ||||
|             }} | ||||
|           > | ||||
|             {message.content} | ||||
|           </ReactMarkdown> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|  |  | |||
|  | @ -0,0 +1,40 @@ | |||
| import { FC, useState } from "react"; | ||||
| import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"; | ||||
| import { tomorrow } from "react-syntax-highlighter/dist/cjs/styles/prism"; | ||||
| 
 | ||||
| interface Props { | ||||
|   language: string; | ||||
|   value: string; | ||||
| } | ||||
| 
 | ||||
| export const CodeBlock: FC<Props> = ({ language, value }) => { | ||||
|   const [buttonText, setButtonText] = useState("Copy"); | ||||
| 
 | ||||
|   const copyToClipboard = () => { | ||||
|     navigator.clipboard.writeText(value).then(() => { | ||||
|       setButtonText("Copied!"); | ||||
| 
 | ||||
|       setTimeout(() => { | ||||
|         setButtonText("Copy"); | ||||
|       }, 2000); | ||||
|     }); | ||||
|   }; | ||||
| 
 | ||||
|   return ( | ||||
|     <div className="relative"> | ||||
|       <SyntaxHighlighter | ||||
|         language={language} | ||||
|         style={tomorrow} | ||||
|       > | ||||
|         {value} | ||||
|       </SyntaxHighlighter> | ||||
| 
 | ||||
|       <button | ||||
|         className="absolute top-2 right-2 text-white bg-blue-600 py-1 px-2 rounded focus:outline-none hover:bg-blue-700" | ||||
|         onClick={copyToClipboard} | ||||
|       > | ||||
|         {buttonText} | ||||
|       </button> | ||||
|     </div> | ||||
|   ); | ||||
| }; | ||||
|  | @ -20,10 +20,12 @@ | |||
|         "react": "18.2.0", | ||||
|         "react-dom": "18.2.0", | ||||
|         "react-markdown": "^8.0.5", | ||||
|         "react-syntax-highlighter": "^15.5.0", | ||||
|         "typescript": "4.9.5" | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "@tailwindcss/typography": "^0.5.9", | ||||
|         "@types/react-syntax-highlighter": "^15.5.6", | ||||
|         "autoprefixer": "^10.4.14", | ||||
|         "postcss": "^8.4.21", | ||||
|         "tailwindcss": "^3.2.7" | ||||
|  | @ -509,6 +511,15 @@ | |||
|         "@types/react": "*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@types/react-syntax-highlighter": { | ||||
|       "version": "15.5.6", | ||||
|       "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.6.tgz", | ||||
|       "integrity": "sha512-i7wFuLbIAFlabTeD2I1cLjEOrG/xdMa/rpx2zwzAoGHuXJDhSqp9BSfDlMHSh9JSuNfxHk9eEmMX6D55GiyjGg==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "@types/react": "*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@types/scheduler": { | ||||
|       "version": "0.16.2", | ||||
|       "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", | ||||
|  | @ -1027,6 +1038,33 @@ | |||
|         "url": "https://github.com/chalk/chalk?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/character-entities": { | ||||
|       "version": "1.2.4", | ||||
|       "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", | ||||
|       "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/character-entities-legacy": { | ||||
|       "version": "1.1.4", | ||||
|       "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", | ||||
|       "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/character-reference-invalid": { | ||||
|       "version": "1.1.4", | ||||
|       "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", | ||||
|       "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/chokidar": { | ||||
|       "version": "3.5.3", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | ||||
|  | @ -1947,6 +1985,18 @@ | |||
|         "reusify": "^1.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fault": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", | ||||
|       "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", | ||||
|       "dependencies": { | ||||
|         "format": "^0.2.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/file-entry-cache": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", | ||||
|  | @ -2041,6 +2091,14 @@ | |||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/format": { | ||||
|       "version": "0.2.2", | ||||
|       "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", | ||||
|       "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", | ||||
|       "engines": { | ||||
|         "node": ">=0.4.x" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fraction.js": { | ||||
|       "version": "4.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", | ||||
|  | @ -2321,6 +2379,15 @@ | |||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/hast-util-parse-selector": { | ||||
|       "version": "2.2.5", | ||||
|       "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", | ||||
|       "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", | ||||
|       "funding": { | ||||
|         "type": "opencollective", | ||||
|         "url": "https://opencollective.com/unified" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/hast-util-whitespace": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", | ||||
|  | @ -2330,6 +2397,60 @@ | |||
|         "url": "https://opencollective.com/unified" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/hastscript": { | ||||
|       "version": "6.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", | ||||
|       "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", | ||||
|       "dependencies": { | ||||
|         "@types/hast": "^2.0.0", | ||||
|         "comma-separated-tokens": "^1.0.0", | ||||
|         "hast-util-parse-selector": "^2.0.0", | ||||
|         "property-information": "^5.0.0", | ||||
|         "space-separated-tokens": "^1.0.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "opencollective", | ||||
|         "url": "https://opencollective.com/unified" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/hastscript/node_modules/comma-separated-tokens": { | ||||
|       "version": "1.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", | ||||
|       "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/hastscript/node_modules/property-information": { | ||||
|       "version": "5.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", | ||||
|       "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", | ||||
|       "dependencies": { | ||||
|         "xtend": "^4.0.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/hastscript/node_modules/space-separated-tokens": { | ||||
|       "version": "1.1.5", | ||||
|       "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", | ||||
|       "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/highlight.js": { | ||||
|       "version": "10.7.3", | ||||
|       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", | ||||
|       "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", | ||||
|       "engines": { | ||||
|         "node": "*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ignore": { | ||||
|       "version": "5.2.4", | ||||
|       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", | ||||
|  | @ -2393,6 +2514,28 @@ | |||
|         "node": ">= 0.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-alphabetical": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", | ||||
|       "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-alphanumerical": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", | ||||
|       "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", | ||||
|       "dependencies": { | ||||
|         "is-alphabetical": "^1.0.0", | ||||
|         "is-decimal": "^1.0.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-arguments": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", | ||||
|  | @ -2517,6 +2660,15 @@ | |||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-decimal": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", | ||||
|       "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-docker": { | ||||
|       "version": "2.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", | ||||
|  | @ -2550,6 +2702,15 @@ | |||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-hexadecimal": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", | ||||
|       "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-map": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", | ||||
|  | @ -2884,6 +3045,19 @@ | |||
|         "loose-envify": "cli.js" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/lowlight": { | ||||
|       "version": "1.20.0", | ||||
|       "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", | ||||
|       "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", | ||||
|       "dependencies": { | ||||
|         "fault": "^1.0.0", | ||||
|         "highlight.js": "~10.7.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/lru-cache": { | ||||
|       "version": "6.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", | ||||
|  | @ -3784,6 +3958,23 @@ | |||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/parse-entities": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", | ||||
|       "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", | ||||
|       "dependencies": { | ||||
|         "character-entities": "^1.0.0", | ||||
|         "character-entities-legacy": "^1.0.0", | ||||
|         "character-reference-invalid": "^1.0.0", | ||||
|         "is-alphanumerical": "^1.0.0", | ||||
|         "is-decimal": "^1.0.0", | ||||
|         "is-hexadecimal": "^1.0.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/path-exists": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", | ||||
|  | @ -3981,6 +4172,14 @@ | |||
|         "node": ">= 0.8.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/prismjs": { | ||||
|       "version": "1.29.0", | ||||
|       "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", | ||||
|       "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/prop-types": { | ||||
|       "version": "15.8.1", | ||||
|       "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", | ||||
|  | @ -4102,6 +4301,21 @@ | |||
|       "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", | ||||
|       "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" | ||||
|     }, | ||||
|     "node_modules/react-syntax-highlighter": { | ||||
|       "version": "15.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz", | ||||
|       "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==", | ||||
|       "dependencies": { | ||||
|         "@babel/runtime": "^7.3.1", | ||||
|         "highlight.js": "^10.4.1", | ||||
|         "lowlight": "^1.17.0", | ||||
|         "prismjs": "^1.27.0", | ||||
|         "refractor": "^3.6.0" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "react": ">= 0.14.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/read-cache": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", | ||||
|  | @ -4123,6 +4337,28 @@ | |||
|         "node": ">=8.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/refractor": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", | ||||
|       "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", | ||||
|       "dependencies": { | ||||
|         "hastscript": "^6.0.0", | ||||
|         "parse-entities": "^2.0.0", | ||||
|         "prismjs": "~1.27.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "github", | ||||
|         "url": "https://github.com/sponsors/wooorm" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/refractor/node_modules/prismjs": { | ||||
|       "version": "1.27.0", | ||||
|       "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", | ||||
|       "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/regenerator-runtime": { | ||||
|       "version": "0.13.11", | ||||
|       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", | ||||
|  | @ -4955,7 +5191,6 @@ | |||
|       "version": "4.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", | ||||
|       "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=0.4" | ||||
|       } | ||||
|  | @ -5289,6 +5524,15 @@ | |||
|         "@types/react": "*" | ||||
|       } | ||||
|     }, | ||||
|     "@types/react-syntax-highlighter": { | ||||
|       "version": "15.5.6", | ||||
|       "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.6.tgz", | ||||
|       "integrity": "sha512-i7wFuLbIAFlabTeD2I1cLjEOrG/xdMa/rpx2zwzAoGHuXJDhSqp9BSfDlMHSh9JSuNfxHk9eEmMX6D55GiyjGg==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "@types/react": "*" | ||||
|       } | ||||
|     }, | ||||
|     "@types/scheduler": { | ||||
|       "version": "0.16.2", | ||||
|       "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", | ||||
|  | @ -5625,6 +5869,21 @@ | |||
|         "supports-color": "^7.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "character-entities": { | ||||
|       "version": "1.2.4", | ||||
|       "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", | ||||
|       "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" | ||||
|     }, | ||||
|     "character-entities-legacy": { | ||||
|       "version": "1.1.4", | ||||
|       "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", | ||||
|       "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" | ||||
|     }, | ||||
|     "character-reference-invalid": { | ||||
|       "version": "1.1.4", | ||||
|       "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", | ||||
|       "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" | ||||
|     }, | ||||
|     "chokidar": { | ||||
|       "version": "3.5.3", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | ||||
|  | @ -6323,6 +6582,14 @@ | |||
|         "reusify": "^1.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "fault": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", | ||||
|       "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", | ||||
|       "requires": { | ||||
|         "format": "^0.2.0" | ||||
|       } | ||||
|     }, | ||||
|     "file-entry-cache": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", | ||||
|  | @ -6385,6 +6652,11 @@ | |||
|         "mime-types": "^2.1.12" | ||||
|       } | ||||
|     }, | ||||
|     "format": { | ||||
|       "version": "0.2.2", | ||||
|       "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", | ||||
|       "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" | ||||
|     }, | ||||
|     "fraction.js": { | ||||
|       "version": "4.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", | ||||
|  | @ -6570,11 +6842,53 @@ | |||
|         "has-symbols": "^1.0.2" | ||||
|       } | ||||
|     }, | ||||
|     "hast-util-parse-selector": { | ||||
|       "version": "2.2.5", | ||||
|       "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", | ||||
|       "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" | ||||
|     }, | ||||
|     "hast-util-whitespace": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", | ||||
|       "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==" | ||||
|     }, | ||||
|     "hastscript": { | ||||
|       "version": "6.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", | ||||
|       "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", | ||||
|       "requires": { | ||||
|         "@types/hast": "^2.0.0", | ||||
|         "comma-separated-tokens": "^1.0.0", | ||||
|         "hast-util-parse-selector": "^2.0.0", | ||||
|         "property-information": "^5.0.0", | ||||
|         "space-separated-tokens": "^1.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "comma-separated-tokens": { | ||||
|           "version": "1.0.8", | ||||
|           "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", | ||||
|           "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" | ||||
|         }, | ||||
|         "property-information": { | ||||
|           "version": "5.6.0", | ||||
|           "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", | ||||
|           "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", | ||||
|           "requires": { | ||||
|             "xtend": "^4.0.0" | ||||
|           } | ||||
|         }, | ||||
|         "space-separated-tokens": { | ||||
|           "version": "1.1.5", | ||||
|           "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", | ||||
|           "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "highlight.js": { | ||||
|       "version": "10.7.3", | ||||
|       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", | ||||
|       "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" | ||||
|     }, | ||||
|     "ignore": { | ||||
|       "version": "5.2.4", | ||||
|       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", | ||||
|  | @ -6623,6 +6937,20 @@ | |||
|         "side-channel": "^1.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "is-alphabetical": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", | ||||
|       "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" | ||||
|     }, | ||||
|     "is-alphanumerical": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", | ||||
|       "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", | ||||
|       "requires": { | ||||
|         "is-alphabetical": "^1.0.0", | ||||
|         "is-decimal": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "is-arguments": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", | ||||
|  | @ -6694,6 +7022,11 @@ | |||
|         "has-tostringtag": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "is-decimal": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", | ||||
|       "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" | ||||
|     }, | ||||
|     "is-docker": { | ||||
|       "version": "2.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", | ||||
|  | @ -6712,6 +7045,11 @@ | |||
|         "is-extglob": "^2.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "is-hexadecimal": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", | ||||
|       "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" | ||||
|     }, | ||||
|     "is-map": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", | ||||
|  | @ -6946,6 +7284,15 @@ | |||
|         "js-tokens": "^3.0.0 || ^4.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "lowlight": { | ||||
|       "version": "1.20.0", | ||||
|       "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", | ||||
|       "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", | ||||
|       "requires": { | ||||
|         "fault": "^1.0.0", | ||||
|         "highlight.js": "~10.7.0" | ||||
|       } | ||||
|     }, | ||||
|     "lru-cache": { | ||||
|       "version": "6.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", | ||||
|  | @ -7477,6 +7824,19 @@ | |||
|         "callsites": "^3.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "parse-entities": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", | ||||
|       "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", | ||||
|       "requires": { | ||||
|         "character-entities": "^1.0.0", | ||||
|         "character-entities-legacy": "^1.0.0", | ||||
|         "character-reference-invalid": "^1.0.0", | ||||
|         "is-alphanumerical": "^1.0.0", | ||||
|         "is-decimal": "^1.0.0", | ||||
|         "is-hexadecimal": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "path-exists": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", | ||||
|  | @ -7589,6 +7949,11 @@ | |||
|       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", | ||||
|       "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" | ||||
|     }, | ||||
|     "prismjs": { | ||||
|       "version": "1.29.0", | ||||
|       "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", | ||||
|       "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" | ||||
|     }, | ||||
|     "prop-types": { | ||||
|       "version": "15.8.1", | ||||
|       "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", | ||||
|  | @ -7671,6 +8036,18 @@ | |||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "react-syntax-highlighter": { | ||||
|       "version": "15.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz", | ||||
|       "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==", | ||||
|       "requires": { | ||||
|         "@babel/runtime": "^7.3.1", | ||||
|         "highlight.js": "^10.4.1", | ||||
|         "lowlight": "^1.17.0", | ||||
|         "prismjs": "^1.27.0", | ||||
|         "refractor": "^3.6.0" | ||||
|       } | ||||
|     }, | ||||
|     "read-cache": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", | ||||
|  | @ -7689,6 +8066,23 @@ | |||
|         "picomatch": "^2.2.1" | ||||
|       } | ||||
|     }, | ||||
|     "refractor": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", | ||||
|       "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", | ||||
|       "requires": { | ||||
|         "hastscript": "^6.0.0", | ||||
|         "parse-entities": "^2.0.0", | ||||
|         "prismjs": "~1.27.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "prismjs": { | ||||
|           "version": "1.27.0", | ||||
|           "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", | ||||
|           "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "regenerator-runtime": { | ||||
|       "version": "0.13.11", | ||||
|       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", | ||||
|  | @ -8254,8 +8648,7 @@ | |||
|     "xtend": { | ||||
|       "version": "4.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", | ||||
|       "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" | ||||
|     }, | ||||
|     "yallist": { | ||||
|       "version": "4.0.0", | ||||
|  |  | |||
|  | @ -21,10 +21,12 @@ | |||
|     "react": "18.2.0", | ||||
|     "react-dom": "18.2.0", | ||||
|     "react-markdown": "^8.0.5", | ||||
|     "react-syntax-highlighter": "^15.5.0", | ||||
|     "typescript": "4.9.5" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@tailwindcss/typography": "^0.5.9", | ||||
|     "@types/react-syntax-highlighter": "^15.5.6", | ||||
|     "autoprefixer": "^10.4.14", | ||||
|     "postcss": "^8.4.21", | ||||
|     "tailwindcss": "^3.2.7" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue