diff options
| author | Dax Raad <[email protected]> | 2025-11-06 13:03:02 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-11-06 13:03:12 -0500 |
| commit | 1ea3a8eb9beeb7d510fd29164ea741acec1ee04d (patch) | |
| tree | 22c35a0003c6c2cfb998431f8e5180879cbab9d3 /packages/web/src | |
| parent | 8729edc5e059a9a29346044b016a6e05d9aca835 (diff) | |
| download | opencode-1ea3a8eb9beeb7d510fd29164ea741acec1ee04d.tar.gz opencode-1ea3a8eb9beeb7d510fd29164ea741acec1ee04d.zip | |
big format
Diffstat (limited to 'packages/web/src')
| -rw-r--r-- | packages/web/src/components/Share.tsx | 46 | ||||
| -rw-r--r-- | packages/web/src/components/icons/index.tsx | 9 | ||||
| -rw-r--r-- | packages/web/src/components/share/common.tsx | 7 | ||||
| -rw-r--r-- | packages/web/src/components/share/content-code.tsx | 6 | ||||
| -rw-r--r-- | packages/web/src/components/share/content-diff.tsx | 20 | ||||
| -rw-r--r-- | packages/web/src/components/share/copy-button.tsx | 6 | ||||
| -rw-r--r-- | packages/web/src/components/share/part.tsx | 115 | ||||
| -rw-r--r-- | packages/web/src/content/docs/1-0.mdx | 3 | ||||
| -rw-r--r-- | packages/web/src/content/docs/index.mdx | 24 | ||||
| -rw-r--r-- | packages/web/src/content/docs/permissions.mdx | 1 | ||||
| -rw-r--r-- | packages/web/src/content/docs/rules.mdx | 6 | ||||
| -rw-r--r-- | packages/web/src/content/docs/troubleshooting.mdx | 2 | ||||
| -rw-r--r-- | packages/web/src/styles/custom.css | 29 |
13 files changed, 196 insertions, 78 deletions
diff --git a/packages/web/src/components/Share.tsx b/packages/web/src/components/Share.tsx index 062449712..486b6e44b 100644 --- a/packages/web/src/components/Share.tsx +++ b/packages/web/src/components/Share.tsx @@ -1,4 +1,14 @@ -import { For, Show, onMount, Suspense, onCleanup, createMemo, createSignal, SuspenseList, createEffect } from "solid-js" +import { + For, + Show, + onMount, + Suspense, + onCleanup, + createMemo, + createSignal, + SuspenseList, + createEffect, +} from "solid-js" import { DateTime } from "luxon" import { createStore, reconcile, unwrap } from "solid-js/store" import { IconArrowDown } from "./icons" @@ -66,8 +76,13 @@ export default function Share(props: { id: string; api: string; info: Session.In }, messages: {}, }) - const messages = createMemo(() => Object.values(store.messages).toSorted((a, b) => a.id?.localeCompare(b.id))) - const [connectionStatus, setConnectionStatus] = createSignal<[Status, string?]>(["disconnected", "Disconnected"]) + const messages = createMemo(() => + Object.values(store.messages).toSorted((a, b) => a.id?.localeCompare(b.id)), + ) + const [connectionStatus, setConnectionStatus] = createSignal<[Status, string?]>([ + "disconnected", + "Disconnected", + ]) createEffect(() => { console.log(unwrap(store)) }) @@ -330,7 +345,9 @@ export default function Share(props: { id: string; api: string; info: Session.In </ul> <div data-component="header-time" - title={DateTime.fromMillis(data().created || 0).toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS)} + title={DateTime.fromMillis(data().created || 0).toLocaleString( + DateTime.DATETIME_FULL_WITH_SECONDS, + )} > {DateTime.fromMillis(data().created || 0).toLocaleString(DateTime.DATETIME_MED)} </div> @@ -352,7 +369,10 @@ export default function Share(props: { id: string; api: string; info: Session.In if (x.type === "text" && x.synthetic === true) return false if (x.type === "tool" && x.tool === "todoread") return false if (x.type === "text" && !x.text) return false - if (x.type === "tool" && (x.state.status === "pending" || x.state.status === "running")) + if ( + x.type === "tool" && + (x.state.status === "pending" || x.state.status === "running") + ) return false return true }), @@ -364,7 +384,8 @@ export default function Share(props: { id: string; api: string; info: Session.In {(part, partIndex) => { const last = createMemo( () => - data().messages.length === msgIndex() + 1 && filteredParts().length === partIndex() + 1, + data().messages.length === msgIndex() + 1 && + filteredParts().length === partIndex() + 1, ) onMount(() => { @@ -381,7 +402,9 @@ export default function Share(props: { id: string; api: string; info: Session.In } }) - return <Part last={last()} part={part} index={partIndex()} message={msg} /> + return ( + <Part last={last()} part={part} index={partIndex()} message={msg} /> + ) }} </For> </Suspense> @@ -406,7 +429,11 @@ export default function Share(props: { id: string; api: string; info: Session.In </li> <li> <span data-element-label>Input Tokens</span> - {data().tokens.input ? <span>{data().tokens.input}</span> : <span data-placeholder>—</span>} + {data().tokens.input ? ( + <span>{data().tokens.input}</span> + ) : ( + <span data-placeholder>—</span> + )} </li> <li> <span data-element-label>Output Tokens</span> @@ -560,7 +587,8 @@ export function fromV1(v1: Message.Info): MessageWithParts { } } - const { title, time, ...metadata } = v1.metadata.tool[part.toolInvocation.toolCallId] + const { title, time, ...metadata } = + v1.metadata.tool[part.toolInvocation.toolCallId] if (part.toolInvocation.state === "call") { return { status: "running", diff --git a/packages/web/src/components/icons/index.tsx b/packages/web/src/components/icons/index.tsx index 62445611f..9aef7a927 100644 --- a/packages/web/src/components/icons/index.tsx +++ b/packages/web/src/components/icons/index.tsx @@ -4418,7 +4418,14 @@ export function IconMultiSelect(props: JSX.SvgSVGAttributes<SVGSVGElement>) { } export function IconSettings(props: JSX.SvgSVGAttributes<SVGSVGElement>) { return ( - <svg {...props} width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> + <svg + {...props} + width="16" + height="16" + viewBox="0 0 16 16" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > <g clip-path="url(#clip0_1256_16163)"> <path fill-rule="evenodd" diff --git a/packages/web/src/components/share/common.tsx b/packages/web/src/components/share/common.tsx index cab2dbdb0..9520516c6 100644 --- a/packages/web/src/components/share/common.tsx +++ b/packages/web/src/components/share/common.tsx @@ -10,7 +10,12 @@ export function AnchorIcon(props: AnchorProps) { const [copied, setCopied] = createSignal(false) return ( - <div {...rest} data-element-anchor title="Link to this message" data-status={copied() ? "copied" : ""}> + <div + {...rest} + data-element-anchor + title="Link to this message" + data-status={copied() ? "copied" : ""} + > <a href={`#${local.id}`} onClick={(e) => { diff --git a/packages/web/src/components/share/content-code.tsx b/packages/web/src/components/share/content-code.tsx index 2f383b8be..0f9d28fa3 100644 --- a/packages/web/src/components/share/content-code.tsx +++ b/packages/web/src/components/share/content-code.tsx @@ -26,7 +26,11 @@ export function ContentCode(props: Props) { ) return ( <Suspense> - <div innerHTML={html()} class={style.root} data-flush={props.flush === true ? true : undefined} /> + <div + innerHTML={html()} + class={style.root} + data-flush={props.flush === true ? true : undefined} + /> </Suspense> ) } diff --git a/packages/web/src/components/share/content-diff.tsx b/packages/web/src/components/share/content-diff.tsx index 9ccd554d0..79c2723cb 100644 --- a/packages/web/src/components/share/content-diff.tsx +++ b/packages/web/src/components/share/content-diff.tsx @@ -124,7 +124,9 @@ export function ContentDiff(props: Props) { // Collect consecutive modified/removed/added rows while ( i < currentRows.length && - (currentRows[i].type === "modified" || currentRows[i].type === "removed" || currentRows[i].type === "added") + (currentRows[i].type === "modified" || + currentRows[i].type === "removed" || + currentRows[i].type === "added") ) { const row = currentRows[i] if (row.left && (row.type === "removed" || row.type === "modified")) { @@ -162,10 +164,16 @@ export function ContentDiff(props: Props) { <div data-component="desktop"> {rows().map((r) => ( <div data-component="diff-row" data-type={r.type}> - <div data-slot="before" data-diff-type={r.type === "removed" || r.type === "modified" ? "removed" : ""}> + <div + data-slot="before" + data-diff-type={r.type === "removed" || r.type === "modified" ? "removed" : ""} + > <ContentCode code={r.left} flush lang={props.lang} /> </div> - <div data-slot="after" data-diff-type={r.type === "added" || r.type === "modified" ? "added" : ""}> + <div + data-slot="after" + data-diff-type={r.type === "added" || r.type === "modified" ? "added" : ""} + > <ContentCode code={r.right} lang={props.lang} flush /> </div> </div> @@ -176,7 +184,11 @@ export function ContentDiff(props: Props) { {mobileRows().map((block) => ( <div data-component="diff-block" data-type={block.type}> {block.lines.map((line) => ( - <div data-diff-type={block.type === "removed" ? "removed" : block.type === "added" ? "added" : ""}> + <div + data-diff-type={ + block.type === "removed" ? "removed" : block.type === "added" ? "added" : "" + } + > <ContentCode code={line} lang={props.lang} flush /> </div> ))} diff --git a/packages/web/src/components/share/copy-button.tsx b/packages/web/src/components/share/copy-button.tsx index 892d5553f..6f51bb4d8 100644 --- a/packages/web/src/components/share/copy-button.tsx +++ b/packages/web/src/components/share/copy-button.tsx @@ -21,7 +21,11 @@ export function CopyButton(props: CopyButtonProps) { return ( <div data-component="copy-button" class={styles.root}> <button type="button" onClick={handleCopyClick} data-copied={copied() ? true : undefined}> - {copied() ? <IconCheckCircle width={16} height={16} /> : <IconClipboard width={16} height={16} />} + {copied() ? ( + <IconCheckCircle width={16} height={16} /> + ) : ( + <IconClipboard width={16} height={16} /> + )} </button> </div> ) diff --git a/packages/web/src/components/share/part.tsx b/packages/web/src/components/share/part.tsx index f7a6a9304..6ad18273b 100644 --- a/packages/web/src/components/share/part.tsx +++ b/packages/web/src/components/share/part.tsx @@ -1,6 +1,15 @@ import map from "lang-map" import { DateTime } from "luxon" -import { For, Show, Match, Switch, type JSX, createMemo, createSignal, type ParentProps } from "solid-js" +import { + For, + Show, + Match, + Switch, + type JSX, + createMemo, + createSignal, + type ParentProps, +} from "solid-js" import { IconHashtag, IconSparkles, @@ -19,7 +28,14 @@ import { IconMagnifyingGlass, IconDocumentMagnifyingGlass, } from "../icons" -import { IconMeta, IconRobot, IconOpenAI, IconGemini, IconAnthropic, IconBrain } from "../icons/custom" +import { + IconMeta, + IconRobot, + IconOpenAI, + IconGemini, + IconAnthropic, + IconBrain, +} from "../icons/custom" import { ContentCode } from "./content-code" import { ContentDiff } from "./content-diff" import { ContentText } from "./content-text" @@ -79,7 +95,11 @@ export function Part(props: PartProps) { <IconPaperClip width={18} height={18} /> </Match> <Match - when={props.part.type === "step-start" && props.message.role === "assistant" && props.message.modelID} + when={ + props.part.type === "step-start" && + props.message.role === "assistant" && + props.message.modelID + } > {(model) => <ProviderIcon model={model()} size={18} />} </Match> @@ -147,7 +167,9 @@ export function Part(props: PartProps) { DateTime.DATETIME_FULL_WITH_SECONDS, )} > - {DateTime.fromMillis(props.message.time.completed).toLocaleString(DateTime.DATETIME_MED)} + {DateTime.fromMillis(props.message.time.completed).toLocaleString( + DateTime.DATETIME_MED, + )} </Footer> )} </div> @@ -343,7 +365,10 @@ function getShikiLang(filename: string) { return type ? (overrides[type] ?? type) : "plaintext" } -function getDiagnostics(diagnosticsByFile: Record<string, Diagnostic[]>, currentFile: string): JSX.Element[] { +function getDiagnostics( + diagnosticsByFile: Record<string, Diagnostic[]>, + currentFile: string, +): JSX.Element[] { const result: JSX.Element[] = [] if (diagnosticsByFile === undefined || diagnosticsByFile[currentFile] === undefined) return result @@ -397,7 +422,9 @@ export function TodoWriteTool(props: ToolProps) { completed: 2, } const todos = createMemo(() => - ((props.state.input?.todos ?? []) as Todo[]).slice().sort((a, b) => priority[a.status] - priority[b.status]), + ((props.state.input?.todos ?? []) as Todo[]) + .slice() + .sort((a, b) => priority[a.status] - priority[b.status]), ) const starting = () => todos().every((t: Todo) => t.status === "pending") const finished = () => todos().every((t: Todo) => t.status === "completed") @@ -439,13 +466,23 @@ export function GrepTool(props: ToolProps) { <Switch> <Match when={props.state.metadata?.matches && props.state.metadata?.matches > 0}> <ResultsButton - showCopy={props.state.metadata?.matches === 1 ? "1 match" : `${props.state.metadata?.matches} matches`} + showCopy={ + props.state.metadata?.matches === 1 + ? "1 match" + : `${props.state.metadata?.matches} matches` + } > <ContentText expand compact text={props.state.output} /> </ResultsButton> </Match> <Match when={props.state.output}> - <ContentText expand compact text={props.state.output} data-size="sm" data-color="dimmed" /> + <ContentText + expand + compact + text={props.state.output} + data-size="sm" + data-color="dimmed" + /> </Match> </Switch> </div> @@ -505,7 +542,9 @@ export function WebFetchTool(props: ToolProps) { } export function ReadTool(props: ToolProps) { - const filePath = createMemo(() => stripWorkingDirectory(props.state.input?.filePath, props.message.path.cwd)) + const filePath = createMemo(() => + stripWorkingDirectory(props.state.input?.filePath, props.message.path.cwd), + ) return ( <> @@ -522,7 +561,10 @@ export function ReadTool(props: ToolProps) { </Match> <Match when={typeof props.state.metadata?.preview === "string"}> <ResultsButton showCopy="Show preview" hideCopy="Hide preview"> - <ContentCode lang={getShikiLang(filePath() || "")} code={props.state.metadata?.preview} /> + <ContentCode + lang={getShikiLang(filePath() || "")} + code={props.state.metadata?.preview} + /> </ResultsButton> </Match> <Match when={typeof props.state.metadata?.preview !== "string" && props.state.output}> @@ -537,8 +579,12 @@ export function ReadTool(props: ToolProps) { } export function WriteTool(props: ToolProps) { - const filePath = createMemo(() => stripWorkingDirectory(props.state.input?.filePath, props.message.path.cwd)) - const diagnostics = createMemo(() => getDiagnostics(props.state.metadata?.diagnostics, props.state.input.filePath)) + const filePath = createMemo(() => + stripWorkingDirectory(props.state.input?.filePath, props.message.path.cwd), + ) + const diagnostics = createMemo(() => + getDiagnostics(props.state.metadata?.diagnostics, props.state.input.filePath), + ) return ( <> @@ -558,7 +604,10 @@ export function WriteTool(props: ToolProps) { </Match> <Match when={props.state.input?.content}> <ResultsButton showCopy="Show contents" hideCopy="Hide contents"> - <ContentCode lang={getShikiLang(filePath() || "")} code={props.state.input?.content} /> + <ContentCode + lang={getShikiLang(filePath() || "")} + code={props.state.input?.content} + /> </ResultsButton> </Match> </Switch> @@ -568,8 +617,12 @@ export function WriteTool(props: ToolProps) { } export function EditTool(props: ToolProps) { - const filePath = createMemo(() => stripWorkingDirectory(props.state.input.filePath, props.message.path.cwd)) - const diagnostics = createMemo(() => getDiagnostics(props.state.metadata?.diagnostics, props.state.input.filePath)) + const filePath = createMemo(() => + stripWorkingDirectory(props.state.input.filePath, props.message.path.cwd), + ) + const diagnostics = createMemo(() => + getDiagnostics(props.state.metadata?.diagnostics, props.state.input.filePath), + ) return ( <> @@ -586,7 +639,10 @@ export function EditTool(props: ToolProps) { </Match> <Match when={props.state.metadata?.diff}> <div data-component="diff"> - <ContentDiff diff={props.state.metadata?.diff} lang={getShikiLang(filePath() || "")} /> + <ContentDiff + diff={props.state.metadata?.diff} + lang={getShikiLang(filePath() || "")} + /> </div> </Match> </Switch> @@ -619,7 +675,11 @@ export function GlobTool(props: ToolProps) { <Match when={props.state.metadata?.count && props.state.metadata?.count > 0}> <div data-component="tool-result"> <ResultsButton - showCopy={props.state.metadata?.count === 1 ? "1 result" : `${props.state.metadata?.count} results`} + showCopy={ + props.state.metadata?.count === 1 + ? "1 result" + : `${props.state.metadata?.count} results` + } > <ContentText expand compact text={props.state.output} /> </ResultsButton> @@ -642,7 +702,12 @@ function ResultsButton(props: ResultsButtonProps) { return ( <> - <button type="button" data-component="button-text" data-more onClick={() => setShow((e) => !e)}> + <button + type="button" + data-component="button-text" + data-more + onClick={() => setShow((e) => !e)} + > <span>{show() ? props.hideCopy || "Hide results" : props.showCopy || "Show results"}</span> <span data-slot="icon"> <Show when={show()} fallback={<IconChevronRight width={11} height={11} />}> @@ -668,7 +733,11 @@ function Footer(props: ParentProps<{ title: string }>) { } function ToolFooter(props: { time: number }) { - return props.time > MIN_DURATION && <Footer title={`${props.time}ms`}>{formatDuration(props.time)}</Footer> + return ( + props.time > MIN_DURATION && ( + <Footer title={`${props.time}ms`}>{formatDuration(props.time)}</Footer> + ) + ) } function TaskTool(props: ToolProps) { @@ -709,7 +778,13 @@ export function FallbackTool(props: ToolProps) { <Match when={props.state.output}> <div data-component="tool-result"> <ResultsButton> - <ContentText expand compact text={props.state.output} data-size="sm" data-color="dimmed" /> + <ContentText + expand + compact + text={props.state.output} + data-size="sm" + data-color="dimmed" + /> </ResultsButton> </div> </Match> diff --git a/packages/web/src/content/docs/1-0.mdx b/packages/web/src/content/docs/1-0.mdx index 49db53d72..6737482a7 100644 --- a/packages/web/src/content/docs/1-0.mdx +++ b/packages/web/src/content/docs/1-0.mdx @@ -16,13 +16,14 @@ The new TUI works like the old one since it connects to the same opencode server You should not be autoupgraded to 1.0 if you are currently using a previous version. However some older versions of OpenCode always grab latest. - To upgrade manually, run + ```bash $ opencode upgrade 1.0.0 ``` To downgrade back to 0.x, run + ```bash $ opencode upgrade 0.15.31 ``` diff --git a/packages/web/src/content/docs/index.mdx b/packages/web/src/content/docs/index.mdx index f6d2b3129..33658b135 100644 --- a/packages/web/src/content/docs/index.mdx +++ b/packages/web/src/content/docs/index.mdx @@ -42,26 +42,10 @@ You can also install it with the following commands: - **Using Node.js** <Tabs> - <TabItem label="npm"> - ```bash - npm install -g opencode-ai - ``` - </TabItem> - <TabItem label="Bun"> - ```bash - bun install -g opencode-ai - ``` - </TabItem> - <TabItem label="pnpm"> - ```bash - pnpm install -g opencode-ai - ``` - </TabItem> - <TabItem label="Yarn"> - ```bash - yarn global add opencode-ai - ``` - </TabItem> + <TabItem label="npm">```bash npm install -g opencode-ai ```</TabItem> + <TabItem label="Bun">```bash bun install -g opencode-ai ```</TabItem> + <TabItem label="pnpm">```bash pnpm install -g opencode-ai ```</TabItem> + <TabItem label="Yarn">```bash yarn global add opencode-ai ```</TabItem> </Tabs> - **Using Homebrew on macOS and Linux** diff --git a/packages/web/src/content/docs/permissions.mdx b/packages/web/src/content/docs/permissions.mdx index 4579c2127..a0ba5d5d9 100644 --- a/packages/web/src/content/docs/permissions.mdx +++ b/packages/web/src/content/docs/permissions.mdx @@ -187,4 +187,3 @@ permission: Only analyze code and suggest changes. ``` - diff --git a/packages/web/src/content/docs/rules.mdx b/packages/web/src/content/docs/rules.mdx index aa5590bb5..6346a02ea 100644 --- a/packages/web/src/content/docs/rules.mdx +++ b/packages/web/src/content/docs/rules.mdx @@ -107,7 +107,11 @@ The recommended approach is to use the `instructions` field in `opencode.json`: ```json title="opencode.json" { "$schema": "https://opencode.ai/config.json", - "instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"] + "instructions": [ + "docs/development-standards.md", + "test/testing-guidelines.md", + "packages/*/AGENTS.md" + ] } ``` diff --git a/packages/web/src/content/docs/troubleshooting.mdx b/packages/web/src/content/docs/troubleshooting.mdx index fb8e964ba..d38b892fc 100644 --- a/packages/web/src/content/docs/troubleshooting.mdx +++ b/packages/web/src/content/docs/troubleshooting.mdx @@ -90,8 +90,8 @@ If you encounter `ProviderModelNotFoundError` you are most likely incorrectly referencing a model somewhere. Models should be referenced like so: `<providerId>/<modelId>` - Examples: + - `openai/gpt-4.1` - `openrouter/google/gemini-2.5-flash` - `opencode/kimi-k2` diff --git a/packages/web/src/styles/custom.css b/packages/web/src/styles/custom.css index e947f1f18..648176e42 100644 --- a/packages/web/src/styles/custom.css +++ b/packages/web/src/styles/custom.css @@ -30,8 +30,6 @@ --sl-color-divider: var(--sl-color-gray-5); } - - body { color: var(--color-text) !important; font-size: 14px !important; @@ -60,7 +58,6 @@ body { --color-border-weak: hsl(0, 4%, 23%); --color-icon: hsl(10, 3%, 43%); - } } @@ -145,7 +142,7 @@ a[aria-current="page"] { font-weight: 600 !important; } -ul.top-level a[aria-current="page"] > span { +ul.top-level a[aria-current="page"] > span { color: var(--color-text-strong) !important; } @@ -163,7 +160,6 @@ ul.top-level a[aria-current="page"] > span { font-weight: 600 !important; } - .top-level li a { border-radius: 0; width: 100%; @@ -221,13 +217,16 @@ site-search > button span { } } - - site-search > button > kbd { font-size: 14px !important; } -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { +h1 a, +h2 a, +h3 a, +h4 a, +h5 a, +h6 a { color: var(--color-text-strong) !important; } @@ -263,7 +262,8 @@ strong { font-weight: 500 !important; } -ul, ol { +ul, +ol { list-style: none !important; padding: 0 !important; } @@ -280,7 +280,8 @@ ul, ol { color: var(--color-text-strong) !important; } -body > .page > header, :root[data-has-sidebar] body > .page > header { +body > .page > header, +:root[data-has-sidebar] body > .page > header { background: var(--color-background) !important; padding: 24px !important; } @@ -303,7 +304,6 @@ body > .page > header, :root[data-has-sidebar] body > .page > header { max-width: 100% !important; } - nav.sidebar .sl-container ul li a, div.right-sidebar .sl-container ul li a { padding: 4px 24px !important; @@ -317,7 +317,7 @@ div.right-sidebar .sl-container ul li a:hover { background: var(--color-background-weak); @media (prefers-color-scheme: dark) { - background: var(--color-background-weak) + background: var(--color-background-weak); } } @@ -326,14 +326,12 @@ div.right-sidebar .sl-container ul li ul li { padding: 4px 12px 0 12px !important; } - nav.sidebar .sl-container ul li a[aria-current="true"], div.right-sidebar .sl-container ul li a[aria-current="true"] { color: var(--color-text-strong) !important; opacity: 100%; } - h2#starlight__on-this-page { font-size: 14px !important; color: var(--color-text-strong) !important; @@ -375,7 +373,6 @@ nav.sidebar ul.top-level > li > details > summary .group-label > span { .expressive-code { margin: 0.75rem 0 3rem 0 !important; border-radius: 6px; - } .expressive-code figure { @@ -386,8 +383,6 @@ nav.sidebar ul.top-level > li > details > summary .group-label > span { box-shadow: none; } - - @media (prefers-color-scheme: dark) { .shiki, .shiki span { |
