# ZeenSwitchChose
Компонент switch chose input для форм
# Примеры:
Switch Chose c boolean, c темами circleWithMainColor или bgWithMainColor принимает главный цвет. Тема - circleWithMainColor: false
Тема - bgWithMainColor и передача объекта: { "firstKey": "Все расписание", "secondKey": "Мое расписание" } - значение:
Все расписание Disabled не отмеченный: false
Текст слева Disabled не отмеченный: true
Текст слева С кастомными цветами и disabled
Текст слева Текст слева
# props
Название | Тип | Обязательный | По умолчанию | Описание |
---|---|---|---|---|
value | any | + | - | то, значение, которое хотим сохранять в data родителя |
modelValue | any | + | - | сюда передается значение из v-model |
isDisabled | boolean | - | - | если true, то компонент становится disabled |
theme | string | - | circleWithMainColor | доступны 2 темы для вложенного компонента ZeenSwitch: circleWithMainColor - фон круга основным цветом, а фон подложки дополнительным. bgWithMainColor - наоборот |
trueValue | any | - | true | используется для хранения значения другого типа (не boolean) по состоянию true |
falseValue | any | - | false | используется для хранения значения другого типа (не boolean) по состоянию false |
# Source Code - исходный код компонента
<template>
<div class="zeen-switch-chose">
<div class="zeen-switch-chose__background">
<label class="zeen-switch-chose__label">
<span
class="zeen-switch-chose__text"
:class="{
'zeen-switch-chose__text_active': modelValue === false || modelValue === falseValue,
}"
>
<slot name="text-left" />
</span>
<ZeenSwitch
class="zeen-switch-chose__zeen-switch"
v-model="model"
:trueValue="trueValue"
:falseValue="falseValue"
:disabled="isDisabled"
v-bind="$attrs"
/>
<span
class="zeen-switch-chose__text"
:class="{
'zeen-switch-chose__text_active': modelValue === true || modelValue === trueValue,
}"
>
<slot name="text-right" />
</span>
</label>
</div>
</div>
</template>
<script>
import ZeenSwitch from '../inputs/ZeenSwitch/ZeenSwitch'
export default {
name: 'ZeenSwitchChose',
components: {ZeenSwitch},
inheritAttrs: false,
model: {
prop: 'modelValue',
event: 'change',
},
props: {
value: {
required: true,
},
modelValue: {
required: true,
},
isDisabled: {
type: Boolean,
required: false,
},
trueValue: {
required: false,
default: true,
},
falseValue: {
required: false,
default: false,
},
},
computed: {
model: {
get() {
return this.modelValue
},
set(val) {
this.$emit('change', val)
},
},
},
}
</script>
<style>
:root {
/* Размеры */
}
</style>
<style lang="scss" scoped>
@import '/src/styles/mixins.scss';
.zeen-switch-chose {
&__background {
border-radius: var(--switch-chose-radius);
padding: var(--switch-chose-padding-vertical) var(--switch-chose-padding-horizontal);
background: var(--zeen-switch-chose-background);
}
&__label {
display: flex;
align-items: center;
justify-content: space-evenly;
flex: 1 1 auto;
line-height: 1;
@include tablets {
justify-content: center;
}
}
&__text {
color: var(--zeen-switch-chose-text-color);
transition: color 0.25s ease;
&_active {
color: var(--zeen-switch-chose-color-active);
}
}
&__zeen-switch {
@include tablets {
margin: 0 var(--switch-chose-margin-horizontal);
}
}
}
</style>