UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

152 lines (151 loc) 4.4 kB
import { withInstall as N } from "../common/index.esm.js"; import { defineComponent as O, ref as u, watch as b, computed as o, onMounted as w, createVNode as r, nextTick as A } from "vue"; const P = { items: { Type: Array, default: [ { name: "升序", value: "asc", icon: "f-icon f-icon-col-ascendingorder" }, { name: "降序", value: "desc", icon: "f-icon f-icon-col-descendingorder" } ] }, /** * 组件值 */ modelValue: { type: String, default: "" }, type: { type: String, default: "primary" } }, T = { name: { type: String, default: "" }, value: { type: String, default: "" }, isActive: { type: Boolean, default: !1 }, icon: { type: String, default: "" }, index: { type: Number, default: 0 }, show: { type: Boolean, default: !0 }, disabled: { type: Boolean, default: !1 }, minWidth: { type: Number, default: 20 } }, L = /* @__PURE__ */ O({ name: "FCapsuleItem", props: T, emits: ["mounted", "active"], setup(a, v) { const c = u(), d = u(a.isActive); b(() => a.isActive, (n) => { d.value = n; }); const m = o(() => ({ "f-capsule-item": !0, "f-capsule-active-item": d.value, "f-capsule-disabled": a.disabled })), s = o(() => ({ minWidth: `${a.minWidth}px` })); w(() => { v.emit("mounted", c, a.value); }); function p(n) { a.disabled || v.emit("active", n, { name: a.name, value: a.value }); } return () => r("div", { ref: c, class: m.value, style: s.value, onClick: (n) => p(n) }, [a.icon && r("i", { class: a.icon }, null), a.name]); } }), q = /* @__PURE__ */ O({ name: "FCapsule", props: P, emits: ["change", "update:modelValue"], setup(a, v) { const c = u(a.items), d = u(), m = 2, s = u(a.modelValue), p = u("none"), n = u(a.type), x = o(() => { const e = { "f-capsule-container": !0 }; return n.value && (e[n.value] = !0), e; }), S = o(() => ({})), V = o(() => ({ "f-capsule": !0 })), h = u(m), I = u(0), y = u(0), W = o(() => ({ left: `${h.value}px`, width: `${I.value}px`, transition: p.value })), B = o(() => ({ width: y.value ? `${y.value}px` : "100%" })), i = /* @__PURE__ */ new Map(); function R(e) { var t; if (i.has(e.value)) { const l = (t = i.get(e.value)) == null ? void 0 : t.value; if (l) { const f = l.clientWidth > 0 ? 0 : 100; setTimeout(() => { const j = l.getBoundingClientRect(), E = d.value.getBoundingClientRect(); h.value = j.left - E.left + m + d.value.scrollLeft, I.value = j.width - 2 * m; }, f); } } } function g(e, t) { const l = e.value; s.value = l, v.emit("update:modelValue", l), R(e), t && v.emit("change", l); } function C(e) { const t = c.value.findIndex((l) => l.value === e); t > -1 && g(c.value[t], !1); } b(() => a.modelValue, (e) => { s.value = e, C(s.value); }), w(async () => { C(s.value), await A(), p.value = "0.1s ease-out all", y.value = Array.from(i.values()).reduce((e, t) => (e += t.value.clientWidth, e), 0); }); function k(e, t) { g(t, !0); } function F(e, t) { i.set(t, e); } function M(e) { Array.from(i.keys()).forEach((t) => { e.find((f) => f.value === t) || i.delete(t); }); } function $(e, t) { return r(L, { name: e.name, value: e.value, isActive: e.value === s.value, index: t, disabled: e.disabled, minWidth: e.minWidth, key: e.value, onMounted: F, onActive: k }, null); } return b(() => a.items, async (e) => { const t = e.filter((l) => l.show); M(t), c.value = t, await A(), C(s.value), y.value = Array.from(i.values()).reduce((l, f) => (l += f.value.clientWidth, l), 0); }), () => r("span", { ref: d, class: x.value, style: S.value }, [r("span", { class: "f-capsule-pane" }, [c.value.map((e, t) => $(e, t))]), r("small", { class: V.value, style: W.value }, null), r("div", { class: "f-capsule-board", style: B.value }, null)]); } }), G = N(q); export { q as FCapsule, T as capsuleItemProps, P as capsuleProps, G as default };