UNPKG

vue-data-ui-hq

Version:

A user-empowering data visualization Vue 3 components library for eloquent data storytelling

328 lines (327 loc) 13.7 kB
import { ref as h, useSlots as H, onMounted as R, computed as x, watch as P, openBlock as s, createElementBlock as l, normalizeStyle as n, unref as t, createElementVNode as a, toDisplayString as c, createCommentVNode as p, Fragment as W, renderList as q, withKeys as J } from "vue"; import { u as Q, c as Z, o as tt, e as et, i as $, f as b, X as k, w as F, V as X } from "./index-WrV3SAID.js"; import { u as ot } from "./useNestedProp-Cj0kHD7k.js"; import { _ as it } from "./_plugin-vue_export-helper-CHgC5LLL.js"; const st = { key: 0, class: "vue-ui-rating-title", style: { width: "100%" } }, lt = ["src", "height", "width"], nt = ["xmlns", "height", "width"], rt = ["id"], at = ["stop-color"], ut = ["stop-color"], yt = ["points", "fill", "stroke", "stroke-width"], dt = ["src", "alt", "height", "width", "id"], pt = ["xmlns", "viewBox", "height", "id"], gt = ["id"], ct = ["stop-color"], ft = ["stop-color"], mt = ["points", "fill", "stroke"], vt = ["xmlns", "height"], ht = ["onClick", "onMouseenter", "onKeyup"], xt = ["onMouseenter"], $t = { __name: "vue-ui-rating", props: { config: { type: Object, default() { return {}; } }, dataset: { type: Object, default() { return {}; } } }, emits: ["rate"], setup(j, { expose: B, emit: I }) { const { vue_ui_rating: Y } = Q(), u = j, v = h(Z()), z = h(!1), d = h(void 0), _ = h([]), G = H(); R(() => { G["chart-background"] && console.warn("VueUiRating does not support the #chart-background slot."); }); const L = I, e = x({ get: () => C(), set: (i) => i }); function C() { return ot({ userConfig: u.config, defaultConfig: Y }); } P(() => u.config, (i) => { e.value = C(), M(); }, { deep: !0 }); const O = x(() => typeof u.dataset.rating == "object" && !Array.isArray(u.dataset.rating) ? D(u.dataset.rating) : u.dataset.rating), U = x(() => typeof u.dataset.rating == "object" && !Array.isArray(u.dataset.rating)), y = h(O.value), S = x(() => e.value.type === "image"), f = x(() => e.value.readonly); function D(i) { let r = 0, o = 0; for (const g in i) { const T = parseInt(g), A = i[g]; r += T * A, o += A; } if (o === 0) return 0; const m = r / o; return Math.min(e.value.to, Math.max(e.value.from, m)); } R(() => { M(); }); function M() { tt(u.dataset) && et({ componentName: "VueUiRating", type: "dataset" }), _.value = []; for (let i = e.value.from; i <= e.value.to; i += 1) _.value.push(i); } function w(i, r = !1) { return i > d.value || f.value ? r ? e.value.style.image.inactiveOpacity : e.value.style.star.inactiveColor : r ? 1 : e.value.style.star.useGradient ? `url(#star_gradient_under_${v.value})` : e.value.style.star.activeColor; } function N(i, r = !1) { const o = y.value - i, m = r ? 1 : 100; switch (!0) { case o <= 0: return 1e-3; case o > 1: return 1 * m; default: return o * m; } } function V(i) { f.value || (y.value = i, L("rate", i)); } function E() { return y.value; } function K(i = !0) { f.value = i; } return B({ getData: E, toggleReadonly: K }), (i, r) => (s(), l("div", { style: n(`background:${t(e).style.backgroundColor};font-family:${t(e).style.fontFamily};width:100%`), class: "vue-ui-rating", onMouseover: r[2] || (r[2] = (o) => z.value = !0), onMouseleave: r[3] || (r[3] = (o) => { z.value = !1, d.value = void 0; }) }, [ t(e).style.title.text ? (s(), l("div", st, [ a("div", { style: n(`color:${t(e).style.title.color};font-weight:${t(e).style.title.bold ? "bold" : "normal"};text-align:${t(e).style.title.textAlign};margin-bottom:${t(e).style.title.offsetY}px;font-size:${t(e).style.title.fontSize}px`) }, c(t(e).style.title.text), 5), t(e).style.title.subtitle.text ? (s(), l("div", { key: 0, style: n(`color:${t(e).style.title.subtitle.color};font-size:${t(e).style.title.subtitle.fontSize}px;text-align:${t(e).style.title.textAlign};margin-bottom:${t(e).style.title.subtitle.offsetY}px;font-weight:${t(e).style.title.subtitle.bold ? "bold" : "normal"}`) }, c(t(e).style.title.subtitle.text), 5)) : p("", !0) ])) : p("", !0), t(e).style.rating.show && t(e).style.rating.position === "top" ? (s(), l("div", { key: 1, style: n(`width:100%;text-align:center;margin-bottom:${t(e).style.rating.offsetY}px;font-size:${t(e).style.rating.fontSize}px;font-weight:${t(e).style.rating.bold ? "bold" : "normal"};margin-left:${t(e).style.rating.offsetX}px`) }, c(t($)( t(e).style.rating.formatter, t(y), t(b)({ v: t(y), r: t(e).style.rating.roundingValue }), t(e) )), 5)) : p("", !0), a("div", { class: "vue-ui-rating-wrapper", style: n(`height:${t(e).style.itemSize}px;width:100%;display:flex;align-items:center;justify-content:center`) }, [ t(e).style.rating.show && t(e).style.rating.position === "left" ? (s(), l("div", { key: 0, style: n(`width:fit-content;text-align:center;margin-bottom:${t(e).style.rating.offsetY}px;font-size:${t(e).style.rating.fontSize}px;font-weight:${t(e).style.rating.bold ? "bold" : "normal"};padding-right:${t(e).style.rating.offsetX}px`) }, c(t($)( t(e).style.rating.formatter, t(y), t(b)({ v: t(y), r: t(e).style.rating.roundingValue }), t(e) )), 5)) : p("", !0), (s(!0), l(W, null, q(t(_), (o, m) => (s(), l("div", { class: "vue-ui-rating-unit-container", style: n(`position:relative;height:${t(e).style.itemSize}px;width:${t(e).style.itemSize}px`) }, [ t(S) ? (s(), l("img", { key: 0, src: t(e).style.image.src, height: t(e).style.itemSize, width: t(e).style.itemSize, class: "vue-ui-rating-unit", style: n(`position:absolute;top:0;left:0;opacity:${isNaN(t(d)) ? t(e).style.image.inactiveOpacity : w(o, !0)}`) }, null, 12, lt)) : (s(), l("svg", { key: 1, xmlns: t(k), viewBox: "0 0 100 100", height: t(e).style.itemSize, width: t(e).style.itemSize, class: "vue-ui-rating-unit" }, [ a("defs", null, [ a("radialGradient", { cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", id: `star_gradient_under_${t(v)}` }, [ a("stop", { offset: "0%", "stop-color": `${t(F)(t(e).style.star.activeColor, 0.05)}` }, null, 8, at), a("stop", { offset: "100%", "stop-color": t(e).style.star.activeColor }, null, 8, ut) ], 8, rt) ]), a("polygon", { points: t(X)({ plot: { x: 50, y: 50 }, radius: 30, apexes: t(e).style.star.apexes }), fill: isNaN(t(d)) ? t(e).style.star.inactiveColor : w(o), stroke: t(e).style.star.borderColor ? t(e).style.star.borderColor : t(d) ? w(o) : t(e).style.star.inactiveColor, "stroke-width": t(e).style.star.borderWidth, "stroke-linecap": "round", "stroke-linejoin": "round" }, null, 8, yt) ], 8, nt)), t(S) ? (s(), l("img", { key: 2, src: t(e).style.image.src, alt: `${t(e).style.image.alt} ${o}`, height: t(e).style.itemSize, width: t(e).style.itemSize, id: `active_${t(v)}_${o}`, class: "vue-ui-rating-unit", style: n(`position:absolute;top:0;left:0;clip:rect(0px,${N(m, !0) * t(e).style.itemSize}px,${t(e).style.itemSize}px,0px`) }, null, 12, dt)) : (s(), l("svg", { key: 3, xmlns: t(k), viewBox: `0 0 ${N(m)} 100`, height: t(e).style.itemSize, class: "vue-ui-rating-unit", id: `active_${t(v)}_${o}`, style: { position: "absolute", top: "0", left: "0" } }, [ a("defs", null, [ a("radialGradient", { cx: "50%", cy: "50%", r: "50%", fx: "50%", fy: "50%", id: `star_gradient_over_${t(v)}` }, [ a("stop", { offset: "0%", "stop-color": `${t(F)(t(e).style.star.activeColor, 0.05)}` }, null, 8, ct), a("stop", { offset: "100%", "stop-color": t(e).style.star.activeColor }, null, 8, ft) ], 8, gt) ]), a("polygon", { points: t(X)({ plot: { x: 50, y: 50 }, radius: 30, apexes: t(e).style.star.apexes }), fill: t(e).style.star.useGradient ? `url(#star_gradient_over_${t(v)})` : t(e).style.star.activeColor, stroke: t(e).style.star.activeColor }, null, 8, mt) ], 8, pt)), (s(), l("svg", { xmlns: t(k), viewBox: "0 0 100 100", height: t(e).style.itemSize, class: "vue-ui-rating-unit", style: n(`position:absolute;top:0;left:0;${t(f) ? "" : "cursor:pointer"}`) }, [ t(f) ? p("", !0) : (s(), l("rect", { key: 0, class: "vue-ui-rating-mouse-trap", x: 0, y: 0, width: 100, height: 100, fill: "transparent", onClick: (g) => V(o), onMouseenter: (g) => d.value = o, onMouseleave: r[0] || (r[0] = (g) => d.value = void 0), tabindex: "0", onKeyup: J((g) => V(o), ["enter"]) }, null, 40, ht)), t(f) ? (s(), l("rect", { key: 1, class: "vue-ui-rating-mouse-trap", x: 0, y: 0, width: 100, height: 100, fill: "transparent", onMouseenter: (g) => d.value = o, onMouseleave: r[1] || (r[1] = (g) => d.value = void 0) }, null, 40, xt)) : p("", !0) ], 12, vt)), t(e).style.tooltip.show && t(U) && t(f) ? (s(), l("div", { key: 4, class: "vue-ui-rating-tooltip", style: n(`border:1px solid ${t(e).style.tooltip.borderColor};position:absolute;top:${-48 + t(e).style.tooltip.offsetY}px;left:50%;transform:translateX(-50%);width:fit-content;text-align:center;background:${t(e).style.tooltip.backgroundColor};display:${t(d) === o ? "block" : "none"};padding:2px 12px;border-radius:${t(e).style.tooltip.borderRadius}px;box-shadow:${t(e).style.tooltip.boxShadow}`) }, [ a("div", { style: n(`width:100%;display:flex;flex-direction:row;gap:6px;position:relative;text-align:center;color:${t(e).style.tooltip.color}`) }, [ a("span", { style: n(`font-size:${t(e).style.tooltip.fontSize}px`) }, c(o) + ":", 5), a("span", { style: n(`font-weight:${t(e).style.tooltip.bold ? "bold" : "normal"};font-size:${t(e).style.tooltip.fontSize}px`) }, c(t($)( t(e).style.tooltip.formatter, u.dataset.rating[o], t(b)({ v: u.dataset.rating[o], r: t(e).style.tooltip.roundingValue }), t(e) )), 5), a("div", { style: n(`font-family:Arial !important;position:absolute;top:calc(100% - 4px);left:50%;transform:translateX(-50%);color:${t(e).style.tooltip.borderColor}`) }, " ▼ ", 4) ], 4) ], 4)) : p("", !0) ], 4))), 256)), t(e).style.rating.show && t(e).style.rating.position === "right" ? (s(), l("div", { key: 1, style: n(`width:fit-content;text-align:center;margin-bottom:${t(e).style.rating.offsetY}px;font-size:${t(e).style.rating.fontSize}px;font-weight:${t(e).style.rating.bold ? "bold" : "normal"};padding-left:${t(e).style.rating.offsetX}px`) }, c(t($)( t(e).style.rating.formatter, t(y), t(b)({ v: t(y), r: t(e).style.rating.roundingValue }), t(e) )), 5)) : p("", !0) ], 4), t(e).style.rating.show && t(e).style.rating.position === "bottom" ? (s(), l("div", { key: 2, style: n(`width:100%;text-align:center;margin-top:${t(e).style.rating.offsetY}px;font-size:${t(e).style.rating.fontSize}px;font-weight:${t(e).style.rating.bold ? "bold" : "normal"};margin-left:${t(e).style.rating.offsetX}px`) }, c(t($)( t(e).style.rating.formatter, t(y), t(b)({ v: t(y), r: t(e).style.rating.roundingValue }), t(e) )), 5)) : p("", !0) ], 36)); } }, zt = /* @__PURE__ */ it($t, [["__scopeId", "data-v-3c80f07b"]]); export { zt as default };