From f1c9c9608251765f05fe3e3a81470fd6d2e78b4d Mon Sep 17 00:00:00 2001 From: Hk-Gosuto Date: Fri, 8 Mar 2024 17:35:59 +0800 Subject: [PATCH] Merge remote-tracking branch 'upstream/main' --- README.md | 12 +- app/client/platforms/openai.ts | 2 +- app/components/chat.module.scss | 35 +- app/components/chat.tsx | 33 +- app/components/markdown.tsx | 60 ++-- app/constant.ts | 1 - app/styles/markdown.scss | 556 ++++++++++++++++---------------- 7 files changed, 312 insertions(+), 387 deletions(-) diff --git a/README.md b/README.md index 28e5c849f..679b3b0e0 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Web][Web-image]][web-url] -[网页版](https://n3xt.chat) / [反馈](https://github.com/Hk-Gosuto/ChatGPT-Next-Web-LangChain/issues) +[网页版](https://n3xt.chat) / [反馈](https://github.com/Hk-Gosuto/ChatGPT-Next-Web-LangChain/issues) / [Discord](https://discord.gg/zTwDFtSC) [web-url]: https://n3xt.chat/ [download-url]: https://github.com/Hk-Gosuto/ChatGPT-Next-Web-LangChain/releases @@ -41,7 +41,7 @@ - 支持 GPT-4V(视觉) 模型 - ~~需要配置对象存储服务,请参考 [对象存储服务配置指南](./docs/s3-oss.md) 配置~~ - - 已同步上游仓库视觉模型调用方式(压缩图片),不过这里还是会有撑爆 localstorage 的风险(https://github.com/Hk-Gosuto/ChatGPT-Next-Web-LangChain/issues/77#issuecomment-1846410078),后续会兼容两种形式的图片本地存储,如果配置了对象存储会优先使用对象存储。 + - 已同步上游仓库视觉模型调用方式(压缩图片),这里还是会有撑爆 LocalStorage 的风险(https://github.com/Hk-Gosuto/ChatGPT-Next-Web-LangChain/issues/77#issuecomment-1846410078),后面如果出现类似问题会再适配对象存储来存储图像。 - 基于 [LangChain](https://github.com/hwchase17/langchainjs) 实现的插件功能,目前支持以下插件,未来会添加更多 - 搜索(优先级:`GoogleCustomSearch > SerpAPI > BingSerpAPI > ChooseSearchEngine > DuckDuckGo`) @@ -138,8 +138,6 @@ 最新版本中已经移除上面两个模型。 -- [ ] ~~支持添加自定义插件~~ - - [ ] 支持其他类型文件上传 https://github.com/Hk-Gosuto/ChatGPT-Next-Web-LangChain/issues/77 - [ ] 支持 Azure Storage https://github.com/Hk-Gosuto/ChatGPT-Next-Web-LangChain/issues/217 @@ -301,12 +299,6 @@ docker run -d -p 3000:3000 \ -## 截图 - -![Settings](./docs/images/settings.png) - -![More](./docs/images/more.png) - ## 捐赠 [请项目原作者喝杯咖啡](https://www.buymeacoffee.com/yidadaa) diff --git a/app/client/platforms/openai.ts b/app/client/platforms/openai.ts index 3ed7f3e94..4f939323f 100644 --- a/app/client/platforms/openai.ts +++ b/app/client/platforms/openai.ts @@ -308,7 +308,7 @@ export class ChatGPTApi implements LLMApi { async toolAgentChat(options: AgentChatOptions) { const messages = options.messages.map((v) => ({ role: v.role, - content: v.content, + content: getMessageTextContent(v), })); const modelConfig = { diff --git a/app/components/chat.module.scss b/app/components/chat.module.scss index 00d400a05..d9d97666e 100644 --- a/app/components/chat.module.scss +++ b/app/components/chat.module.scss @@ -648,39 +648,6 @@ bottom: 32px; } -.chat-input-image { - background-color: var(--primary); - color: white; - - position: absolute; - right: 28px; - bottom: 78px; - - display: flex; - align-items: flex-start; - - border-radius: 4px; - overflow: hidden; - border: 1px solid rgba(0, 0, 0, 0.1); -} - -.chat-input-image-close { - background-color: white; - fill: black; - border: none; - align-items: center; - justify-content: center; - display: flex; - margin: 0px; - padding: 0px; - width: 22px; - height: 48px; -} - -.chat-input-image-close:hover { - background-color: #f3f3f3; -} - @media only screen and (max-width: 600px) { .chat-input { font-size: 16px; @@ -689,4 +656,4 @@ .chat-input-send { bottom: 30px; } -} +} \ No newline at end of file diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 4b04b3126..20e8bc3e3 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -90,7 +90,6 @@ import { import { useNavigate } from "react-router-dom"; import { CHAT_PAGE_SIZE, - LAST_INPUT_IMAGE_KEY, LAST_INPUT_KEY, ModelProvider, Path, @@ -105,7 +104,6 @@ import { prettyObject } from "../utils/format"; import { ExportMessageModal } from "./exporter"; import { getClientConfig } from "../config/client"; import { useAllModels } from "../utils/hooks"; -import Image from "next/image"; import { ClientApi } from "../client/api"; import { createTTSPlayer } from "../utils/audio"; import { MultimodalContent } from "../client/api"; @@ -455,7 +453,6 @@ export function ChatActions(props: { showPromptModal: () => void; scrollToBottom: () => void; showPromptHints: () => void; - imageSelected: (img: any) => void; hitBottom: boolean; uploading: boolean; }) { @@ -717,7 +714,6 @@ function _Chat() { const inputRef = useRef(null); const [userInput, setUserInput] = useState(""); - const [userImage, setUserImage] = useState(); const [isLoading, setIsLoading] = useState(false); const { submitKey, shouldSubmit } = useSubmitHandler(); const scrollRef = useRef(null); @@ -803,7 +799,7 @@ function _Chat() { } }; - const doSubmit = (userInput: string, userImage?: any) => { + const doSubmit = (userInput: string) => { if (userInput.trim() === "") return; const matchCommand = chatCommands.match(userInput); if (matchCommand.matched) { @@ -818,10 +814,8 @@ function _Chat() { .then(() => setIsLoading(false)); setAttachImages([]); localStorage.setItem(LAST_INPUT_KEY, userInput); - localStorage.setItem(LAST_INPUT_IMAGE_KEY, userImage); setUserInput(""); setPromptHints([]); - setUserImage(null); if (!isMobileScreen) inputRef.current?.focus(); setAutoScroll(true); }; @@ -886,12 +880,11 @@ function _Chat() { !(e.metaKey || e.altKey || e.ctrlKey) ) { setUserInput(localStorage.getItem(LAST_INPUT_KEY) ?? ""); - setUserImage(localStorage.getItem(LAST_INPUT_IMAGE_KEY)); e.preventDefault(); return; } if (shouldSubmit(e) && promptHints.length === 0) { - doSubmit(userInput, userImage); + doSubmit(userInput); e.preventDefault(); } }; @@ -1069,7 +1062,6 @@ function _Chat() { isLoading, session.messages, userInput, - userImage?.fileUrl, ]); const [msgRenderIndex, _setMsgRenderIndex] = useState( @@ -1283,8 +1275,6 @@ function _Chat() { setAttachImages(images); } - const textareaMinHeight = userImage ? 121 : 68; - return (
@@ -1574,19 +1564,6 @@ function _Chat() {
)}
- {!isUser && message.model?.includes("vision") && ( -
-
-
- )}
{isContext ? Locale.Chat.IsContext @@ -1622,9 +1599,6 @@ function _Chat() { setUserInput("/"); onSearch(""); }} - imageSelected={(img: any) => { - setUserImage(img); - }} />
diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index a30dc3dcc..f3a916cc5 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -116,41 +116,38 @@ function escapeDollarNumber(text: string) { return escapedText; } -function _MarkDownContent(props: { content: string; imageBase64?: string }) { +function _MarkDownContent(props: { content: string }) { const escapedContent = useMemo( () => escapeDollarNumber(props.content), [props.content], ); return ( -
- {props.imageBase64 && } -

, - a: (aProps) => { - const href = aProps.href || ""; - const isInternal = /^\/#/i.test(href); - const target = isInternal ? "_self" : aProps.target ?? "_blank"; - return ; + - {escapedContent} - -

+ ], + ]} + components={{ + pre: PreCode, + p: (pProps) =>

, + a: (aProps) => { + const href = aProps.href || ""; + const isInternal = /^\/#/i.test(href); + const target = isInternal ? "_self" : aProps.target ?? "_blank"; + return ; + }, + }} + > + {escapedContent} + ); } @@ -163,10 +160,10 @@ export function Markdown( fontSize?: number; parentRef?: RefObject; defaultShow?: boolean; - imageBase64?: string; } & React.DOMAttributes, ) { const mdRef = useRef(null); + return (

) : ( - + )}
); diff --git a/app/constant.ts b/app/constant.ts index a23cea913..ebc4d3ed4 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -58,7 +58,6 @@ export const NARROW_SIDEBAR_WIDTH = 100; export const ACCESS_CODE_PREFIX = "nk-"; export const LAST_INPUT_KEY = "last-input"; -export const LAST_INPUT_IMAGE_KEY = "last-input-image"; export const UNFINISHED_INPUT = (id: string) => "unfinished-input-" + id; export const STORAGE_KEY = "chatgpt-next-web"; diff --git a/app/styles/markdown.scss b/app/styles/markdown.scss index 057c3a4cf..672167d4d 100644 --- a/app/styles/markdown.scss +++ b/app/styles/markdown.scss @@ -90,7 +90,7 @@ --color-danger-fg: #f85149; } -.markdown-body div { +.markdown-body { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; margin: 0; @@ -119,18 +119,18 @@ } } -.markdown-body div .octicon { +.markdown-body .octicon { display: inline-block; fill: currentColor; vertical-align: text-bottom; } -.markdown-body div h1:hover .anchor .octicon-link:before, -.markdown-body div h2:hover .anchor .octicon-link:before, -.markdown-body div h3:hover .anchor .octicon-link:before, -.markdown-body div h4:hover .anchor .octicon-link:before, -.markdown-body div h5:hover .anchor .octicon-link:before, -.markdown-body div h6:hover .anchor .octicon-link:before { +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { width: 16px; height: 16px; content: " "; @@ -140,41 +140,41 @@ mask-image: url("data:image/svg+xml,"); } -.markdown-body div details, -.markdown-body div figcaption, -.markdown-body div figure { +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { display: block; } -.markdown-body div summary { +.markdown-body summary { display: list-item; } -.markdown-body div [hidden] { +.markdown-body [hidden] { display: none !important; } -.markdown-body div a { +.markdown-body a { background-color: transparent; color: var(--color-accent-fg); text-decoration: none; } -.markdown-body div abbr[title] { +.markdown-body abbr[title] { border-bottom: none; text-decoration: underline dotted; } -.markdown-body div b, -.markdown-body div strong { +.markdown-body b, +.markdown-body strong { font-weight: var(--base-text-weight-semibold, 600); } -.markdown-body div dfn { +.markdown-body dfn { font-style: italic; } -.markdown-body div h1 { +.markdown-body h1 { margin: 0.67em 0; font-weight: var(--base-text-weight-semibold, 600); padding-bottom: 0.3em; @@ -182,51 +182,51 @@ border-bottom: 1px solid var(--color-border-muted); } -.markdown-body div mark { +.markdown-body mark { background-color: var(--color-attention-subtle); color: var(--color-fg-default); } -.markdown-body div small { +.markdown-body small { font-size: 90%; } -.markdown-body div sub, -.markdown-body div sup { +.markdown-body sub, +.markdown-body sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } -.markdown-body div sub { +.markdown-body sub { bottom: -0.25em; } -.markdown-body div sup { +.markdown-body sup { top: -0.5em; } -.markdown-body div img { +.markdown-body img { border-style: none; max-width: 100%; box-sizing: content-box; background-color: var(--color-canvas-default); } -.markdown-body div code, -.markdown-body div kbd, -.markdown-body div pre, -.markdown-body div samp { +.markdown-body code, +.markdown-body kbd, +.markdown-body pre, +.markdown-body samp { font-family: monospace; font-size: 1em; } -.markdown-body div figure { +.markdown-body figure { margin: 1em 40px; } -.markdown-body div hr { +.markdown-body hr { box-sizing: content-box; overflow: hidden; background: transparent; @@ -238,7 +238,7 @@ border: 0; } -.markdown-body div input { +.markdown-body input { font: inherit; margin: 0; overflow: visible; @@ -247,59 +247,59 @@ line-height: inherit; } -.markdown-body div [type="button"], -.markdown-body div [type="reset"], -.markdown-body div [type="submit"] { +.markdown-body [type="button"], +.markdown-body [type="reset"], +.markdown-body [type="submit"] { -webkit-appearance: button; } -.markdown-body div [type="checkbox"], -.markdown-body div [type="radio"] { +.markdown-body [type="checkbox"], +.markdown-body [type="radio"] { box-sizing: border-box; padding: 0; } -.markdown-body div [type="number"]::-webkit-inner-spin-button, -.markdown-body div [type="number"]::-webkit-outer-spin-button { +.markdown-body [type="number"]::-webkit-inner-spin-button, +.markdown-body [type="number"]::-webkit-outer-spin-button { height: auto; } -.markdown-body div [type="search"]::-webkit-search-cancel-button, -.markdown-body div [type="search"]::-webkit-search-decoration { +.markdown-body [type="search"]::-webkit-search-cancel-button, +.markdown-body [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } -.markdown-body div ::-webkit-input-placeholder { +.markdown-body ::-webkit-input-placeholder { color: inherit; opacity: 0.54; } -.markdown-body div ::-webkit-file-upload-button { +.markdown-body ::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; } -.markdown-body div a:hover { +.markdown-body a:hover { text-decoration: underline; } -.markdown-body div ::placeholder { +.markdown-body ::placeholder { color: var(--color-fg-subtle); opacity: 1; } -.markdown-body div hr::before { +.markdown-body hr::before { display: table; content: ""; } -.markdown-body div hr::after { +.markdown-body hr::after { display: table; clear: both; content: ""; } -.markdown-body div table { +.markdown-body table { border-spacing: 0; border-collapse: collapse; display: block; @@ -308,54 +308,54 @@ overflow: auto; } -.markdown-body div td, -.markdown-body div th { +.markdown-body td, +.markdown-body th { padding: 0; } -.markdown-body div details summary { +.markdown-body details summary { cursor: pointer; } -.markdown-body div details:not([open]) > *:not(summary) { +.markdown-body details:not([open]) > *:not(summary) { display: none !important; } -.markdown-body div a:focus, -.markdown-body div [role="button"]:focus, -.markdown-body div input[type="radio"]:focus, -.markdown-body div input[type="checkbox"]:focus { +.markdown-body a:focus, +.markdown-body [role="button"]:focus, +.markdown-body input[type="radio"]:focus, +.markdown-body input[type="checkbox"]:focus { outline: 2px solid var(--color-accent-fg); outline-offset: -2px; box-shadow: none; } -.markdown-body div a:focus:not(:focus-visible), -.markdown-body div [role="button"]:focus:not(:focus-visible), -.markdown-body div input[type="radio"]:focus:not(:focus-visible), -.markdown-body div input[type="checkbox"]:focus:not(:focus-visible) { +.markdown-body a:focus:not(:focus-visible), +.markdown-body [role="button"]:focus:not(:focus-visible), +.markdown-body input[type="radio"]:focus:not(:focus-visible), +.markdown-body input[type="checkbox"]:focus:not(:focus-visible) { outline: solid 1px transparent; } -.markdown-body div a:focus-visible, -.markdown-body div [role="button"]:focus-visible, -.markdown-body div input[type="radio"]:focus-visible, -.markdown-body div input[type="checkbox"]:focus-visible { +.markdown-body a:focus-visible, +.markdown-body [role="button"]:focus-visible, +.markdown-body input[type="radio"]:focus-visible, +.markdown-body input[type="checkbox"]:focus-visible { outline: 2px solid var(--color-accent-fg); outline-offset: -2px; box-shadow: none; } -.markdown-body div a:not([class]):focus, -.markdown-body div a:not([class]):focus-visible, -.markdown-body div input[type="radio"]:focus, -.markdown-body div input[type="radio"]:focus-visible, -.markdown-body div input[type="checkbox"]:focus, -.markdown-body div input[type="checkbox"]:focus-visible { +.markdown-body a:not([class]):focus, +.markdown-body a:not([class]):focus-visible, +.markdown-body input[type="radio"]:focus, +.markdown-body input[type="radio"]:focus-visible, +.markdown-body input[type="checkbox"]:focus, +.markdown-body input[type="checkbox"]:focus-visible { outline-offset: 0; } -.markdown-body div kbd { +.markdown-body kbd { display: inline-block; padding: 3px 5px; font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, @@ -370,90 +370,90 @@ box-shadow: inset 0 -1px 0 var(--color-neutral-muted); } -.markdown-body div h1, -.markdown-body div h2, -.markdown-body div h3, -.markdown-body div h4, -.markdown-body div h5, -.markdown-body div h6 { +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { margin-top: 24px; margin-bottom: 16px; font-weight: var(--base-text-weight-semibold, 600); line-height: 1.25; } -.markdown-body div h2 { +.markdown-body h2 { font-weight: var(--base-text-weight-semibold, 600); padding-bottom: 0.3em; font-size: 1.5em; border-bottom: 1px solid var(--color-border-muted); } -.markdown-body div h3 { +.markdown-body h3 { font-weight: var(--base-text-weight-semibold, 600); font-size: 1.25em; } -.markdown-body div h4 { +.markdown-body h4 { font-weight: var(--base-text-weight-semibold, 600); font-size: 1em; } -.markdown-body div h5 { +.markdown-body h5 { font-weight: var(--base-text-weight-semibold, 600); font-size: 0.875em; } -.markdown-body div h6 { +.markdown-body h6 { font-weight: var(--base-text-weight-semibold, 600); font-size: 0.85em; color: var(--color-fg-muted); } -.markdown-body div p { +.markdown-body p { margin-top: 0; margin-bottom: 10px; } -.markdown-body div blockquote { +.markdown-body blockquote { margin: 0; padding: 0 1em; color: var(--color-fg-muted); border-left: 0.25em solid var(--color-border-default); } -.markdown-body div ul, -.markdown-body div ol { +.markdown-body ul, +.markdown-body ol { margin-top: 0; margin-bottom: 0; padding-left: 2em; } -.markdown-body div ol ol, -.markdown-body div ul ol { +.markdown-body ol ol, +.markdown-body ul ol { list-style-type: lower-roman; } -.markdown-body div ul ul ol, -.markdown-body div ul ol ol, -.markdown-body div ol ul ol, -.markdown-body div ol ol ol { +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { list-style-type: lower-alpha; } -.markdown-body div dd { +.markdown-body dd { margin-left: 0; } -.markdown-body div tt, -.markdown-body div code, -.markdown-body div samp { +.markdown-body tt, +.markdown-body code, +.markdown-body samp { font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace; font-size: 12px; } -.markdown-body div pre { +.markdown-body pre { margin-top: 0; margin-bottom: 0; font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, @@ -462,15 +462,15 @@ word-wrap: normal; } -.markdown-body div .octicon { +.markdown-body .octicon { display: inline-block; overflow: visible !important; vertical-align: text-bottom; fill: currentColor; } -.markdown-body div input::-webkit-outer-spin-button, -.markdown-body div input::-webkit-inner-spin-button { +.markdown-body input::-webkit-outer-spin-button, +.markdown-body input::-webkit-inner-spin-button { margin: 0; -webkit-appearance: none; appearance: none; @@ -487,174 +487,174 @@ content: ""; } -.markdown-body div > *:first-child { +.markdown-body > *:first-child { margin-top: 0 !important; } -.markdown-body div > *:last-child { +.markdown-body > *:last-child { margin-bottom: 0 !important; } -.markdown-body div a:not([href]) { +.markdown-body a:not([href]) { color: inherit; text-decoration: none; } -.markdown-body div .absent { +.markdown-body .absent { color: var(--color-danger-fg); } -.markdown-body div .anchor { +.markdown-body .anchor { float: left; padding-right: 4px; margin-left: -20px; line-height: 1; } -.markdown-body div .anchor:focus { +.markdown-body .anchor:focus { outline: none; } -.markdown-body div p, -.markdown-body div blockquote, -.markdown-body div ul, -.markdown-body div ol, -.markdown-body div dl, -.markdown-body div table, -.markdown-body div pre, -.markdown-body div details { +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre, +.markdown-body details { margin-top: 0; margin-bottom: 16px; } -.markdown-body div blockquote > :first-child { +.markdown-body blockquote > :first-child { margin-top: 0; } -.markdown-body div blockquote > :last-child { +.markdown-body blockquote > :last-child { margin-bottom: 0; } -.markdown-body div h1 .octicon-link, -.markdown-body div h2 .octicon-link, -.markdown-body div h3 .octicon-link, -.markdown-body div h4 .octicon-link, -.markdown-body div h5 .octicon-link, -.markdown-body div h6 .octicon-link { +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { color: var(--color-fg-default); vertical-align: middle; visibility: hidden; } -.markdown-body div h1:hover .anchor, -.markdown-body div h2:hover .anchor, -.markdown-body div h3:hover .anchor, -.markdown-body div h4:hover .anchor, -.markdown-body div h5:hover .anchor, -.markdown-body div h6:hover .anchor { +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { text-decoration: none; } -.markdown-body div h1:hover .anchor .octicon-link, -.markdown-body div h2:hover .anchor .octicon-link, -.markdown-body div h3:hover .anchor .octicon-link, -.markdown-body div h4:hover .anchor .octicon-link, -.markdown-body div h5:hover .anchor .octicon-link, -.markdown-body div h6:hover .anchor .octicon-link { +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { visibility: visible; } -.markdown-body div h1 tt, -.markdown-body div h1 code, -.markdown-body div h2 tt, -.markdown-body div h2 code, -.markdown-body div h3 tt, -.markdown-body div h3 code, -.markdown-body div h4 tt, -.markdown-body div h4 code, -.markdown-body div h5 tt, -.markdown-body div h5 code, -.markdown-body div h6 tt, -.markdown-body div h6 code { +.markdown-body h1 tt, +.markdown-body h1 code, +.markdown-body h2 tt, +.markdown-body h2 code, +.markdown-body h3 tt, +.markdown-body h3 code, +.markdown-body h4 tt, +.markdown-body h4 code, +.markdown-body h5 tt, +.markdown-body h5 code, +.markdown-body h6 tt, +.markdown-body h6 code { padding: 0 0.2em; font-size: inherit; } -.markdown-body div summary h1, -.markdown-body div summary h2, -.markdown-body div summary h3, -.markdown-body div summary h4, -.markdown-body div summary h5, -.markdown-body div summary h6 { +.markdown-body summary h1, +.markdown-body summary h2, +.markdown-body summary h3, +.markdown-body summary h4, +.markdown-body summary h5, +.markdown-body summary h6 { display: inline-block; } -.markdown-body div summary h1 .anchor, -.markdown-body div summary h2 .anchor, -.markdown-body div summary h3 .anchor, -.markdown-body div summary h4 .anchor, -.markdown-body div summary h5 .anchor, -.markdown-body div summary h6 .anchor { +.markdown-body summary h1 .anchor, +.markdown-body summary h2 .anchor, +.markdown-body summary h3 .anchor, +.markdown-body summary h4 .anchor, +.markdown-body summary h5 .anchor, +.markdown-body summary h6 .anchor { margin-left: -40px; } -.markdown-body div summary h1, -.markdown-body div summary h2 { +.markdown-body summary h1, +.markdown-body summary h2 { padding-bottom: 0; border-bottom: 0; } -.markdown-body div ul.no-list, -.markdown-body div ol.no-list { +.markdown-body ul.no-list, +.markdown-body ol.no-list { padding: 0; list-style-type: none; } -.markdown-body div ol[type="a"] { +.markdown-body ol[type="a"] { list-style-type: lower-alpha; } -.markdown-body div ol[type="A"] { +.markdown-body ol[type="A"] { list-style-type: upper-alpha; } -.markdown-body div ol[type="i"] { +.markdown-body ol[type="i"] { list-style-type: lower-roman; } -.markdown-body div ol[type="I"] { +.markdown-body ol[type="I"] { list-style-type: upper-roman; } -.markdown-body div ol[type="1"] { +.markdown-body ol[type="1"] { list-style-type: decimal; } -.markdown-body div div > ol:not([type]) { +.markdown-body div > ol:not([type]) { list-style-type: decimal; } -.markdown-body div ul ul, -.markdown-body div ul ol, -.markdown-body div ol ol, -.markdown-body div ol ul { +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { margin-top: 0; margin-bottom: 0; } -.markdown-body div li > p { +.markdown-body li > p { margin-top: 16px; } -.markdown-body div li + li { +.markdown-body li + li { margin-top: 0.25em; } -.markdown-body div dl { +.markdown-body dl { padding: 0; } -.markdown-body div dl dt { +.markdown-body dl dt { padding: 0; margin-top: 16px; font-size: 1em; @@ -662,54 +662,54 @@ font-weight: var(--base-text-weight-semibold, 600); } -.markdown-body div dl dd { +.markdown-body dl dd { padding: 0 16px; margin-bottom: 16px; } -.markdown-body div table th { +.markdown-body table th { font-weight: var(--base-text-weight-semibold, 600); } -.markdown-body div table th, -.markdown-body div table td { +.markdown-body table th, +.markdown-body table td { padding: 6px 13px; border: 1px solid var(--color-border-default); } -.markdown-body div table tr { +.markdown-body table tr { background-color: var(--color-canvas-default); border-top: 1px solid var(--color-border-muted); } -.markdown-body div table tr:nth-child(2n) { +.markdown-body table tr:nth-child(2n) { background-color: var(--color-canvas-subtle); } -.markdown-body div table img { +.markdown-body table img { background-color: transparent; } -.markdown-body div img[align="right"] { +.markdown-body img[align="right"] { padding-left: 20px; } -.markdown-body div img[align="left"] { +.markdown-body img[align="left"] { padding-right: 20px; } -.markdown-body div .emoji { +.markdown-body .emoji { max-width: none; vertical-align: text-top; background-color: transparent; } -.markdown-body div span.frame { +.markdown-body span.frame { display: block; overflow: hidden; } -.markdown-body div span.frame > span { +.markdown-body span.frame > span { display: block; float: left; width: auto; @@ -719,81 +719,81 @@ border: 1px solid var(--color-border-default); } -.markdown-body div span.frame span img { +.markdown-body span.frame span img { display: block; float: left; } -.markdown-body div span.frame span span { +.markdown-body span.frame span span { display: block; padding: 5px 0 0; clear: both; color: var(--color-fg-default); } -.markdown-body div span.align-center { +.markdown-body span.align-center { display: block; overflow: hidden; clear: both; } -.markdown-body div span.align-center > span { +.markdown-body span.align-center > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: center; } -.markdown-body div span.align-center span img { +.markdown-body span.align-center span img { margin: 0 auto; text-align: center; } -.markdown-body div span.align-right { +.markdown-body span.align-right { display: block; overflow: hidden; clear: both; } -.markdown-body div span.align-right > span { +.markdown-body span.align-right > span { display: block; margin: 13px 0 0; overflow: hidden; text-align: right; } -.markdown-body div span.align-right span img { +.markdown-body span.align-right span img { margin: 0; text-align: right; } -.markdown-body div span.float-left { +.markdown-body span.float-left { display: block; float: left; margin-right: 13px; overflow: hidden; } -.markdown-body div span.float-left span { +.markdown-body span.float-left span { margin: 13px 0 0; } -.markdown-body div span.float-right { +.markdown-body span.float-right { display: block; float: right; margin-left: 13px; overflow: hidden; } -.markdown-body div span.float-right > span { +.markdown-body span.float-right > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: right; } -.markdown-body div code, -.markdown-body div tt { +.markdown-body code, +.markdown-body tt { padding: 0.2em 0.4em; margin: 0; font-size: 85%; @@ -802,24 +802,24 @@ border-radius: 6px; } -.markdown-body div code br, -.markdown-body div tt br { +.markdown-body code br, +.markdown-body tt br { display: none; } -.markdown-body div del code { +.markdown-body del code { text-decoration: inherit; } -.markdown-body div samp { +.markdown-body samp { font-size: 85%; } -.markdown-body div pre code { +.markdown-body pre code { font-size: 100%; } -.markdown-body div pre > code { +.markdown-body pre > code { padding: 0; margin: 0; word-break: normal; @@ -828,17 +828,17 @@ border: 0; } -.markdown-body div .highlight { +.markdown-body .highlight { margin-bottom: 16px; } -.markdown-body div .highlight pre { +.markdown-body .highlight pre { margin-bottom: 0; word-break: normal; } -.markdown-body div .highlight pre, -.markdown-body div pre { +.markdown-body .highlight pre, +.markdown-body pre { padding: 16px 16px 8px 16px; overflow: auto; font-size: 85%; @@ -847,8 +847,8 @@ direction: ltr; } -.markdown-body div pre code, -.markdown-body div pre tt { +.markdown-body pre code, +.markdown-body pre tt { display: inline-block; max-width: 100%; padding: 0; @@ -860,8 +860,8 @@ border: 0; } -.markdown-body div .csv-data td, -.markdown-body div .csv-data th { +.markdown-body .csv-data td, +.markdown-body .csv-data th { padding: 5px; overflow: hidden; font-size: 12px; @@ -870,52 +870,52 @@ white-space: nowrap; } -.markdown-body div .csv-data .blob-num { +.markdown-body .csv-data .blob-num { padding: 10px 8px 9px; text-align: right; background: var(--color-canvas-default); border: 0; } -.markdown-body div .csv-data tr { +.markdown-body .csv-data tr { border-top: 0; } -.markdown-body div .csv-data th { +.markdown-body .csv-data th { font-weight: var(--base-text-weight-semibold, 600); background: var(--color-canvas-subtle); border-top: 0; } -.markdown-body div [data-footnote-ref]::before { +.markdown-body [data-footnote-ref]::before { content: "["; } -.markdown-body div [data-footnote-ref]::after { +.markdown-body [data-footnote-ref]::after { content: "]"; } -.markdown-body div .footnotes { +.markdown-body .footnotes { font-size: 12px; color: var(--color-fg-muted); border-top: 1px solid var(--color-border-default); } -.markdown-body div .footnotes ol { +.markdown-body .footnotes ol { padding-left: 16px; } -.markdown-body div .footnotes ol ul { +.markdown-body .footnotes ol ul { display: inline-block; padding-left: 16px; margin-top: 16px; } -.markdown-body div .footnotes li { +.markdown-body .footnotes li { position: relative; } -.markdown-body div .footnotes li:target::before { +.markdown-body .footnotes li:target::before { position: absolute; top: -8px; right: -8px; @@ -927,135 +927,135 @@ border-radius: 6px; } -.markdown-body div .footnotes li:target { +.markdown-body .footnotes li:target { color: var(--color-fg-default); } -.markdown-body div .footnotes .data-footnote-backref g-emoji { +.markdown-body .footnotes .data-footnote-backref g-emoji { font-family: monospace; } -.markdown-body div .pl-c { +.markdown-body .pl-c { color: var(--color-prettylights-syntax-comment); } -.markdown-body div .pl-c1, -.markdown-body div .pl-s .pl-v { +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { color: var(--color-prettylights-syntax-constant); } -.markdown-body div .pl-e, -.markdown-body div .pl-en { +.markdown-body .pl-e, +.markdown-body .pl-en { color: var(--color-prettylights-syntax-entity); } -.markdown-body div .pl-smi, -.markdown-body div .pl-s .pl-s1 { +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { color: var(--color-prettylights-syntax-storage-modifier-import); } -.markdown-body div .pl-ent { +.markdown-body .pl-ent { color: var(--color-prettylights-syntax-entity-tag); } -.markdown-body div .pl-k { +.markdown-body .pl-k { color: var(--color-prettylights-syntax-keyword); } -.markdown-body div .pl-s, -.markdown-body div .pl-pds, -.markdown-body div .pl-s .pl-pse .pl-s1, -.markdown-body div .pl-sr, -.markdown-body div .pl-sr .pl-cce, -.markdown-body div .pl-sr .pl-sre, -.markdown-body div .pl-sr .pl-sra { +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { color: var(--color-prettylights-syntax-string); } -.markdown-body div .pl-v, -.markdown-body div .pl-smw { +.markdown-body .pl-v, +.markdown-body .pl-smw { color: var(--color-prettylights-syntax-variable); } -.markdown-body div .pl-bu { +.markdown-body .pl-bu { color: var(--color-prettylights-syntax-brackethighlighter-unmatched); } -.markdown-body div .pl-ii { +.markdown-body .pl-ii { color: var(--color-prettylights-syntax-invalid-illegal-text); background-color: var(--color-prettylights-syntax-invalid-illegal-bg); } -.markdown-body div .pl-c2 { +.markdown-body .pl-c2 { color: var(--color-prettylights-syntax-carriage-return-text); background-color: var(--color-prettylights-syntax-carriage-return-bg); } -.markdown-body div .pl-sr .pl-cce { +.markdown-body .pl-sr .pl-cce { font-weight: bold; color: var(--color-prettylights-syntax-string-regexp); } -.markdown-body div .pl-ml { +.markdown-body .pl-ml { color: var(--color-prettylights-syntax-markup-list); } -.markdown-body div .pl-mh, -.markdown-body div .pl-mh .pl-en, -.markdown-body div .pl-ms { +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { font-weight: bold; color: var(--color-prettylights-syntax-markup-heading); } -.markdown-body div .pl-mi { +.markdown-body .pl-mi { font-style: italic; color: var(--color-prettylights-syntax-markup-italic); } -.markdown-body div .pl-mb { +.markdown-body .pl-mb { font-weight: bold; color: var(--color-prettylights-syntax-markup-bold); } -.markdown-body div .pl-md { +.markdown-body .pl-md { color: var(--color-prettylights-syntax-markup-deleted-text); background-color: var(--color-prettylights-syntax-markup-deleted-bg); } -.markdown-body div .pl-mi1 { +.markdown-body .pl-mi1 { color: var(--color-prettylights-syntax-markup-inserted-text); background-color: var(--color-prettylights-syntax-markup-inserted-bg); } -.markdown-body div .pl-mc { +.markdown-body .pl-mc { color: var(--color-prettylights-syntax-markup-changed-text); background-color: var(--color-prettylights-syntax-markup-changed-bg); } -.markdown-body div .pl-mi2 { +.markdown-body .pl-mi2 { color: var(--color-prettylights-syntax-markup-ignored-text); background-color: var(--color-prettylights-syntax-markup-ignored-bg); } -.markdown-body div .pl-mdr { +.markdown-body .pl-mdr { font-weight: bold; color: var(--color-prettylights-syntax-meta-diff-range); } -.markdown-body div .pl-ba { +.markdown-body .pl-ba { color: var(--color-prettylights-syntax-brackethighlighter-angle); } -.markdown-body div .pl-sg { +.markdown-body .pl-sg { color: var(--color-prettylights-syntax-sublimelinter-gutter-mark); } -.markdown-body div .pl-corl { +.markdown-body .pl-corl { text-decoration: underline; color: var(--color-prettylights-syntax-constant-other-reference-link); } -.markdown-body div g-emoji { +.markdown-body g-emoji { display: inline-block; min-width: 1ch; font-family: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; @@ -1066,45 +1066,45 @@ vertical-align: -0.075em; } -.markdown-body div g-emoji img { +.markdown-body g-emoji img { width: 1em; height: 1em; } -.markdown-body div .task-list-item { +.markdown-body .task-list-item { list-style-type: none; } -.markdown-body div .task-list-item label { +.markdown-body .task-list-item label { font-weight: var(--base-text-weight-normal, 400); } -.markdown-body div .task-list-item.enabled label { +.markdown-body .task-list-item.enabled label { cursor: pointer; } -.markdown-body div .task-list-item + .task-list-item { +.markdown-body .task-list-item + .task-list-item { margin-top: 4px; } -.markdown-body div .task-list-item .handle { +.markdown-body .task-list-item .handle { display: none; } -.markdown-body div .task-list-item-checkbox { +.markdown-body .task-list-item-checkbox { margin: 0 0.2em 0.25em -1.4em; vertical-align: middle; } -.markdown-body div .contains-task-list:dir(rtl) .task-list-item-checkbox { +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { margin: 0 -1.6em 0.25em 0.2em; } -.markdown-body div .contains-task-list { +.markdown-body .contains-task-list { position: relative; } -.markdown-body div .contains-task-list:hover .task-list-item-convert-container, +.markdown-body .contains-task-list:hover .task-list-item-convert-container, .markdown-body .contains-task-list:focus-within .task-list-item-convert-container { @@ -1115,11 +1115,11 @@ clip: auto; } -.markdown-body div ::-webkit-calendar-picker-indicator { +.markdown-body ::-webkit-calendar-picker-indicator { filter: invert(50%); } -.markdown-body div .mermaid { +.markdown-body .mermaid { border: var(--border-in-light); margin-bottom: 10px; border-radius: 4px;