y-design-ssr
Version:
SSR component library of YUI with Vue3
169 lines (168 loc) • 6.14 kB
JavaScript
import { ref as T, reactive as _, defineComponent as P, getCurrentInstance as H, computed as F, onMounted as C, onUnmounted as Y, createVNode as x } from "vue";
const y = (t, n) => n ? typeof n == "string" ? ` ${t}--${n}` : Array.isArray(n) ? n.reduce((o, a) => o + y(t, a), "") : Object.keys(n).reduce(
(o, a) => o + (n[a] ? y(t, a) : ""),
""
) : "", X = (t) => (n, o) => {
let a = n, s = o;
return a && typeof a != "string" && (s = a, a = ""), a = a ? `${t}__${a}` : t, `${a}${y(a, s)}`;
}, k = () => (t, n) => n ? `${y(`y-${t}`, n)}` : `y-${t}`, z = {
"pull-refresh": {
pulling: "下拉刷新...",
loosing: "释放刷新...",
loading: "数据加载中...",
success: "数据已更新",
failed: "数据跟新失败,请稍后再试"
},
"form-item": {
validateMessage: "请输入正确内容"
}
}, O = T("zh-CN"), b = _({
"zh-CN": z
}), B = {
text() {
return b[O.value];
},
use(t, n) {
O.value = t, this.add({ [t]: n });
},
add(t = {}) {
Object.assign(b, t);
}
}, j = (t) => {
const n = `y-${t}`;
return [n, X(n), k()];
}, w = (t) => B.text()[t];
var u = /* @__PURE__ */ ((t) => (t.DEFUALT = "normal", t.PULLING = "pulling", t.LOOSING = "loosing", t.LOADING = "loading", t.SUCCESS = "success", t.FAILED = "failed", t))(u || {});
const V = (t, n, o, a) => {
const s = Math.abs(t - o), l = Math.abs(n - a), g = Math.sqrt(s * s + l * l);
return 90 - Math.round(Math.asin(l / g) / Math.PI * 180);
}, W = (t) => {
const n = t.currentTarget, o = t.target;
let a = !1;
if (n === o)
return a;
const s = (l) => {
l.offsetHeight !== l.scrollHeight && l.scrollTop !== 0 ? a = !0 : l.parentElement && l.parentElement !== n && s(l.parentElement);
};
return o && s(o), a;
}, [q, M] = j("pull-refresh"), p = w("pull-refresh"), J = 30, S = 0.5, K = (t) => t < 60 ? 1 : 1 - (t - 60) / 600, Q = /* @__PURE__ */ P({
name: q,
props: {
pullingText: {
type: String,
default: p.pulling
},
loosingText: {
type: String,
default: p.loosing
},
loadingText: {
type: String,
default: p.loading
},
successText: {
type: String,
default: p.success
},
failedText: {
type: String,
default: p.failed
},
statusHeight: {
type: Number,
default: 60
},
disabled: {
type: Boolean,
default: !1
}
},
setup(t, {
slots: n,
emit: o,
expose: a
}) {
const s = H();
let l = 0, g = 0, h = 0, N = null;
const c = T(0), L = T(0), r = T(u.DEFUALT), I = F(() => {
var v;
const i = [...((v = s == null ? void 0 : s.proxy) == null ? void 0 : v.$el).childNodes];
return i == null ? void 0 : i.filter((d) => d.nodeType !== 3 || d.nodeValue !== "");
}), A = (e = "success") => {
r.value = e, setTimeout(() => {
c.value = 0;
}, 500), setTimeout(() => {
r.value = u.DEFUALT;
}, 1e3);
}, U = () => {
c.value = t.statusHeight, L.value = S, r.value = u.LOADING, o("load", A);
}, m = (e) => {
l = e instanceof TouchEvent ? e.touches[0].pageX : e.pageX, g = e instanceof TouchEvent ? e.touches[0].pageY : e.pageY, I.value.length !== 2 || I.value[1].nodeType === 3 ? N = s == null ? void 0 : s.vnode.el : N = I.value[1], !t.disabled && !W(e) && N.scrollTop === 0 && r.value === u.DEFUALT && (r.value = u.PULLING, c.value = 0, L.value = 0);
}, E = (e) => {
const i = e instanceof TouchEvent ? e.touches[0].pageX : e.pageX, v = e instanceof TouchEvent ? e.touches[0].pageY : e.pageY, d = V(l, g, i, v);
h = v - g, (r.value === u.PULLING || r.value === u.LOOSING) && h > 0 && d < J && (e.preventDefault(), c.value = h * K(h), h > t.statusHeight && r.value === u.PULLING && (r.value = u.LOOSING));
}, f = (e) => {
r.value === u.LOOSING ? (c.value = t.statusHeight, L.value = S, r.value = u.LOADING, o("load", A, e)) : r.value === u.PULLING && (c.value = 0, r.value = u.DEFUALT);
};
C(() => {
const e = s == null ? void 0 : s.vnode.el;
e == null || e.addEventListener("touchstart", m, {
passive: !1
}), e == null || e.addEventListener("touchmove", E, {
passive: !1
}), e == null || e.addEventListener("touchend", f, {
passive: !1
}), e == null || e.addEventListener("mousedown", m, {
passive: !1
}), e == null || e.addEventListener("mousemove", E, {
passive: !1
}), e == null || e.addEventListener("mouseup", f, {
passive: !1
}), e == null || e.addEventListener("mouseout", f, {
passive: !1
});
}), Y(() => {
const e = s == null ? void 0 : s.vnode.el;
e == null || e.removeEventListener("touchstart", m), e == null || e.removeEventListener("touchmove", E), e == null || e.removeEventListener("touchend", f), e == null || e.removeEventListener("mousedown", m), e == null || e.removeEventListener("mousemove", E), e == null || e.removeEventListener("mouseup", f), e == null || e.removeEventListener("mouseout", f);
});
const D = () => {
var e;
return r.value === u.DEFUALT ? null : n[r.value] ? (e = n[r.value]) == null ? void 0 : e.call(n) : x("p", null, [t[`${r.value}Text`]]);
};
return a({
refresh: U
}), () => {
var G;
const {
statusHeight: e
} = t, i = c.value > e ? e : c.value, v = `all ${L.value}s ease 0s`, d = `translate3d(0, ${-c.value}px, 0)`;
return x("div", {
class: M(),
style: {
WebkitTransform: `translate3d(0, ${c.value}px, 0)`,
transform: `translate3d(0, ${c.value}px, 0)`,
transition: v
}
}, [x("div", {
class: M("status"),
style: {
height: `${i}px`,
WebkitTransform: `${d} scale(${i / e})`,
transform: `${d} scale(${i / e})`,
transition: v
}
}, [D()]), (G = n.default) == null ? void 0 : G.call(n)]);
};
}
});
function Z(t) {
const n = t;
return n.install = (o) => {
const { name: a } = t;
a && o.component(a, t);
}, n;
}
const R = Z(Q);
export {
R as default
};