UNPKG

@userfrosting/sprinkle-core

Version:
170 lines (169 loc) 5.49 kB
import { defineStore as e } from "pinia"; import t from "axios"; import { getProperty as n } from "dot-prop"; import { computed as r, ref as i, watch as a } from "vue"; import { useRoute as o } from "vue-router"; import { DateTime as s } from "luxon"; //#region app/assets/stores/useConfigStore.ts var c = e("config", { persist: !0, state: () => ({ config: {} }), getters: { get: (e) => (t, r) => n(e.config, t, r) }, actions: { async load() { t.get("/api/config").then((e) => { this.config = e.data; }); } } }), l = { 0: (e) => 1, 1: (e) => e === 1 ? 1 : 2, 2: (e) => e === 0 || e === 1 ? 1 : 2, 3: (e) => e === 0 ? 1 : e % 10 == 1 && e % 100 != 11 ? 2 : 3, 4: (e) => e === 1 || e == 11 ? 1 : e === 2 || e === 12 ? 2 : e >= 3 && e <= 19 ? 3 : 4, 5: (e) => e === 1 ? 1 : e === 0 || e % 100 > 0 && e % 100 < 20 ? 2 : 3, 6: (e) => e % 10 == 1 && e % 100 != 11 ? 1 : e % 10 < 2 || e % 100 >= 10 && e % 100 < 20 ? 2 : 3, 7: (e) => e % 10 == 1 && e % 100 != 11 ? 1 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 10 || e % 100 >= 20) ? 2 : 3, 8: (e) => e === 1 ? 1 : e >= 2 && e <= 4 ? 2 : 3, 9: (e) => e === 1 ? 1 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 12 || e % 100 > 14) ? 2 : 3, 10: (e) => e % 100 == 1 ? 1 : e % 100 == 2 ? 2 : e % 100 == 3 || e % 100 == 4 ? 3 : 4, 11: (e) => e === 1 ? 1 : e === 2 ? 2 : e >= 3 && e <= 6 ? 3 : e >= 7 && e <= 10 ? 4 : 5, 12: (e) => e === 1 ? 1 : e === 2 ? 2 : e % 100 >= 3 && e % 100 <= 10 ? 3 : e % 100 >= 11 ? 4 : e == 0 ? 6 : 5, 13: (e) => e === 1 ? 1 : e === 0 || e % 100 >= 1 && e % 100 < 11 ? 2 : e % 100 > 10 && e % 100 < 20 ? 3 : 4, 14: (e) => e % 10 == 1 ? 1 : e % 10 == 2 ? 2 : 3, 15: (e) => e % 10 == 1 && e % 100 != 11 ? 1 : 2 }, u = e("translator", () => { let e = "plural", n = i(""), r = i({}), a = i({ name: "", regional: "", authors: [], plural_rule: 0, tag: "" }); async function o() { t.get("/api/dictionary").then((e) => { n.value = e.data.identifier, a.value = e.data.config, r.value = e.data.dictionary; }); } function c(e, t = {}) { let { message: n, placeholders: r } = f(e, t); return t = r, p(n, t); } function u(e, t = s.DATETIME_MED_WITH_WEEKDAY) { let n = d(e); return typeof t == "object" ? n.toLocaleString(t) : n.toFormat(t); } function d(e) { return s.fromISO(e).setLocale(a.value.tag); } function f(t, n) { if (r.value[t] !== void 0) return { message: r.value[t], placeholders: n }; let i = r.value[t + ".@PLURAL"] || e, a = 1; if (typeof n == "object" && n[i] !== void 0) a = Number(n[i]); else if (typeof n == "number" || typeof n == "string") a = Number(n); else if (r.value[t + ".@TRANSLATION"] !== void 0) return { message: r.value[t + ".@TRANSLATION"], placeholders: n }; typeof n == "number" || typeof n == "string" ? n = { [i]: a } : typeof n == "object" && n[i] === void 0 && (n = { ...n, [i]: a }); let o = m(t, a); return r.value[t + "." + o] === void 0 ? r.value[t + "." + a] === void 0 ? r.value[t + ".@TRANSLATION"] === void 0 ? { message: t, placeholders: n } : { message: r.value[t + ".@TRANSLATION"], placeholders: n } : { message: r.value[t + "." + a], placeholders: n } : { message: r.value[t + "." + o], placeholders: n }; } function p(t, n) { typeof n != "object" && (n = { [e]: n }); for (let [e, t] of Object.entries(n)) if (typeof t == "string" && t.startsWith("&")) { let r = Object.fromEntries(Object.entries(n).filter(([t]) => t !== e)); n[e] = c(t.substring(1), r); } t = t.replace(/{{&(([^}]+[^a-z]))}}/g, (e, t) => c(t, n)); for (let [e, r] of Object.entries(n)) { let n = RegExp(`{{${e}}}`, "g"); t = t.replace(n, String(r)); } return t; } function m(e, t) { if (t === 0 && r.value[e + ".0"] !== void 0) return 0; let n = h(t); if (r.value[e + "." + n] !== void 0) return n; for (let t = n; t >= 0; t--) if (r.value[e + "." + t] !== void 0) return t; return null; } function h(e, t) { let n = t ?? a.value.plural_rule; if (n < 0 || n >= Object.keys(l).length) throw Error(`The rule number ${n} must be between 0 and 15`); return l[n](e); } return { dictionary: r, load: o, config: a, identifier: n, translate: c, translateDate: u, getPluralForm: h, getDateTime: d }; }, { persist: !0 }), d = e("pageMeta", () => { let e = o(), { translate: t } = u(), n = i(""), s = i(""), l = i([]), d = i(!1), f = i(!1); function p() { d.value = !1, f.value = !1; let r = e.matched.filter((e) => e.meta.title !== void 0 && e.meta.title !== "").map((e) => ({ label: e.meta?.title || "", to: e.path })); r.unshift({ label: g.value, to: "/" }), l.value = r, n.value = e.meta.title || "", s.value = t(e.meta.description || ""); } function m() { document.title = _.value; } function h() { document.querySelector("head meta[name=\"description\"]")?.setAttribute("content", s.value); } let g = r(() => c().get("site.title") || ""), _ = r(() => n.value ? t(n.value) + " | " + g.value : g.value); return a(e, p, { immediate: !0 }), a(_, m, { immediate: !0 }), a(s, h, { immediate: !0 }), { breadcrumbs: l, title: n, description: s, hideBreadcrumbs: d, hideTitle: f }; }), f = e("alerts", { state: () => ({ alerts: [] }), actions: { push(e) { this.alerts.push(e); }, pop() { return this.alerts.pop(); }, shift() { return this.alerts.shift(); }, clear() { this.alerts = []; } } }); //#endregion export { c as i, d as n, u as r, f as t };