diff options
Diffstat (limited to 'src/ui/c-label/c-label.vue')
-rw-r--r-- | src/ui/c-label/c-label.vue | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/ui/c-label/c-label.vue b/src/ui/c-label/c-label.vue new file mode 100644 index 0000000..3e0f64d --- /dev/null +++ b/src/ui/c-label/c-label.vue @@ -0,0 +1,32 @@ +<script lang="ts" setup> +import { toRefs } from 'vue'; +import type { CLabelProps } from './c-label.types'; + +const props = withDefaults(defineProps<CLabelProps>(), { label: undefined, labelAlign: 'left', labelFor: undefined, labelPosition: 'top', labelWidth: 'auto' }); +const { label, labelAlign, labelFor, labelPosition, labelWidth } = toRefs(props); +</script> + +<template> + <div + :class="{ + 'flex-col': labelPosition === 'top', + 'flex-row': labelPosition === 'left', + }" + flex + items-baseline + > + <label + v-if="label" :for="labelFor" :style="{ flex: `0 0 ${labelWidth}` }" + mb-5px + pr-12px + :class="{ + 'text-left': labelAlign === 'left', + 'text-center': labelAlign === 'center', + 'text-right': labelAlign === 'right', + }" + > + {{ label }} + </label> + <slot /> + </div> +</template> |