feat: add code copy cutton

This commit is contained in:
radishzzz 2025-05-27 01:37:19 +01:00
parent 9c87c1bf03
commit 3312b30dbf
7 changed files with 132 additions and 5 deletions

View file

@ -0,0 +1,37 @@
import { SKIP, visit } from 'unist-util-visit'
export function rehypeCodeCopyButton() {
return (tree) => {
visit(tree, 'element', (node, index, parent) => {
if (
node.tagName === 'pre'
&& node.children?.[0]?.tagName === 'code'
&& parent
&& !node.properties?.['data-copy-button-added']
) {
node.properties = node.properties || {}
node.properties['data-copy-button-added'] = 'true'
parent.children[index] = {
type: 'element',
tagName: 'div',
properties: { className: ['code-block-wrapper'] },
children: [
{
type: 'element',
tagName: 'button',
properties: {
'className': ['code-copy-button'],
'type': 'button',
'aria-label': 'Copy code',
},
children: [],
},
node,
],
}
return SKIP
}
})
}
}