UNPKG

song-ui-u

Version:

vue3 + js的PC前端组件库

110 lines (107 loc) 3.42 kB
import { defineComponent, inject, computed, onMounted, onBeforeUnmount, createVNode } from 'vue'; import { useNamespace } from '../../../hook/use-namespace/index.mjs'; import { Check } from 'song-ui-pro-icon'; import '../../../hook/use-zindex/index.mjs'; import { SELECT_KEY } from './constant.mjs'; import '../../button/index.mjs'; import '../../buttonGroup/index.mjs'; import { XIcon } from '../../icon/index.mjs'; import '../../input/index.mjs'; import '../../textarea/index.mjs'; import '../../row/index.mjs'; import '../../col/index.mjs'; import '../../container/index.mjs'; import '../../checkbox/index.mjs'; import '../../switch/index.mjs'; import '../../form/index.mjs'; import '../../message/index.mjs'; import '../../mask/src/mask.mjs'; import '../../modal/index.mjs'; import '../../messageBox/index.mjs'; import '../../drawer/index.mjs'; import '../../badge/index.mjs'; import '../../space/index.mjs'; import '../../image/index.mjs'; import '../../radio/index.mjs'; import '../../divider/index.mjs'; import '../../chat/index.mjs'; import '../../progress/index.mjs'; import '../../upload/index.mjs'; import '../../vTree/index.mjs'; import '../../table/index.mjs'; import '../../tabs/index.mjs'; import '../../menu/index.mjs'; import '../../steps/index.mjs'; import '../../header/index.mjs'; import '../../breadcrumble/index.mjs'; import '../../datePicker/index.mjs'; import '../../tooltip/index.mjs'; import '../../popover/index.mjs'; import '../../timePicker/index.mjs'; import '../index.mjs'; import '../../collapse/index.mjs'; import '../../card/index.mjs'; import '../../timeline/index.mjs'; import '../../tag/index.mjs'; import '../../result/index.mjs'; import '../../sender/index.mjs'; var Option = /* @__PURE__ */ defineComponent({ name: "x-option", props: { value: { type: [String, Number], required: true }, label: { type: String, default: "" }, disabled: { type: Boolean, default: false } }, setup(props, { slots }) { const ns = useNamespace("option"); const selectCtx = inject(SELECT_KEY); const id = Symbol("option"); const isSelected = computed(() => { return selectCtx.isOptionSelected(props.value); }); const isVisible = computed(() => { if (!selectCtx.props.filterable || !selectCtx.inputValue.value) { return true; } const label = props.label || slots.default?.(); return label.toLowerCase().includes(selectCtx?.inputValue?.value.toLowerCase()); }); const handleClick = () => { if (props.disabled) return; selectCtx.selectOption(props.value, props.label || slots.default?.()); }; onMounted(() => { selectCtx.registerOption({ id, value: props.value, label: props.label || slots.default?.() }); }); onBeforeUnmount(() => { selectCtx.unregisterOption(id); }); return () => isVisible.value ? createVNode("li", { "class": [ns.b(), ns.is("selected", isSelected.value), ns.is("disabled", props.disabled)], "onClick": handleClick }, [createVNode("span", { "class": [ns.e("label")] }, [props.label || slots.default?.()]), isSelected.value && createVNode(XIcon, { "class": [ns.e("check")] }, { default: () => [createVNode(Check, null, null)] })]) : null; } }); export { Option as default }; //# sourceMappingURL=option.mjs.map