maz-ui
Version:
A standalone components library for Vue.Js 3 & Nuxt.Js 3
135 lines (134 loc) • 3.88 kB
JavaScript
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
};