UNPKG

@oiij/naive-ui

Version:

Some Composable Functions And Components for Vue 3

64 lines (62 loc) 2.27 kB
import { createElementBlock, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeProps, openBlock, ref, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watchEffect } from "vue"; import { NInput } from "naive-ui"; //#region src/components/toggle-input/ToggleInput.vue const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "ToggleInput", props: /* @__PURE__ */ mergeModels({ trigger: { default: "click" }, inputProps: {} }, { "value": {}, "valueModifiers": {} }), emits: /* @__PURE__ */ mergeModels(["trigger"], ["update:value"]), setup(__props, { emit: __emit }) { const emit = __emit; const value = useModel(__props, "value"); const showInput = ref(false); const inputRef = useTemplateRef("input-ref"); const inputValue = ref(value.value); watchEffect(() => { inputValue.value = value.value; }); function onTrigger() { inputValue.value = value.value; showInput.value = true; emit("trigger"); nextTick(() => { inputRef.value?.focus(); }); } function onUpdateValue(val) { inputValue.value = val; } function hideInput() { showInput.value = false; } function onEmit() { hideInput(); value.value = inputValue.value; } return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { onClick: _cache[0] || (_cache[0] = ($event) => __props.trigger === "click" && onTrigger()), onDblclick: _cache[1] || (_cache[1] = ($event) => __props.trigger === "dblclick" && onTrigger()) }, [showInput.value ? renderSlot(_ctx.$slots, "input", normalizeProps(mergeProps({ key: 0 }, { onUpdateValue, hideInput, onEmit, inputValue: inputValue.value })), () => [createVNode(unref(NInput), mergeProps({ ref: "input-ref", value: typeof inputValue.value === "string" ? inputValue.value : inputValue.value?.toString() }, __props.inputProps, { "onUpdate:value": onUpdateValue, onBlur: onEmit }), null, 16, ["value"])]) : renderSlot(_ctx.$slots, "default", normalizeProps(mergeProps({ key: 1 }, { value: inputValue.value })), () => [createTextVNode(toDisplayString(inputValue.value), 1)])], 32); }; } }); var ToggleInput_default = _sfc_main; //#endregion export { ToggleInput_default as default };