vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
43 lines (42 loc) • 1.27 kB
JavaScript
import { Utils as I } from "@vuux/utils";
import { ref as o, computed as t, watch as h, onMounted as N } from "vue";
const k = (e, u) => {
const s = o(""), c = o(""), a = o(e.modelValue ? e.modelValue : ""), n = o(!1), r = t(() => e.type === "textarea"), d = t(() => e.type === "password"), i = t(() => e.disabled ? e.disabled : !1), f = t(() => e.clear ? e.clear : !1), m = t(() => e.count ? e.count : !1), w = t(() => ({
"is-padding": f.value || d.value || i.value || m.value
})), V = t(() => n.value ? "text" : e.type), b = t(() => a.value?.length ?? 0), x = (l) => {
const v = l.target.value;
a.value = v, u("input", a.value), u("update:modelValue", v);
}, g = () => {
u("blur", a.value);
}, y = () => {
a.value = "", u("update:modelValue", ""), u("blur", a.value);
}, C = () => {
n.value = !n.value;
};
return h(
() => e.modelValue,
(l) => {
a.value = l;
}
), N(() => {
const l = String(I.snowflakeId());
s.value = l, c.value = l;
}), {
inputId: s,
inputName: c,
localValue: a,
show: n,
isTextarea: r,
isPassword: d,
className: w,
currentType: V,
textCount: b,
onInput: x,
onBlur: g,
onClear: y,
onPassword: C
};
};
export {
k as useInput
};