Skip to content
Snippets Groups Projects
TextItem.vue 2.96 KiB
Newer Older
import { useElementSize, useTextareaAutosize } from '@vueuse/core';
malyusgun's avatar
malyusgun committed
import type { IText } from '@/app/interfaces/entities';
import { editEntity } from '@/app/helpers';
}
const props = defineProps<Props>();
const entityData = ref(props.entityData);
malyusgun's avatar
malyusgun committed
  editEntity({ ...entityData.value, title: entityData.value.title });
malyusgun's avatar
malyusgun committed
  editEntity({ ...entityData.value, text: entityData.value.text });
const { textarea, triggerResize } = useTextareaAutosize({ styleProp: 'minHeight' });
const { height: textareaHeight } = useElementSize(textarea);
      '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'
        }
      ]"
malyusgun's avatar
malyusgun committed
      <EntityTitle
        v-model:title="entityData.title"
        :entityData="entityData"
        :isEditMode="isEditMode"
malyusgun's avatar
malyusgun committed
        @editTitle="editTitle"
      />
      <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..."
malyusgun's avatar
malyusgun committed
          @change="editText"
          @input="triggerResize"
      <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" />
malyusgun's avatar
malyusgun committed
<style>
.entityContainer:hover .speedDial {
.entityContainer:hover .aggregateHigh {
  height: 140px;
}
.entityContainer:hover .aggregateMedium {
  height: 80px;
}
.entityContainer:hover .aggregateShort {
  height: 35px;
input::placeholder {
  font-weight: 400;
}