Newer
Older

Дмитрий Малюгин
committed
<script setup lang="ts">
import { useElementSize, useTextareaAutosize } from '@vueuse/core';
import type { IText } from '@/app/interfaces/entities';
import { editEntity } from '@/app/helpers';

Дмитрий Малюгин
committed
interface Props {
entityData: IText;

Дмитрий Малюгин
committed
}
const props = defineProps<Props>();
const entityData = ref(props.entityData);
const container = ref();

Дмитрий Малюгин
committed
const editTitle = () => {
editEntity({ ...entityData.value, title: entityData.value.title });

Дмитрий Малюгин
committed
};
const editText = () => {
editEntity({ ...entityData.value, text: entityData.value.text });
const { textarea, triggerResize } = useTextareaAutosize({ styleProp: 'minHeight' });
const { height: textareaHeight } = useElementSize(textarea);

Дмитрий Малюгин
committed
</script>
<template>
'entityContainer relative flex px-16',
{
'justify-start': entityData.entity_position === 'left',
'justify-center': entityData.entity_position === 'center',
'justify-end': entityData.entity_position === 'right'
}
]"
>
:class="[
{
'w-1/2': entityData.paragraph_size === 'half',
'w-full': entityData.paragraph_size === 'full'
}
]"
<EntityTitle
v-model:title="entityData.title"
:entityData="entityData"
/>
<div class="relative leading-none">
<textarea
ref="textarea"
v-model="entityData.text"
:class="[
'w-full indent-5 leading-normal resize-none outline-0',
{
'pointer-events-none': !isEditMode
}
]"
:style="`font-size: ${entityData.font_size}px;`"
placeholder="Enter text..."
<div
v-if="!entityData?.title && textareaHeight < 87 && isEditMode"
class="aggregateHigh transition-all h-0"
></div>
<div
v-if="
(!entityData?.title && textareaHeight >= 87 && textareaHeight < 132 && isEditMode) ||
(entityData?.title && textareaHeight < 65 && isEditMode)
"
class="aggregateMedium transition-all h-0"
></div>
<div
v-if="
(!entityData?.title && textareaHeight >= 132 && textareaHeight < 167 && isEditMode) ||
(entityData?.title && textareaHeight >= 65 && textareaHeight < 100 && isEditMode)
"
class="aggregateShort transition-all h-0"
></div>
<TextMenu v-if="isEditMode" v-model:entityData="entityData" />
</section>

Дмитрий Малюгин
committed
</template>
.entityContainer .speedDial {

Дмитрий Малюгин
committed
opacity: 0;
}
.entityContainer:hover .speedDial {

Дмитрий Малюгин
committed
opacity: 100;
}
.entityContainer:hover .aggregateHigh {
height: 140px;
}
.entityContainer:hover .aggregateMedium {
height: 80px;
}
.entityContainer:hover .aggregateShort {
height: 35px;
input::placeholder {
font-weight: 400;
}