Skip to content

Commit fdf7958

Browse files
committed
fix(ProsePre): get code from DOM if code prop was missing
1 parent aae5378 commit fdf7958

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

  • src/runtime/components/prose

src/runtime/components/prose/Pre.vue

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export interface ProsePreSlots {
2525
</script>
2626

2727
<script setup lang="ts">
28-
import { computed } from 'vue'
28+
import { computed, ref } from 'vue'
2929
import { useClipboard } from '@vueuse/core'
3030
import { useAppConfig } from '#imports'
3131
import { useComponentUI } from '../../composables/useComponentUI'
@@ -41,9 +41,16 @@ const { t } = useLocale()
4141
const { copy, copied } = useClipboard()
4242
const appConfig = useAppConfig() as ProsePre['AppConfig']
4343
const uiProp = useComponentUI('prose.pre', props)
44+
const preTemplateRef = ref<HTMLElement | null>()
4445
4546
// eslint-disable-next-line vue/no-dupe-keys
4647
const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.prose?.pre || {}) })())
48+
49+
function copyCode() {
50+
const code = props.code ?? preTemplateRef.value?.textContent ?? ''
51+
52+
copy(code)
53+
}
4754
</script>
4855

4956
<template>
@@ -62,9 +69,9 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.prose?.pre |
6269
:aria-label="t('prose.pre.copy')"
6370
:class="ui.copy({ class: uiProp?.copy })"
6471
tabindex="-1"
65-
@click="copy(props.code || '')"
72+
@click="copyCode"
6673
/>
6774

68-
<pre :class="ui.base({ class: [uiProp?.base, props.class] })" v-bind="$attrs"><slot /></pre>
75+
<pre ref="preTemplateRef" :class="ui.base({ class: [uiProp?.base, props.class] })" v-bind="$attrs"><slot /></pre>
6976
</div>
7077
</template>

0 commit comments

Comments
 (0)