| <script lang="ts"> |
| import { afterUpdate } from "svelte"; |
| import CopyToClipBoardBtn from "./CopyToClipBoardBtn.svelte"; |
|
|
| export let code = ""; |
| export let lang = ""; |
|
|
| $: highlightedCode = ""; |
|
|
| afterUpdate(async () => { |
| const { default: hljs } = await import("highlight.js"); |
| const language = hljs.getLanguage(lang); |
|
|
| highlightedCode = hljs.highlightAuto(code, language?.aliases).value; |
| }); |
| </script> |
|
|
| <div class="group relative my-4 rounded-lg"> |
| |
| <pre |
| class="scrollbar-custom overflow-auto px-5 scrollbar-thumb-gray-500 hover:scrollbar-thumb-gray-400 dark:scrollbar-thumb-white/10 dark:hover:scrollbar-thumb-white/20"><code |
| class="language-{lang}">{@html highlightedCode || code.replaceAll("<", "<")}</code |
| ></pre> |
| <CopyToClipBoardBtn |
| classNames="absolute top-2 right-2 invisible opacity-0 group-hover:visible group-hover:opacity-100" |
| value={code} |
| /> |
| </div> |
|
|