2021-11-20 14:30:38 -09:00
|
|
|
<template>
|
|
|
|
|
<div>
|
2025-06-20 00:09:12 +07:00
|
|
|
<div
|
|
|
|
|
v-if="displayPreview"
|
|
|
|
|
class="d-flex justify-end"
|
|
|
|
|
>
|
2022-01-09 21:04:24 -09:00
|
|
|
<BaseButtonGroup
|
|
|
|
|
:buttons="[
|
|
|
|
|
{
|
|
|
|
|
icon: previewState ? $globals.icons.edit : $globals.icons.eye,
|
2025-06-20 00:09:12 +07:00
|
|
|
text: previewState ? $t('general.edit') : $t('markdown-editor.preview-markdown-button-label'),
|
2022-01-09 21:04:24 -09:00
|
|
|
event: 'toggle',
|
|
|
|
|
},
|
|
|
|
|
]"
|
|
|
|
|
@toggle="previewState = !previewState"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
2021-11-20 14:30:38 -09:00
|
|
|
<v-textarea
|
2022-01-09 21:04:24 -09:00
|
|
|
v-if="!previewState"
|
2022-06-05 11:28:38 -08:00
|
|
|
v-bind="textarea"
|
2026-03-23 21:18:25 +01:00
|
|
|
v-model="modelValue"
|
2021-11-20 14:30:38 -09:00
|
|
|
:class="label == '' ? '' : 'mt-5'"
|
|
|
|
|
:label="label"
|
|
|
|
|
auto-grow
|
2025-06-20 00:09:12 +07:00
|
|
|
density="compact"
|
2021-11-20 14:30:38 -09:00
|
|
|
rows="4"
|
2025-06-20 00:09:12 +07:00
|
|
|
variant="underlined"
|
|
|
|
|
/>
|
|
|
|
|
<SafeMarkdown
|
|
|
|
|
v-else
|
|
|
|
|
:source="modelValue"
|
2022-06-05 11:28:38 -08:00
|
|
|
/>
|
2021-11-20 14:30:38 -09:00
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
2026-03-23 21:18:25 +01:00
|
|
|
<script setup lang="ts">
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
label: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: "",
|
2021-11-20 14:30:38 -09:00
|
|
|
},
|
2026-03-23 21:18:25 +01:00
|
|
|
preview: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: undefined,
|
|
|
|
|
},
|
|
|
|
|
displayPreview: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: true,
|
|
|
|
|
},
|
|
|
|
|
textarea: {
|
|
|
|
|
type: Object as () => unknown,
|
|
|
|
|
default: () => ({}),
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const emit = defineEmits<{
|
|
|
|
|
(e: "input:preview", value: boolean): void;
|
|
|
|
|
}>();
|
|
|
|
|
|
|
|
|
|
const modelValue = defineModel<string>("modelValue");
|
2021-11-20 14:30:38 -09:00
|
|
|
|
2026-03-23 21:18:25 +01:00
|
|
|
const fallbackPreview = ref(false);
|
|
|
|
|
const previewState = computed({
|
|
|
|
|
get: () => props.preview ?? fallbackPreview.value,
|
|
|
|
|
set: (val: boolean) => {
|
|
|
|
|
if (props.preview) {
|
|
|
|
|
emit("input:preview", val);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
fallbackPreview.value = val;
|
|
|
|
|
}
|
2021-11-20 14:30:38 -09:00
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
</script>
|