Download packages/web/src/components/share/content-bash.tsx from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 1.71 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/web/src/components/share/content-bash.tsx
- Command line
-
hf download hf://SaylorTwift/opencode/packages/web/src/components/share/content-bash.tsx
-
curl -L -o content-bash.tsx https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/web/src/components/share/content-bash.tsx
1.71 kB
| import style from "./content-bash.module.css" | |
| import { createResource, createSignal } from "solid-js" | |
| import { createOverflow, useShareMessages } from "./common" | |
| import { codeToHtml } from "shiki" | |
| interface Props { | |
| command: string | |
| output: string | |
| expand?: boolean | |
| } | |
| export function ContentBash(props: Props) { | |
| const messages = useShareMessages() | |
| const [commandHtml] = createResource( | |
| () => props.command, | |
| async (command) => { | |
| return codeToHtml(command || "", { | |
| lang: "bash", | |
| themes: { | |
| light: "github-light", | |
| dark: "github-dark", | |
| }, | |
| }) | |
| }, | |
| ) | |
| const [outputHtml] = createResource( | |
| () => props.output, | |
| async (output) => { | |
| return codeToHtml(output || "", { | |
| lang: "console", | |
| themes: { | |
| light: "github-light", | |
| dark: "github-dark", | |
| }, | |
| }) | |
| }, | |
| ) | |
| const [expanded, setExpanded] = createSignal(false) | |
| const overflow = createOverflow() | |
| return ( | |
| <div class={style.root} data-expanded={expanded() || props.expand === true ? true : undefined}> | |
| <div data-slot="body"> | |
| <div data-slot="header"> | |
| <span>Shell</span> | |
| </div> | |
| <div data-slot="content"> | |
| <div innerHTML={commandHtml()} /> | |
| <div data-slot="output" ref={overflow.ref} innerHTML={outputHtml()} /> | |
| </div> | |
| </div> | |
| {!props.expand && overflow.status && ( | |
| <button | |
| type="button" | |
| data-component="text-button" | |
| data-slot="expand-button" | |
| onClick={() => setExpanded((e) => !e)} | |
| > | |
| {expanded() ? messages.show_less : messages.show_more} | |
| </button> | |
| )} | |
| </div> | |
| ) | |
| } | |