UNPKG

@layui/layui-vue

Version:

a component library for Vue 3 base on layui-vue

102 lines (101 loc) 8.05 kB
import { defineComponent as pe, useSlots as re, shallowRef as Q, ref as f, reactive as U, watch as w, computed as x, nextTick as de, onMounted as ve, openBlock as s, createElementBlock as r, normalizeClass as ce, createElementVNode as z, toDisplayString as $, unref as g, renderSlot as I, createCommentVNode as c, Fragment as P, renderList as X, createBlock as D, mergeProps as R, withCtx as N, createTextVNode as F, createVNode as Y, normalizeStyle as me, withKeys as Z, withModifiers as fe } from "vue"; import { LayIcon as ge } from "@layui/icons-vue"; import { reactiveOmit as ye, isObject as he, useResizeObserver as be } from "@vueuse/core"; import K from "../tag/index2.js"; import Ce from "../tooltip/index2.js"; import { useTreeSelectProvide as ke } from "../treeSelect/useTreeSelect.js"; /* empty css */ import { isArray as xe } from "../utils/arrayUtil.js"; const Ne = { key: 0, class: "layui-tag-input-prepend" }, Ve = { key: 1 }, we = { class: "layui-tag-input-inner" }, ze = { class: "layui-tag-input-collapsed-panel" }, $e = ["disabled", "placeholder", "readonly"], Ie = { key: 1, class: "layui-tag-input-inner-disabled-input" }, Te = { key: 2, class: "layui-tag-input-clear" }, Be = { key: 3, class: "layui-tag-input-suffix" }, Se = { key: 4, class: "layui-tag-input-append" }, Me = pe({ name: "LayTagInput", __name: "index", props: { modelValue: {}, inputValue: {}, disabled: { type: Boolean }, placeholder: { default: void 0 }, readonly: { type: Boolean }, allowClear: { type: Boolean }, max: {}, minCollapsedNum: { default: 0 }, collapseTagsTooltip: { type: Boolean }, size: { default: "md" }, tagProps: {}, disabledInput: { type: Boolean }, checkInputValue: { type: Function, default: (M) => !0 } }, emits: ["change", "exceed", "check-input-value-fail", "update:modelValue", "update:inputValue", "input-value-change", "press-enter", "remove", "clear", "focus", "blur"], setup(M, { expose: ee, emit: le }) { const a = M, o = le, O = re(), V = Q(void 0), i = Q(void 0), m = f(""), v = f(""), T = f(""), y = f(!1), j = U({ width: "15px" }), ae = U(a.tagProps ?? {}), B = ye(ae, "closable", "size", "disabled"), n = f(a.inputValue ?? ""), u = f(); function S(e) { o("update:modelValue", e), o("change", e); } w(() => a.modelValue, (e) => { a.max && a.minCollapsedNum && a.minCollapsedNum > a.max && (console.group("LayTagInput: minCollapsedNum > max"), console.warn(`props.minCollapsedNum(${a.minCollapsedNum}) > props.max(${a.max})`), console.warn("Tips: props.max should be greater than or equals to props.minCollapsedNum."), console.groupEnd()), u.value = e; }, { immediate: !0 }), w(() => n.value, (e) => { o("update:inputValue", e), o("input-value-change", e); }), w(() => a.inputValue, (e) => { n.value = e ?? ""; }); const p = x(() => (u.value ?? []).map((e) => he(e) ? e : { value: e, label: String(e), closable: !0 })), h = x(() => { var e; if (p.value) return a.minCollapsedNum ? (e = p.value) == null ? void 0 : e.slice(0, a.minCollapsedNum) : p.value; }), q = x(() => { var e, l, t; if (p.value) return a.minCollapsedNum && ((e = p.value) == null ? void 0 : e.length) > (((l = h.value) == null ? void 0 : l.length) ?? 0) - a.minCollapsedNum ? (t = p.value) == null ? void 0 : t.slice(a.minCollapsedNum) : []; }); function W(e) { y.value || (n.value = e.target.value, m.value.length || (m.value = n.value)); } function _(e) { var l; e.type === "compositionend" ? (y.value = !1, v.value = "", W(e)) : (y.value = !0, (v.value.length || (l = e.data) != null && l.length) && (T.value = v.value), v.value = n.value + (e.data ?? "")); } function ue(e) { var t; e.preventDefault(); const l = n.value ? String(n.value).trim() : ""; l && u.value && (a.max && ((t = u.value) == null ? void 0 : t.length) >= a.max ? o("exceed", l, e) : !a.checkInputValue || a.checkInputValue(l) ? (u.value = xe(u.value) ? u.value.concat(String(l)) : [l], n.value = "", m.value = "", S(u.value)) : o("check-input-value-fail", l, e), o("press-enter", l, e)); } function te(e) { var l; if (e.key.toLowerCase() === "backspace" && u.value && u.value.length) if (T.value.length || (l = n.value) != null && l.length || m.value.length) T.value = v.value.length ? v.value : "", m.value = n.value ?? ""; else { const t = p.value.length - 1; E(p.value[t].value, t, e); } } function A(e) { var l; o("focus", e), (l = i.value) == null || l.focus(); } function G(e) { var l; o("blur", e), (l = i.value) == null || l.blur(); } function ne(e) { !a.disabled && a.allowClear && (u.value = [], S(u.value), o("clear", e)); } function E(e, l, t) { var C; if (t.type !== "click" && (y.value || v.value.length || (C = n.value) != null && C.length || m.value.length)) return t.preventDefault(), void t.stopPropagation(); if (!u.value) return; const b = [...u.value]; b.splice(l, 1), u.value = b, S(u.value), o("remove", e, t); } function se(e) { i.value && (e.preventDefault(), i.value.focus()); } function H() { var e; V.value && (e = V.value.offsetWidth, j.width = e > 15 ? `${e}px` : "15px"); } const oe = x(() => ["layui-tag-input", `layui-tag-input-${a.size}`, { "layui-tag-input-disabled": a.disabled }]); be(V, () => { H(); }), w(() => n.value, (e) => { i.value && !y.value && de(() => { i.value.value = e ?? ""; }); }); const ie = x(() => p.value && h.value ? p.value.length - h.value.length : ""); return ve(() => { var l; H(); const e = ke(); (l = e == null ? void 0 : e.setInputEl) == null || l.call(e, i.value), i.value && (i.value.value = n.value); }), ee({ focus: A, blur: G }), (e, l) => { var t, b, C, J; return s(), r("div", { class: ce(oe.value), onMousedown: se }, [z("span", { ref_key: "mirrorRefEl", ref: V, class: "layui-tag-input-mirror" }, $(v.value || n.value || e.placeholder), 513), g(O).prepend ? (s(), r("div", Ne, [I(e.$slots, "prepend")])) : c("", !0), e.$slots.prefix ? (s(), r("span", Ve, [I(e.$slots, "prefix")])) : c("", !0), z("span", we, [(s(!0), r(P, null, X(h.value, (d, k) => (s(), D(K, R({ key: `${d}-${k}` }, g(B), { closable: !e.disabled && d.closable, size: e.size, onClose: (L) => E(d.value, k, L) }), { default: N(() => [F($(d.label), 1)]), _: 2 }, 1040, ["closable", "size", "onClose"]))), 128)), ((t = h.value) == null ? void 0 : t.length) !== ((b = u.value) == null ? void 0 : b.length) ? (s(), r(P, { key: 0 }, [(C = q.value) != null && C.length ? (s(), D(Ce, { key: 0, "is-dark": !1, trigger: "hover", "popper-style": "padding:6px", disabled: !e.collapseTagsTooltip }, { content: N(() => [z("div", ze, [(s(!0), r(P, null, X(q.value, (d, k) => (s(), D(K, R({ key: `${d}-${k}` }, g(B), { closable: !e.disabled && d.closable, size: e.size, onClose: (L) => E(d.value, k + (e.minCollapsedNum ?? 0), L) }), { default: N(() => [F($(d.label), 1)]), _: 2 }, 1040, ["closable", "size", "onClose"]))), 128))])]), default: N(() => [Y(K, R(g(B), { key: "more", closable: !1, size: e.size }), { default: N(() => [F(" +" + $(ie.value) + "... ", 1)]), _: 1 }, 16, ["size"])]), _: 1 }, 8, ["disabled"])) : c("", !0)], 64)) : c("", !0), z("input", { ref_key: "inputRefEl", ref: i, class: "layui-tag-input-inner-input", style: me(j), disabled: e.disabled || e.disabledInput, placeholder: e.placeholder, readonly: e.readonly, onKeydown: Z(ue, ["enter"]), onKeyup: Z(te, ["delete"]), onInput: W, onFocus: A, onBlur: G, onCompositionstart: _, onCompositionupdate: _, onCompositionend: _ }, null, 44, $e), e.disabledInput ? (s(), r("div", Ie)) : c("", !0)]), e.allowClear && ((J = u.value) != null && J.length) && !e.disabled ? (s(), r("span", Te, [Y(g(ge), { type: "layui-icon-close-fill", onClick: fe(ne, ["stop"]) })])) : c("", !0), e.$slots.suffix ? (s(), r("span", Be, [I(e.$slots, "suffix")])) : c("", !0), g(O).append ? (s(), r("div", Se, [I(e.$slots, "append")])) : c("", !0)], 34); }; } }); export { Me as default };