diff --git a/package.json b/package.json index 91a810c5a..8b0e5242b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sdk", - "version": "0.0.0", + "version": "1.3.0", "license": "MIT", "scripts": { "prepare": "husky install", diff --git a/packages/uiweb/package.json b/packages/uiweb/package.json index e5e6578b1..50f3bb92c 100644 --- a/packages/uiweb/package.json +++ b/packages/uiweb/package.json @@ -27,6 +27,7 @@ "moment": "^2.29.4", "protobufjs": "^7.2.6", "raf": "^3.4.0", + "react-code-blocks": "^0.1.6", "react-easy-crop": "^4.1.4", "react-icons": "^4.10.1", "react-image-file-resizer": "^0.4.7", diff --git a/packages/uiweb/src/lib/components/chat/ChatViewBubble/cards/message/MessageCard.tsx b/packages/uiweb/src/lib/components/chat/ChatViewBubble/cards/message/MessageCard.tsx index d76ee44a8..26e603bd5 100644 --- a/packages/uiweb/src/lib/components/chat/ChatViewBubble/cards/message/MessageCard.tsx +++ b/packages/uiweb/src/lib/components/chat/ChatViewBubble/cards/message/MessageCard.tsx @@ -3,11 +3,12 @@ import { Fragment, ReactElement, ReactNode, useContext, useEffect, useState } fr // External Packages import moment from 'moment'; +import { CopyBlock, dracula } from 'react-code-blocks'; import styled, { keyframes } from 'styled-components'; // Internal Compoonents import { extractWebLink, getFormattedMetadata, hasWebLink } from '../../../../../utilities'; -import { Anchor, Image, Section, Span } from '../../../../reusables'; +import { Anchor, Button, Section, Span } from '../../../../reusables'; import { ThemeContext } from '../../../theme/ThemeProvider'; import { IPreviewCallback, PreviewRenderer } from './PreviewRenderer'; @@ -19,6 +20,11 @@ import { IPreviewCallback, PreviewRenderer } from './PreviewRenderer'; // Interfaces & Types import { IMessagePayload, TwitterFeedReturnType } from '../../../exportedTypes'; +interface IMsgFragments { + msg: string; + type: string; +} + // Constants // Exported Interfaces & Types @@ -61,6 +67,121 @@ export const MessageCard = ({ }); }; + // break message to derive different types + const splitMessageToMessages = (item: IMsgFragments): IMsgFragments[] => { + // split message into code blocks + const splitMessageToCodeBlocks = (fragment: IMsgFragments): IMsgFragments[] => { + const codeBlockRegex = /(```[\s\S]*?```)/g; // Regex to match code blocks + const fragments = []; + let lastIndex = 0; + + fragment.msg.replace(codeBlockRegex, (match, p1, offset) => { + // Add text before the code block if it exists + if (offset > lastIndex) { + fragments.push({ + msg: fragment.msg.substring(lastIndex, offset), + type: fragment.type, + }); + } + // Add the code block + fragments.push({ + msg: p1, + type: 'code', + }); + lastIndex = offset + p1.length; + return match; // This return is not used, required for replace function signature + }); + + // Add any remaining text after the last code block + if (lastIndex < fragment.msg.length) { + fragments.push({ + msg: fragment.msg.substring(lastIndex), + type: fragment.type, + }); + } + + return fragments; + }; + + // start with array of messages + const chunks = [ + { + msg: item.msg, + type: item.type, + }, + ]; + + // for each message in messages, split it into code blocks and replace array + chunks.forEach((item, index) => { + chunks.splice(index, 1, ...splitMessageToCodeBlocks(item)); + }); + + return chunks; + }; + + // convert to fragments which can have different types + const fragments = splitMessageToMessages({ msg: message, type: 'text' }); + + // To render individual fragments + const renderTxtFragments = (message: string, fragmentIndex: number): ReactNode => { + return message.split('\n').map((line: string, lineIndex: number) => ( + + {line.split(' ').map((word: string, wordIndex: number) => { + const link = hasWebLink(word) ? extractWebLink(word) : ''; + return ( + + {link ? ( + + {word} + + ) : ( + word + )}{' '} + {/* Ensure spaces are maintained between words */} + + ); + })} + + )); + }; + + // To render code fragment + const renderCodeFragment = (message: string, fragmentIndex: number): ReactElement => { + // split code and language + const regex = /```(\S*)\s*([\s\S]*?)```/; // Regex to capture optional language and code within backticks + const match = message.match(regex); + const language = match?.[1] || 'plaintext'; + const code = message.split('\n').slice(1, -1).join('\n').trim(); + + return ( + + + + ); + }; + + // Render entire message return ( {/* Preview Renderer - Start with assuming preview is there, callback handles no preview */} @@ -91,51 +212,27 @@ export const MessageCard = ({ border={position ? `${theme.border?.chatSentBubble}` : `${theme.border?.chatReceivedBubble}`} padding="8px 12px" borderRadius={position ? '12px 0px 12px 12px' : '0px 12px 12px 12px'} - margin="5px 0" alignSelf={position ? 'end' : 'start'} justifyContent="start" - minWidth="71px" + maxWidth="inherit" + minWidth="72px" position="relative" - width="fit-content" color={position ? `${theme.textColor?.chatSentBubbleText}` : `${theme.textColor?.chatReceivedBubbleText}`} >
- {message.split('\n').map((line: string, lineIndex: number) => ( - - {line.split(' ').map((word: string, wordIndex: number) => - hasWebLink(word) ? ( - <> - - {word} - - - - ) : ( - {word} - ) - )} - - ))} + {fragments.map((fragment, fragmentIndex) => { + if (fragment.type === 'text') { + return renderTxtFragments(fragment.msg, fragmentIndex); + } else if (fragment.type === 'code') { + return renderCodeFragment(fragment.msg, fragmentIndex); + } else { + return null; + } + })}
{/* Timestamp rendering */} @@ -162,22 +259,19 @@ export const MessageCard = ({ ); }; -const fader = keyframes` - 0% { opacity: 0.5; } - 50% { opacity: 1; } - 100% { opacity: 0.5; } -`; - const MessagePreviewSection = styled(Section)` overflow: hidden; + max-width: 100%; `; const MessageSection = styled(Section)` box-sizing: border-box; + max-width: 100%; `; const MessageCardSection = styled(Section)` flex-direction: column; + max-width: 100%; &.video, &.frame { @@ -201,6 +295,31 @@ const MessageCardSection = styled(Section)` } `; +const CodeSection = styled(Section)` + margin: 16px 0; + border-radius: 12px; + align-self: stretch; + max-width: inherit; + + div:first-of-type { + max-width: inherit; + width: 100%; + padding: 20px; + font-weight: 300; + font-family: monospace; + overflow: scroll; + justify-content: flex-start; + } +`; + +const StyledCopyBlock = styled(CopyBlock)``; + +const fader = keyframes` + 0% { opacity: 0.5; } + 50% { opacity: 1; } + 100% { opacity: 0.5; } +`; + const MessageAnchor = styled(Anchor)` &:first-child.loading { animation: ${fader} 1.5s ease-in infinite; diff --git a/packages/uiweb/src/lib/components/chat/ChatViewList/ChatViewList.tsx b/packages/uiweb/src/lib/components/chat/ChatViewList/ChatViewList.tsx index a9acf6bab..c52fbcc04 100644 --- a/packages/uiweb/src/lib/components/chat/ChatViewList/ChatViewList.tsx +++ b/packages/uiweb/src/lib/components/chat/ChatViewList/ChatViewList.tsx @@ -141,7 +141,7 @@ export const ChatViewList: React.FC = (options: IChatViewLis invalidChat: false, }); }; - }, [chatId, user, chatAcceptStream, participantJoinStream, participantLeaveStream, participantRemoveStream]); + }, [chatId, user]); // When loading is done useEffect(() => { @@ -152,14 +152,32 @@ export const ChatViewList: React.FC = (options: IChatViewLis })(); }, [initialized.loading]); - //moniters stream changes + // Change listtype to 'CHATS' and hidden to false when chatAcceptStream is received useEffect(() => { if (Object.keys(chatAcceptStream || {}).length > 0 && chatAcceptStream.constructor === Object) { + // Check if chat was encrypted, if so, reload the chat + if ((initialized.chatInfo?.meta as any)?.encryption === false) { + setInitialized({ loading: true, chatInfo: null, isHidden: false, invalidChat: false }); + } else { + // If not encrypted, then set hidden to false + const updatedChatInfo = { ...(initialized.chatInfo as ChatInfoResponse) }; + if (updatedChatInfo) updatedChatInfo.list = 'CHATS'; + + setInitialized({ ...initialized, isHidden: false }); + } + } + }, [chatAcceptStream, participantJoinStream]); + + // Change listtype to 'UINITIALIZED' and hidden to true when participantRemoveStream or participantLeaveStream is received + useEffect(() => { + if (Object.keys(participantRemoveStream || {}).length > 0 && participantRemoveStream.constructor === Object) { + // If not encrypted, then set hidden to false const updatedChatInfo = { ...(initialized.chatInfo as ChatInfoResponse) }; - if (updatedChatInfo) updatedChatInfo.list = 'CHATS'; - setInitialized({ ...initialized, chatInfo: updatedChatInfo, isHidden: false }); + if (updatedChatInfo) updatedChatInfo.list = 'UNINITIALIZED'; + + setInitialized({ ...initialized, isHidden: false }); } - }, [chatAcceptStream]); + }, [participantRemoveStream, participantLeaveStream]); useEffect(() => { if (Object.keys(chatStream || {}).length > 0 && chatStream.constructor === Object) { diff --git a/packages/uiweb/yarn.lock b/packages/uiweb/yarn.lock index 2598cb3d9..023594731 100644 --- a/packages/uiweb/yarn.lock +++ b/packages/uiweb/yarn.lock @@ -5,7 +5,7 @@ __metadata: version: 8 cacheKey: 10c0 -"@babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.21.0": +"@babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1": version: 7.24.5 resolution: "@babel/runtime@npm:7.24.5" dependencies: @@ -38,6 +38,29 @@ __metadata: languageName: node linkType: hard +"@emotion/is-prop-valid@npm:1.2.2": + version: 1.2.2 + resolution: "@emotion/is-prop-valid@npm:1.2.2" + dependencies: + "@emotion/memoize": "npm:^0.8.1" + checksum: 10c0/bb1530dcb4e0e5a4fabb219279f2d0bc35796baf66f6241f98b0d03db1985c890a8cafbea268e0edefd5eeda143dbd5c09a54b5fba74cee8c69b98b13194af50 + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: 10c0/dffed372fc3b9fa2ba411e76af22b6bb686fb0cb07694fdfaa6dd2baeb0d5e4968c1a7caa472bfcf06a5997d5e7c7d16b90e993f9a6ffae79a2c3dbdc76dfe78 + languageName: node + linkType: hard + +"@emotion/unitless@npm:0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 10c0/a1ed508628288f40bfe6dd17d431ed899c067a899fa293a13afe3aed1d70fac0412b8a215fafab0b42829360db687fecd763e5f01a64ddc4a4b58ec3112ff548 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.19.12": version: 0.19.12 resolution: "@esbuild/aix-ppc64@npm:0.19.12" @@ -1778,6 +1801,7 @@ __metadata: moment: "npm:^2.29.4" protobufjs: "npm:^7.2.6" raf: "npm:^3.4.0" + react-code-blocks: "npm:^0.1.6" react-easy-crop: "npm:^4.1.4" react-icons: "npm:^4.10.1" react-image-file-resizer: "npm:^0.4.7" @@ -2739,6 +2763,15 @@ __metadata: languageName: node linkType: hard +"@types/hast@npm:^2.0.0": + version: 2.3.10 + resolution: "@types/hast@npm:2.3.10" + dependencies: + "@types/unist": "npm:^2" + checksum: 10c0/16daac35d032e656defe1f103f9c09c341a6dc553c7ec17b388274076fa26e904a71ea5ea41fd368a6d5f1e9e53be275c80af7942b9c466d8511d261c9529c7e + languageName: node + linkType: hard + "@types/ms@npm:*": version: 0.7.34 resolution: "@types/ms@npm:0.7.34" @@ -2755,6 +2788,13 @@ __metadata: languageName: node linkType: hard +"@types/stylis@npm:4.2.5": + version: 4.2.5 + resolution: "@types/stylis@npm:4.2.5" + checksum: 10c0/23f5b35a3a04f6bb31a29d404fa1bc8e0035fcaff2356b4047743a057e0c37b2eba7efe14d57dd2b95b398cea3bac294d9c6cd93ed307d8c0b7f5d282224b469 + languageName: node + linkType: hard + "@types/trusted-types@npm:^2.0.2": version: 2.0.7 resolution: "@types/trusted-types@npm:2.0.7" @@ -2762,6 +2802,13 @@ __metadata: languageName: node linkType: hard +"@types/unist@npm:^2": + version: 2.0.10 + resolution: "@types/unist@npm:2.0.10" + checksum: 10c0/5f247dc2229944355209ad5c8e83cfe29419fa7f0a6d557421b1985a1500444719cc9efcc42c652b55aab63c931813c88033e0202c1ac684bcd4829d66e44731 + languageName: node + linkType: hard + "@unstoppabledomains/resolution@npm:^8.5.0": version: 8.5.0 resolution: "@unstoppabledomains/resolution@npm:8.5.0" @@ -3447,6 +3494,34 @@ __metadata: languageName: node linkType: hard +"camelize@npm:^1.0.0": + version: 1.0.1 + resolution: "camelize@npm:1.0.1" + checksum: 10c0/4c9ac55efd356d37ac483bad3093758236ab686192751d1c9daa43188cc5a07b09bd431eb7458a4efd9ca22424bba23253e7b353feb35d7c749ba040de2385fb + languageName: node + linkType: hard + +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: 10c0/ea4ca9c29887335eed86d78fc67a640168342b1274da84c097abb0575a253d1265281a5052f9a863979e952bcc267b4ecaaf4fe233a7e1e0d8a47806c65b96c7 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: 10c0/ad015c3d7163563b8a0ee1f587fb0ef305ef344e9fd937f79ca51cccc233786a01d591d989d5bf7b2e66b528ac9efba47f3b1897358324e69932f6d4b25adfe1 + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 10c0/29f05081c5817bd1e975b0bf61e77b60a40f62ad371d0f0ce0fdb48ab922278bc744d1fbe33771dced751887a8403f265ff634542675c8d7375f6ff4811efd0e + languageName: node + linkType: hard + "chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -3571,6 +3646,13 @@ __metadata: languageName: node linkType: hard +"comma-separated-tokens@npm:^1.0.0": + version: 1.0.8 + resolution: "comma-separated-tokens@npm:1.0.8" + checksum: 10c0/c3bcfeaa6d50313528a006a40bcc0f9576086665c9b48d4b3a76ddd63e7d6174734386c98be1881cbf6ecfc25e1db61cd775a7b896d2ea7a65de28f83a0f9b17 + languageName: node + linkType: hard + "confbox@npm:^0.1.7": version: 0.1.7 resolution: "confbox@npm:0.1.7" @@ -3663,6 +3745,31 @@ __metadata: languageName: node linkType: hard +"css-color-keywords@npm:^1.0.0": + version: 1.0.0 + resolution: "css-color-keywords@npm:1.0.0" + checksum: 10c0/af205a86c68e0051846ed91eb3e30b4517e1904aac040013ff1d742019b3f9369ba5658ba40901dbbc121186fc4bf0e75a814321cc3e3182fbb2feb81c6d9cb7 + languageName: node + linkType: hard + +"css-to-react-native@npm:3.2.0": + version: 3.2.0 + resolution: "css-to-react-native@npm:3.2.0" + dependencies: + camelize: "npm:^1.0.0" + css-color-keywords: "npm:^1.0.0" + postcss-value-parser: "npm:^4.0.2" + checksum: 10c0/fde850a511d5d3d7c55a1e9b8ed26b69a8ad4868b3487e36ebfbfc0b96fc34bc977d9cd1d61a289d0c74d3f9a662d8cee297da53d4433bf2e27d6acdff8e1003 + languageName: node + linkType: hard + +"csstype@npm:3.1.3": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 + languageName: node + linkType: hard + "custom-error-instance@npm:2.1.1": version: 2.1.1 resolution: "custom-error-instance@npm:2.1.1" @@ -4351,6 +4458,15 @@ __metadata: languageName: node linkType: hard +"fault@npm:^1.0.0": + version: 1.0.4 + resolution: "fault@npm:1.0.4" + dependencies: + format: "npm:^0.2.0" + checksum: 10c0/c86c11500c1b676787296f31ade8473adcc6784f118f07c1a9429730b6288d0412f96e069ce010aa57e4f65a9cccb5abee8868bbe3c5f10de63b20482c9baebd + languageName: node + linkType: hard + "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -4394,6 +4510,13 @@ __metadata: languageName: node linkType: hard +"format@npm:^0.2.0": + version: 0.2.2 + resolution: "format@npm:0.2.2" + checksum: 10c0/6032ba747541a43abf3e37b402b2f72ee08ebcb58bf84d816443dd228959837f1cddf1e8775b29fa27ff133f4bd146d041bfca5f9cf27f048edf3d493cf8fee6 + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -4542,6 +4665,26 @@ __metadata: languageName: node linkType: hard +"hast-util-parse-selector@npm:^2.0.0": + version: 2.2.5 + resolution: "hast-util-parse-selector@npm:2.2.5" + checksum: 10c0/29b7ee77960ded6a99d30c287d922243071cc07b39f2006f203bd08ee54eb8f66bdaa86ef6527477c766e2382d520b60ee4e4087f189888c35d8bcc020173648 + languageName: node + linkType: hard + +"hastscript@npm:^6.0.0": + version: 6.0.0 + resolution: "hastscript@npm:6.0.0" + dependencies: + "@types/hast": "npm:^2.0.0" + comma-separated-tokens: "npm:^1.0.0" + hast-util-parse-selector: "npm:^2.0.0" + property-information: "npm:^5.0.0" + space-separated-tokens: "npm:^1.0.0" + checksum: 10c0/f76d9cf373cb075c8523c8ad52709f09f7e02b7c9d3152b8d35c65c265b9f1878bed6023f215a7d16523921036d40a7da292cb6f4399af9b5eccac2a5a5eb330 + languageName: node + linkType: hard + "hey-listen@npm:^1.0.8": version: 1.0.8 resolution: "hey-listen@npm:1.0.8" @@ -4549,6 +4692,13 @@ __metadata: languageName: node linkType: hard +"highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0": + version: 10.7.3 + resolution: "highlight.js@npm:10.7.3" + checksum: 10c0/073837eaf816922427a9005c56c42ad8786473dc042332dfe7901aa065e92bc3d94ebf704975257526482066abb2c8677cc0326559bb8621e046c21c5991c434 + languageName: node + linkType: hard + "hls.js@npm:^1.4.12": version: 1.5.8 resolution: "hls.js@npm:1.5.8" @@ -4733,6 +4883,23 @@ __metadata: languageName: node linkType: hard +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 10c0/1505b1de5a1fd74022c05fb21b0e683a8f5229366bac8dc4d34cf6935bcfd104d1125a5e6b083fb778847629f76e5bdac538de5367bdf2b927a1356164e23985 + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + checksum: 10c0/d623abae7130a7015c6bf33d99151d4e7005572fd170b86568ff4de5ae86ac7096608b87dd4a1d4dbbd497e392b6396930ba76c9297a69455909cebb68005905 + languageName: node + linkType: hard + "is-binary-path@npm:~2.1.0": version: 2.1.0 resolution: "is-binary-path@npm:2.1.0" @@ -4742,6 +4909,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: 10c0/a4ad53c4c5c4f5a12214e7053b10326711f6a71f0c63ba1314a77bd71df566b778e4ebd29f9fb6815f07a4dc50c3767fb19bd6fc9fa05e601410f1d64ffeac48 + languageName: node + linkType: hard + "is-docker@npm:^3.0.0": version: 3.0.0 resolution: "is-docker@npm:3.0.0" @@ -4774,6 +4948,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: 10c0/ec4c64e5624c0f240922324bc697e166554f09d3ddc7633fc526084502626445d0a871fbd8cae52a9844e83bd0bb414193cc5a66806d7b2867907003fc70c5ea + languageName: node + linkType: hard + "is-inside-container@npm:^1.0.0": version: 1.0.0 resolution: "is-inside-container@npm:1.0.0" @@ -5207,6 +5388,16 @@ __metadata: languageName: node linkType: hard +"lowlight@npm:^1.17.0": + version: 1.20.0 + resolution: "lowlight@npm:1.20.0" + dependencies: + fault: "npm:^1.0.0" + highlight.js: "npm:~10.7.0" + checksum: 10c0/728bce6f6fe8b157f48d3324e597f452ce0eed2ccff1c0f41a9047380f944e971eb45bceb31f08fbb64d8f338dabb166f10049b35b92c7ec5cf0241d6adb3dea + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.2.2 resolution: "lru-cache@npm:10.2.2" @@ -5492,7 +5683,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.1": +"nanoid@npm:^3.3.1, nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" bin: @@ -5726,6 +5917,20 @@ __metadata: languageName: node linkType: hard +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + dependencies: + character-entities: "npm:^1.0.0" + character-entities-legacy: "npm:^1.0.0" + character-reference-invalid: "npm:^1.0.0" + is-alphanumerical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + is-hexadecimal: "npm:^1.0.0" + checksum: 10c0/f85a22c0ea406ff26b53fdc28641f01cc36fa49eb2e3135f02693286c89ef0bcefc2262d99b3688e20aac2a14fd10b75c518583e875c1b9fe3d1f937795e0854 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -5771,6 +5976,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: 10c0/20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -5855,6 +6067,24 @@ __metadata: languageName: node linkType: hard +"postcss-value-parser@npm:^4.0.2": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"postcss@npm:8.4.38": + version: 8.4.38 + resolution: "postcss@npm:8.4.38" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.0.0" + source-map-js: "npm:^1.2.0" + checksum: 10c0/955407b8f70cf0c14acf35dab3615899a2a60a26718a63c848cf3c29f2467b0533991b985a2b994430d890bd7ec2b1963e36352b0774a19143b5f591540f7c06 + languageName: node + linkType: hard + "preact@npm:^10.16.0": version: 10.21.0 resolution: "preact@npm:10.21.0" @@ -5862,6 +6092,20 @@ __metadata: languageName: node linkType: hard +"prismjs@npm:^1.27.0": + version: 1.29.0 + resolution: "prismjs@npm:1.29.0" + checksum: 10c0/d906c4c4d01b446db549b4f57f72d5d7e6ccaca04ecc670fb85cea4d4b1acc1283e945a9cbc3d81819084a699b382f970e02f9d1378e14af9808d366d9ed7ec6 + languageName: node + linkType: hard + +"prismjs@npm:~1.27.0": + version: 1.27.0 + resolution: "prismjs@npm:1.27.0" + checksum: 10c0/841cbf53e837a42df9155c5ce1be52c4a0a8967ac916b52a27d066181a3578186c634e52d06d0547fb62b65c486b99b95f826dd54966619f9721b884f486b498 + languageName: node + linkType: hard + "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -5915,6 +6159,15 @@ __metadata: languageName: node linkType: hard +"property-information@npm:^5.0.0": + version: 5.6.0 + resolution: "property-information@npm:5.6.0" + dependencies: + xtend: "npm:^4.0.0" + checksum: 10c0/d54b77c31dc13bb6819559080b2c67d37d94be7dc271f404f139a16a57aa96fcc0b3ad806d4a5baef9e031744853e4afe3df2e37275aacb1f78079bbb652c5af + languageName: node + linkType: hard + "protobufjs@npm:^7.2.6": version: 7.3.0 resolution: "protobufjs@npm:7.3.0" @@ -5998,6 +6251,20 @@ __metadata: languageName: node linkType: hard +"react-code-blocks@npm:^0.1.6": + version: 0.1.6 + resolution: "react-code-blocks@npm:0.1.6" + dependencies: + "@babel/runtime": "npm:^7.10.4" + react-syntax-highlighter: "npm:^15.5.0" + styled-components: "npm:^6.1.0" + tslib: "npm:^2.6.0" + peerDependencies: + react: ">=16" + checksum: 10c0/7678f293e5cdd6e1798bdd97f61df7ce62ed435e9b8b7e9c65dfcf66edbaaa8c0345e309bb79b0fa1c2670d1efc5b0ae0aecb4ff4e0ba4d68395f6dba383a7ca + languageName: node + linkType: hard + "react-easy-crop@npm:^4.1.4": version: 4.7.5 resolution: "react-easy-crop@npm:4.7.5" @@ -6115,6 +6382,21 @@ __metadata: languageName: node linkType: hard +"react-syntax-highlighter@npm:^15.5.0": + version: 15.5.0 + resolution: "react-syntax-highlighter@npm:15.5.0" + dependencies: + "@babel/runtime": "npm:^7.3.1" + highlight.js: "npm:^10.4.1" + lowlight: "npm:^1.17.0" + prismjs: "npm:^1.27.0" + refractor: "npm:^3.6.0" + peerDependencies: + react: ">= 0.14.0" + checksum: 10c0/2bf57a1ea151f688efc7eba355677577c9bb55f05f9df7ef86627aae42f63f505486cddf3f4a628aecc51ec75e89beb9533201570d03201c4bf7d69d61d2545d + languageName: node + linkType: hard + "react-toastify@npm:^9.1.3": version: 9.1.3 resolution: "react-toastify@npm:9.1.3" @@ -6166,6 +6448,17 @@ __metadata: languageName: node linkType: hard +"refractor@npm:^3.6.0": + version: 3.6.0 + resolution: "refractor@npm:3.6.0" + dependencies: + hastscript: "npm:^6.0.0" + parse-entities: "npm:^2.0.0" + prismjs: "npm:~1.27.0" + checksum: 10c0/63ab62393c8c2fd7108c2ea1eff721c0ad2a1a6eee60fdd1b47f4bb25cf298667dc97d041405b3e718b0817da12b37a86ed07ebee5bd2ca6405611f1bae456db + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.14.0": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" @@ -6309,6 +6602,13 @@ __metadata: languageName: node linkType: hard +"shallowequal@npm:1.1.0": + version: 1.1.0 + resolution: "shallowequal@npm:1.1.0" + checksum: 10c0/b926efb51cd0f47aa9bc061add788a4a650550bbe50647962113a4579b60af2abe7b62f9b02314acc6f97151d4cf87033a2b15fc20852fae306d1a095215396c + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -6398,6 +6698,20 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 + languageName: node + linkType: hard + +"space-separated-tokens@npm:^1.0.0": + version: 1.1.5 + resolution: "space-separated-tokens@npm:1.1.5" + checksum: 10c0/3ee0a6905f89e1ffdfe474124b1ade9fe97276a377a0b01350bc079b6ec566eb5b219e26064cc5b7f3899c05bde51ffbc9154290b96eaf82916a1e2c2c13ead9 + languageName: node + linkType: hard + "split-on-first@npm:^1.0.0": version: 1.1.0 resolution: "split-on-first@npm:1.1.0" @@ -6532,6 +6846,33 @@ __metadata: languageName: node linkType: hard +"styled-components@npm:^6.1.0": + version: 6.1.11 + resolution: "styled-components@npm:6.1.11" + dependencies: + "@emotion/is-prop-valid": "npm:1.2.2" + "@emotion/unitless": "npm:0.8.1" + "@types/stylis": "npm:4.2.5" + css-to-react-native: "npm:3.2.0" + csstype: "npm:3.1.3" + postcss: "npm:8.4.38" + shallowequal: "npm:1.1.0" + stylis: "npm:4.3.2" + tslib: "npm:2.6.2" + peerDependencies: + react: ">= 16.8.0" + react-dom: ">= 16.8.0" + checksum: 10c0/1d149a51d24f779bba700c8c23ec0538b2d2b57745ccd49d1cfdc2dfce8bcea21e8ff81fed1143d1b35d127cc591717a398da72ea6671abbf705432b13e59e56 + languageName: node + linkType: hard + +"stylis@npm:4.3.2": + version: 4.3.2 + resolution: "stylis@npm:4.3.2" + checksum: 10c0/0410e1404cbeee3388a9e17587875211ce2f014c8379af0d1e24ca55878867c9f1ccc7b0ce9a156ca53f5d6e301391a82b0645522a604674a378b3189a4a1994 + languageName: node + linkType: hard + "superstruct@npm:^1.0.3": version: 1.0.4 resolution: "superstruct@npm:1.0.4" @@ -6659,7 +7000,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.2, tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1": +"tslib@npm:2.6.2, tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.6.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 10c0/e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb @@ -7106,7 +7447,7 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.1": +"xtend@npm:^4.0.0, xtend@npm:^4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e