Skip to content

Commit 75dd860

Browse files
committed
feat: <WIP> create CodeSnippet component
1 parent 1380df7 commit 75dd860

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<script setup>
2+
import { getHighlighter, setCDN } from 'shiki';
3+
import { onMounted } from 'vue';
4+
5+
const props = defineProps({
6+
code: String,
7+
lang: String,
8+
langs: Array,
9+
});
10+
11+
const code = props.code ?? '';
12+
const { lang = 'js', langs = ['javascript'] } = props;
13+
14+
onMounted(() => {
15+
setCDN('https://unpkg.com/shiki/');
16+
// @ts-ignore
17+
getHighlighter({ theme: 'material-palenight', langs: langs }).then(
18+
highlighter => {
19+
const snippet = highlighter.codeToHtml(code, { lang: lang });
20+
// @ts-ignore
21+
document.querySelector('.shiki-code').innerHTML = snippet;
22+
document.querySelector('.code-snippet pre')?.removeAttribute('style');
23+
}
24+
);
25+
});
26+
</script>
27+
28+
<template>
29+
<div class="code-snippet language-js">
30+
<button title="Copy Code" class="copy"></button>
31+
<span class="lang">{{ lang }}</span>
32+
<div class="shiki-code"></div>
33+
</div>
34+
</template>

docs/examples/index.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ aside: false
66
<script setup>
77
import { onMounted } from 'vue';
88
import Example from '../.vitepress/components/Example.vue'
9+
import CodeSnippet from '../.vitepress/components/CodeSnippet.vue'
910
import examples from './examples.json'
1011

1112
import jsCssAnimations from '../../js-css-animations/js-css-animations.js';
@@ -116,6 +117,10 @@ aside: false
116117
return jsCssAnimations;
117118
}
118119

120+
const snippet = `
121+
jsCssAnimations.init.slideDown({maintainSpace: true});
122+
`
123+
119124
</script>
120125

121126
# Examples
@@ -131,7 +136,9 @@ aside: false
131136
@reset-animation="(opts) => {resetAnimation('slide', opts);}"
132137
:fields-list="['duration', 'delay', 'staggerDelay', 'maintainSpace', 'easing', 'dimensionsTransition', 'overflowHidden']">
133138

134-
```js{4}
139+
<CodeSnippet :code="snippet" />
140+
141+
<!-- ```js{4}
135142
jsCssAnimations.init.slideUp({
136143
trigger: '.slide-up--btn',
137144
targetSelector: '.example__slide',
@@ -149,7 +156,7 @@ jsCssAnimations.init.slideRight({
149156
trigger: '.slide-right--btn',
150157
targetSelector: '.example__slide',
151158
});
152-
```
159+
``` -->
153160

154161
</Example>
155162

0 commit comments

Comments
 (0)