@aplus-frontend/ui
Version:
59 lines (58 loc) • 1.47 kB
JavaScript
import { computed as u, unref as r, ref as b } from "vue";
function c(s) {
return typeof s == "string" && s.endsWith("%");
}
function l(s) {
return Number(s.slice(0, -1)) / 100;
}
const I = (s, p) => {
const g = u(() => r(s).map((e) => e.size)), f = u(() => r(s).length), i = u(() => r(p) || 0), x = (e) => e * r(i), z = b(
r(s).map(
(e) => e.defaultSize || e["default-size"]
)
), m = u(() => {
const e = [];
for (let o = 0; o < f.value; o += 1)
e[o] = g.value[o] ?? z.value[o];
return e;
}), v = u(() => {
let e = [], o = 0;
for (let n = 0; n < f.value; n += 1) {
const t = m.value[n];
if (c(t))
e[n] = l(t);
else if (t || t === 0) {
const d = Number(t);
Number.isNaN(d) || (e[n] = d / i.value);
} else
o += 1, e[n] = void 0;
}
const a = e.reduce((n, t) => n + (t || 0), 0);
if (a > 1 || !o) {
const n = 1 / a;
e = e.map((t) => t === void 0 ? 0 : t * n);
} else {
const n = (1 - a) / o;
e = e.map((t) => t === void 0 ? n : t);
}
return e;
}), S = u(() => r(v).map(x)), P = u(
() => r(s).map((e) => c(e.min) ? l(e.min) : (e.min || 0) / i.value)
), N = u(
() => r(s).map((e) => c(e.max) ? l(e.max) : (e.max || i.value) / i.value)
);
return [
u(() => p?.value ? r(S) : r(m)),
S,
v,
P,
N,
(e) => {
z.value = e;
}
];
};
export {
l as getPtg,
I as useSizes
};