UNPKG

vue3-use-hooks

Version:
102 lines (101 loc) 3.4 kB
import { ref as d, readonly as w, onMounted as v, watchEffect as L, onUnmounted as b, computed as g, watch as S } from "vue"; function C(n) { const e = d(n), o = (r) => { e.value = r; }; return [w(e), o]; } const h = (n = "en") => { const e = d(n); return { camelCase: (a) => a.replace(/(?:^\w|[A-Z]|\b\w)/g, function(s, c) { return c === 0 ? s.toLocaleLowerCase(e) : s.toLocaleUpperCase(e); }).replace(/\s+/g, ""), kebabCase: (a) => a.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g).map((s) => s.toLocaleLowerCase(e)).join("-"), pascalCase: (a) => a.replace(/\w\S*/g, (s) => s.charAt(0).toLocaleUpperCase(e) + s.substr(1).toLocaleLowerCase(e)), upperCase: (a) => a.toLocaleUpperCase(e), lowerCase: (a) => a.toLocaleLowerCase(e), sentenceCase: (a) => a.toLocaleLowerCase(e).replace(/(^\s*\w|[.!?]\s*\w)/g, (s) => s.toLocaleUpperCase(e)), capitalizeCase: (a) => { const s = a.replace(/[-_](\w)/g, (c, f) => f.toLocaleUpperCase(e)); return s[0].toLocaleUpperCase(e) + s.slice(1); } }; }, M = (n = {}, e = !1) => { const [o, r] = C(e), [l, i] = C(n); return { visible: o, setVisible: r, current: l, openModal: (t) => { i(t), r(!0); }, closeModal: () => { r(!1), i(); } }; }, y = (n, e = "") => { const o = d(null), r = () => { const t = localStorage.getItem(n); if (t !== null) { o.value = l(t); return; } o.value = e; }, l = (t) => { let a = null; try { a = JSON.parse(t); } catch { a = t; } return a; }, i = (t) => { t.key === n && (o.value = t.newValue ? l(t.newValue) : null); }; let p = !1; return typeof window < "u" && (r(), p = !0), v(() => { p || r(), window.addEventListener("storage", i, !0); }), L(() => { o.value && localStorage.setItem(n, JSON.stringify(o.value)); }), b(() => { window.removeEventListener("storage", i); }), { value: o, remove: () => { try { localStorage.removeItem(n), o.value = null; } catch (t) { console.error(t); } } }; }, A = (n = null) => { const e = d(n), o = d([]), r = g(() => /(?:<iframe[^>]*)(?:(?:\/>)|(?:>.*?<\/iframe>))/.test(e.value) || /(?:<blockquote[^>]*)(?:(?:\/>)|(?:>.*?<\/blockquote>))/.test(e.value)), l = (t = e.value) => { const s = new DOMParser().parseFromString(t, "text/html"); for (const c of s.body.childNodes) { if (c.tagName === "SCRIPT") return c.src; c.innerHTML && c.innerHTML.includes("<script") && l(c.innerHTML); } return null; }, i = (t) => t.remove(), p = ({ async: t = !0, defer: a = !1, id: s, src: c }) => { const f = document.getElementById(s); f && i(f); const u = document.createElement("script"); u.type = "text/javascript", u.id = s, u.src = c, u.async = t, u.defer = a, document.body.insertAdjacentElement("afterend", u), u.addEventListener("load", () => { window.instgrm && window.instgrm.Embeds.process(); }), o.value = [...o.value, u]; }, m = () => { e.value = null, o.value.map((t) => i(t)), o.value = []; }; return v(() => { e.value && p({ id: "id", src: l(e.value) }); }), S(n, (t) => { t && p({ id: "id", src: l(t) }); }), { isEmbedBlock: r, clear: m }; }; export { A as useEmbed, y as useLocalStorage, M as useModal, C as useState, h as useStringCase };