UNPKG

maz-ui

Version:

A standalone components library for Vue.Js 3 & Nuxt.Js 3

135 lines (134 loc) 3.88 kB
import { p, l } from "./pascalCase.BKTE3qqE.js"; import { computed, toValue } from "vue"; function a$1(e) { return e.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase().replace(/-+/g, "-").replace(/(^-)|(-$)/g, ""); } function a(e) { return e.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/([A-Z])([A-Z][a-z])/g, "$1_$2").replace(/[\s-]+/g, "_").toLowerCase().replace(/_+/g, "_").replace(/(^_)|(_$)/g, ""); } const n = { removeAccents: !0, caseSensitive: !1, replaceSpaces: !0, removeSpecialCharacters: !1, trim: !0, normalizeSpaces: !0, removeNumbers: !1, case: void 0, customNormalizationForms: ["NFC", "NFKD"] }; function u(r, s) { switch (s) { case "kebab-case": return a$1(r); case "camelCase": return l(r); case "PascalCase": return p(r); case "snake_case": return a(r); case "lowercase": return r.toLowerCase(); case "UPPERCASE": return r.toUpperCase(); default: return r; } } function S(r, s) { const a2 = { ...n, ...s }, c = { À: "A", Á: "A", Â: "A", Ã: "A", Ä: "A", Å: "A", à: "a", á: "a", â: "a", ã: "a", ä: "a", å: "a", È: "E", É: "E", Ê: "E", Ë: "E", è: "e", é: "e", ê: "e", ë: "e", Î: "I", Ï: "I", í: "I", î: "i", ï: "i", Ô: "O", Õ: "O", Ö: "O", Ø: "O", ô: "o", õ: "o", ö: "o", ø: "o", Ù: "U", Ú: "U", Û: "U", Ü: "U", ù: "u", ú: "u", û: "u", ü: "u", Ç: "C", ç: "c", ÿ: "y", Ñ: "N", ñ: "n", ó: "o" }; let e = r.toString(); if (a2.trim && (e = e.trim()), a2.normalizeSpaces && (e = e.replaceAll(/\s+/g, " ")), a2.replaceSpaces && (e = e.replaceAll(" ", "-")), a2.removeNumbers && (e = e.replaceAll(/\d/g, "")), a2.removeAccents && (e = e.replaceAll(/[ÀÁÂÃÄÅÇÈÉÊËÎÏÑÔÕÖØÙÚÛÜàáâãäåçèéêëíîïñóôõöøùúûüÿ]/g, (o) => c[o] || o), e = e.replaceAll(/[\u0300-\u036F]/g, "")), a2.case ? e = u(e, a2.case) : a2.caseSensitive === !1 && (e = e.toLowerCase()), a2.removeSpecialCharacters && (e = e.replaceAll(/[^\dA-Z-]/gi, "")), a2.trim && (e = e.trim()), a2.customNormalizationForms) for (const o of a2.customNormalizationForms) e = e.normalize(o); return e; } function levenshteinDistance(string1, string2) { const length1 = string1.length, length2 = string2.length, matrix = []; for (let index = 0; index <= length1; index++) matrix[index] = [index]; for (let index = 0; index <= length2; index++) matrix[0][index] = index; for (let index = 1; index <= length1; index++) for (let index_ = 1; index_ <= length2; index_++) { const cost = string1[index - 1] === string2[index_ - 1] ? 0 : 1; matrix[index][index_] = Math.min( matrix[index - 1][index_] + 1, matrix[index][index_ - 1] + 1, matrix[index - 1][index_ - 1] + cost ); } return matrix[length1][length2]; } function getMatchingScore(string1, string2) { const distance = levenshteinDistance(string1, string2), maxLength = Math.max(string1.length, string2.length); return maxLength === 0 ? 1 : 1 - distance / maxLength; } function getMatchingResults(string1, string2, threshold = 0.75) { return getMatchingScore(string1, string2) >= threshold; } function useStringMatching(string1, string2, threshold = 0.75) { const _string1 = computed( () => S(toValue(string1)) ), _string2 = computed( () => S(toValue(string2)) ), score = computed(() => getMatchingScore(_string1.value, _string2.value)); return { isMatching: computed( () => getMatchingResults(_string1.value, _string2.value, toValue(threshold)) ), score }; } export { S, useStringMatching as u };