Files
hossein-por-shop/frontend/components/global/Textarea.vue
2025-04-18 19:50:33 +03:30

58 lines
1.5 KiB
Vue

<script setup lang="ts">
type Props = {
variant?: "solid" | "outlined";
disabled?: boolean;
error?: boolean;
message?: string;
placeholder?: string;
modelValue: string;
};
// props
const props = withDefaults(defineProps<Props>(), {
variant: "solid",
disabled: false,
placeholder: "وارد نشده",
});
const { variant, message, error, disabled, modelValue } = toRefs(props);
// emits
const emit = defineEmits(["update:modelValue"]);
// state
const inputRef = ref<HTMLInputElement | null>(null);
// computed
const value = computed({
get: () => modelValue.value ?? "",
set: (value) => emit("update:modelValue", value),
});
const classes = computed(() => {
return [
"flex items-start text-black justify-between cursor-text resize-none transition-all border-[1.5px] gap-3 typo-label-md px-4 py-3.5 selection:bg-slate-100 rounded-100 transition-all !text-sm",
{
"input-solid": variant.value === "solid",
"input-outlined": variant.value === "outlined",
"input-effects": !error.value,
[variant.value === "solid" ? "!input-solid-error" : "!input-outlined-error"]: error.value,
},
];
});
</script>
<template>
<textarea
v-model="value"
ref="inputRef"
v-bind="$attrs"
:class="classes"
class="size-full outline-none placeholder-slate-400 placeholder:text-xs lg:placeholder:text-sm placeholder:font-normal"
:placeholder="placeholder"
/>
</template>