Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Implement copy code snippet to clipboard
Browse files
src/lib/components/Icons/IconCopyCode.svelte
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
export let classNames = '';
|
| 3 |
+
</script>
|
| 4 |
+
|
| 5 |
+
<svg
|
| 6 |
+
class={classNames}
|
| 7 |
+
xmlns="http://www.w3.org/2000/svg"
|
| 8 |
+
aria-hidden="true"
|
| 9 |
+
fill="currentColor"
|
| 10 |
+
focusable="false"
|
| 11 |
+
role="img"
|
| 12 |
+
width="0.9em"
|
| 13 |
+
height="0.9em"
|
| 14 |
+
preserveAspectRatio="xMidYMid meet"
|
| 15 |
+
viewBox="0 0 32 32"
|
| 16 |
+
><path
|
| 17 |
+
d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z"
|
| 18 |
+
transform="translate(0)"
|
| 19 |
+
></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect
|
| 20 |
+
fill="none"
|
| 21 |
+
width="32"
|
| 22 |
+
height="32"
|
| 23 |
+
></rect></svg
|
| 24 |
+
>
|
src/lib/components/InferencePlayground/InferencePlaygroundCodeSnippets.svelte
CHANGED
|
@@ -4,6 +4,8 @@
|
|
| 4 |
import python from 'highlight.js/lib/languages/python';
|
| 5 |
import bash from 'highlight.js/lib/languages/bash';
|
| 6 |
import type { Conversation } from '$lib/types';
|
|
|
|
|
|
|
| 7 |
|
| 8 |
hljs.registerLanguage('javascript', javascript);
|
| 9 |
hljs.registerLanguage('python', python);
|
|
@@ -31,7 +33,8 @@
|
|
| 31 |
bash: getBashSnippets(conversation)
|
| 32 |
};
|
| 33 |
|
| 34 |
-
let selectedLanguage: Language = '
|
|
|
|
| 35 |
|
| 36 |
function getMessages() {
|
| 37 |
const placeholder = [{ role: 'user', content: 'Tell me a story' }];
|
|
@@ -221,6 +224,12 @@ print(output.choices[0].message)`
|
|
| 221 |
|
| 222 |
return snippets;
|
| 223 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 224 |
</script>
|
| 225 |
|
| 226 |
<div class="px-2 pt-2">
|
|
@@ -246,10 +255,28 @@ print(output.choices[0].message)`
|
|
| 246 |
<div class="px-4 pb-4 pt-6">
|
| 247 |
<h2 class="font-semibold">{label}</h2>
|
| 248 |
</div>
|
| 249 |
-
<
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
{/each}
|
| 255 |
</div>
|
|
|
|
| 4 |
import python from 'highlight.js/lib/languages/python';
|
| 5 |
import bash from 'highlight.js/lib/languages/bash';
|
| 6 |
import type { Conversation } from '$lib/types';
|
| 7 |
+
import IconCopyCode from '../Icons/IconCopyCode.svelte';
|
| 8 |
+
import { onDestroy } from 'svelte';
|
| 9 |
|
| 10 |
hljs.registerLanguage('javascript', javascript);
|
| 11 |
hljs.registerLanguage('python', python);
|
|
|
|
| 33 |
bash: getBashSnippets(conversation)
|
| 34 |
};
|
| 35 |
|
| 36 |
+
let selectedLanguage: Language = 'javascript';
|
| 37 |
+
let timeout: ReturnType<typeof setTimeout>;
|
| 38 |
|
| 39 |
function getMessages() {
|
| 40 |
const placeholder = [{ role: 'user', content: 'Tell me a story' }];
|
|
|
|
| 224 |
|
| 225 |
return snippets;
|
| 226 |
}
|
| 227 |
+
|
| 228 |
+
onDestroy(() => {
|
| 229 |
+
if (timeout) {
|
| 230 |
+
clearTimeout(timeout);
|
| 231 |
+
}
|
| 232 |
+
});
|
| 233 |
</script>
|
| 234 |
|
| 235 |
<div class="px-2 pt-2">
|
|
|
|
| 255 |
<div class="px-4 pb-4 pt-6">
|
| 256 |
<h2 class="font-semibold">{label}</h2>
|
| 257 |
</div>
|
| 258 |
+
<div class="group relative">
|
| 259 |
+
<pre
|
| 260 |
+
class="overflow-x-auto rounded-lg border border-gray-200/80 bg-white px-4 py-6 text-sm shadow-sm dark:border-gray-800 dark:bg-gray-800/50">{@html highlight(
|
| 261 |
+
code,
|
| 262 |
+
language ?? selectedLanguage
|
| 263 |
+
)}</pre>
|
| 264 |
+
<button
|
| 265 |
+
class="absolute right-3 top-3 opacity-0 transition group-hover:opacity-80"
|
| 266 |
+
on:click={(e) => {
|
| 267 |
+
const el = e.currentTarget;
|
| 268 |
+
el.classList.add('text-green-500');
|
| 269 |
+
navigator.clipboard.writeText(code);
|
| 270 |
+
if (timeout) {
|
| 271 |
+
clearTimeout(timeout);
|
| 272 |
+
}
|
| 273 |
+
timeout = setTimeout(() => {
|
| 274 |
+
el.classList.remove('text-green-500');
|
| 275 |
+
}, 1000);
|
| 276 |
+
}}
|
| 277 |
+
>
|
| 278 |
+
<IconCopyCode />
|
| 279 |
+
</button>
|
| 280 |
+
</div>
|
| 281 |
{/each}
|
| 282 |
</div>
|