Playground
<template>
<div class="vue-input" :class="classes">
<div class="vue-input__input-wrapper">
<label> {{ label }} </label>
<input
class="vue-input__input"
value="value"
@input="$emit('input', $event.target.value)"
/>
</div>
<div>
<slot name="trailing"></slot>
</div>
</div>
</template>
<style scoped>
/* ✗ BAD */
.vue-imput, /* It's typo? */
.vue-input__label, /* You may have forgotten to assign a class name. */
.vue-input__input-wrapper > vue-input__input, /* Missing dot. */
/* ✓ GOOD */
.vue-input,
.vue-input__input,
.vue-input > .vue-input__input-wrapper > .vue-input__input,
.vue-input :deep(.child-classes),
.vue-input--disabled {
}
</style>
<script>
export default {
computed: {
classes() {
return {
"vue-input--disabled": this.disabled,
}
},
},
}
</script>