streaming, markdown, model selecting, and lots more
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
<script setup lang="ts">
|
||||
import { h, resolveComponent } from 'vue';
|
||||
|
||||
const props = defineProps<{ node: any }>();
|
||||
|
||||
const render = () => {
|
||||
const { node } = props;
|
||||
|
||||
if (node.type === 'text' || node.type === 'raw') return node.value;
|
||||
|
||||
if (node.type === 'element') {
|
||||
if (node.tagName === 'code') {
|
||||
const isBlock = node.position?.start.line !== node.position?.end.line;
|
||||
if (isBlock && node.children?.[0]?.type === 'text') {
|
||||
return h(resolveComponent('MarkdownShikiHighlight'), {
|
||||
code: node.children[0].value,
|
||||
lang: node.properties?.className?.[0]?.replace('language-', '') || 'text'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return h(
|
||||
node.tagName,
|
||||
node.properties,
|
||||
node.children?.map((child: any, index: number) =>
|
||||
h(resolveComponent('MarkdownAstNode'), {
|
||||
node: child,
|
||||
key: `${node.tagName}-${index}`
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<component :is="render" />
|
||||
</template>
|
||||
Reference in New Issue
Block a user