UNPKG

kui-vue

Version:

A lightweight desktop UI component library suitable for Vue.js 2.

52 lines (49 loc) 1.3 kB
import Icon from "../icon"; import { Checkmark } from "kui-icons"; import { defineComponent, computed, inject, } from "vue"; import { withInstall } from "../utils/vue"; const Option = defineComponent({ name: "Option", props: { value: { type: [String, Number], required: true }, label: { type: [String, Number] }, disabled: Boolean, checked: Boolean, active: Boolean, multiple: Boolean, }, methods: {}, setup(ps, { slots, emit }) { const labelText = ps.label || slots.default?.() || ps.value; const checked = computed(() => ps.checked); const onSelect = () => { if (ps.disabled) return; // isChecked.value = !isChecked.value; emit("select", { value: ps.value, label: labelText }); }; return () => { const { multiple, disabled } = ps; const classes = [ "k-select-item", { ["k-select-item-selected"]: checked.value, ["k-select-item-active"]: ps.active, ["k-select-item-disabled"]: disabled, }, ]; return ( <li class={classes} onClick={onSelect}> <span> {labelText} {multiple ? <Icon type={Checkmark} /> : null} </span> </li> ); }; }, }); export default withInstall(Option);