@frank-auth/react
Version:
Flexible and customizable React UI components for Frank Authentication
324 lines (323 loc) • 9.58 kB
JavaScript
const l = (t, e = {}, r = "en") => {
try {
const n = typeof t == "string" || typeof t == "number" ? new Date(t) : t;
if (isNaN(n.getTime()))
return "Invalid Date";
const o = {
year: "numeric",
month: "short",
day: "numeric",
...e
};
return new Intl.DateTimeFormat(r, o).format(n);
} catch {
return "Invalid Date";
}
}, d = (t, e = {}, r = "en") => {
const n = {
year: "numeric",
month: "short",
day: "numeric",
hour: "numeric",
minute: "2-digit",
...e
};
return l(t, n, r);
}, b = (t, e = {}, r = "en") => {
const n = {
hour: "numeric",
minute: "2-digit",
second: "2-digit",
hour12: !0,
...e
};
return l(t, n, r);
}, h = (t, e = "en") => {
try {
const r = typeof t == "string" || typeof t == "number" ? new Date(t) : t;
if (isNaN(r.getTime()))
return "Invalid Date";
const o = Math.floor(((/* @__PURE__ */ new Date()).getTime() - r.getTime()) / 1e3);
if (o < 60)
return "just now";
const a = Math.floor(o / 60);
if (a < 60)
return `${a} minute${a === 1 ? "" : "s"} ago`;
const s = Math.floor(a / 60);
if (s < 24)
return `${s} hour${s === 1 ? "" : "s"} ago`;
const c = Math.floor(s / 24);
if (c < 7)
return `${c} day${c === 1 ? "" : "s"} ago`;
const i = Math.floor(c / 7);
if (i < 4)
return `${i} week${i === 1 ? "" : "s"} ago`;
const u = Math.floor(c / 30);
if (u < 12)
return `${u} month${u === 1 ? "" : "s"} ago`;
const f = Math.floor(c / 365);
return `${f} year${f === 1 ? "" : "s"} ago`;
} catch {
return "Invalid Date";
}
}, M = (t) => {
if (t < 0) return "0s";
const e = Math.floor(t / 1e3), r = Math.floor(e / 60), n = Math.floor(r / 60), o = Math.floor(n / 24);
return o > 0 ? `${o}d ${n % 24}h` : n > 0 ? `${n}h ${r % 60}m` : r > 0 ? `${r}m ${e % 60}s` : `${e}s`;
}, w = (t) => h(t), m = (t, e = {}, r = "en") => {
try {
return new Intl.NumberFormat(r, e).format(t);
} catch {
return t.toString();
}
}, y = (t, e = "USD", r = "en") => m(t, {
style: "currency",
currency: e
}, r), C = (t, e = 1, r = "en") => m(t / 100, {
style: "percent",
minimumFractionDigits: e,
maximumFractionDigits: e
}, r), N = (t) => {
if (t === 0) return "0 B";
const e = 1024, r = ["B", "KB", "MB", "GB", "TB"], n = Math.floor(Math.log(t) / Math.log(e));
return `${Number.parseFloat((t / Math.pow(e, n)).toFixed(1))} ${r[n]}`;
}, D = (t, e = "en") => {
if (Math.abs(t) < 1e3)
return t.toString();
try {
return new Intl.NumberFormat(e, {
notation: "compact",
compactDisplay: "short"
}).format(t);
} catch {
const n = ["", "K", "M", "B", "T"], o = Math.floor(Math.log(Math.abs(t)) / Math.log(1e3));
return `${Number.parseFloat((t / Math.pow(1e3, o)).toFixed(1))}${n[o]}`;
}
}, $ = (t, e) => [t, e].filter(Boolean).join(" "), I = (t) => t.split(" ").map((e) => e.charAt(0).toUpperCase()).slice(0, 2).join(""), T = (t) => t.firstName || t.lastName ? $(t.firstName, t.lastName) : t.username ? t.username : t.emailAddress ? t.emailAddress.split("@")[0] : "Unknown User", j = (t) => t.trim().toLowerCase(), A = (t, e = "national") => {
const r = t.replace(/[^\d+]/g, "");
if (r.length === 10) {
const n = r.match(/^(\d{3})(\d{3})(\d{4})$/);
if (n)
switch (e) {
case "international":
return `+1 ${n[1]} ${n[2]} ${n[3]}`;
case "e164":
return `+1${r}`;
case "national":
default:
return `(${n[1]}) ${n[2]}-${n[3]}`;
}
}
if (r.length === 11 && r.startsWith("1")) {
const o = r.substring(1).match(/^(\d{3})(\d{3})(\d{4})$/);
if (o)
switch (e) {
case "international":
return `+1 ${o[1]} ${o[2]} ${o[3]}`;
case "e164":
return `+${r}`;
case "national":
default:
return `(${o[1]}) ${o[2]}-${o[3]}`;
}
}
return r.startsWith("+") ? r : t;
}, B = (t) => {
const [e, r] = t.split("@");
if (!r) return t;
if (e.length <= 3)
return `${e[0]}***@${r}`;
const n = e[0], o = e[e.length - 1], a = Math.max(3, e.length - 2);
return `${n}${"*".repeat(a)}${o}@${r}`;
}, F = (t) => {
const e = t.replace(/[^\d]/g, "");
if (e.length >= 10) {
const r = e.slice(-4);
return `${"*".repeat(e.length - 4)}${r}`;
}
return t;
}, L = (t, e, r = "...") => t.length <= e ? t : t.substring(0, e - r.length) + r, g = (t, e, r = "...") => {
if (t.length <= e) return t;
const n = r.length, o = e - n, a = Math.ceil(o / 2), s = Math.floor(o / 2);
return t.substring(0, a) + r + t.substring(t.length - s);
}, p = (t, e) => {
switch (e) {
case "camel":
return t.replace(/(?:^\w|[A-Z]|\b\w)/g, (r, n) => n === 0 ? r.toLowerCase() : r.toUpperCase()).replace(/\s+/g, "");
case "pascal":
return t.replace(/(?:^\w|[A-Z]|\b\w)/g, (r) => r.toUpperCase()).replace(/\s+/g, "");
case "snake":
return t.replace(/\W+/g, " ").split(/ |\B(?=[A-Z])/).map((r) => r.toLowerCase()).join("_");
case "kebab":
return t.replace(/\W+/g, " ").split(/ |\B(?=[A-Z])/).map((r) => r.toLowerCase()).join("-");
case "sentence":
return t.charAt(0).toUpperCase() + t.slice(1).toLowerCase();
case "title":
return t.replace(/\w\S*/g, (r) => r.charAt(0).toUpperCase() + r.substr(1).toLowerCase());
case "upper":
return t.toUpperCase();
case "lower":
return t.toLowerCase();
default:
return t;
}
}, U = (t) => t.length > 12 ? g(t, 12) : t, k = (t) => {
if (t.length <= 8) return t;
const e = t.substring(0, 4), r = t.substring(t.length - 4);
return `${e}...${r}`;
}, O = (t) => [
t.street,
t.city,
t.state && t.postalCode ? `${t.state} ${t.postalCode}` : t.state || t.postalCode,
t.country
].filter(Boolean).join(", "), S = (t, e = {}) => {
const { style: r = "long", type: n = "conjunction", locale: o = "en" } = e;
if (t.length === 0) return "";
if (t.length === 1) return t[0];
try {
return new Intl.DateTimeFormat(o, { style: r, type: n }).format(t);
} catch {
if (t.length === 2)
return `${t[0]} ${n === "conjunction" ? "and" : "or"} ${t[1]}`;
const a = t[t.length - 1], s = t.slice(0, -1), c = n === "conjunction" ? "and" : "or";
return `${s.join(", ")}, ${c} ${a}`;
}
}, R = (t, e = 2, r = 10) => {
try {
return JSON.stringify(t, null, e);
} catch {
return "[Circular Reference]";
}
}, W = (t) => {
try {
return JSON.stringify(t);
} catch {
return "[Circular Reference]";
}
}, P = (t) => {
try {
return new URL(t).hostname;
} catch {
return t;
}
}, J = (t) => !t.startsWith("http://") && !t.startsWith("https://") ? `https://${t}` : t, Z = (t) => {
const e = t.replace("#", "");
return e.length === 3 ? `#${e.split("").map((r) => r + r).join("")}` : e.length === 6 ? `#${e}` : t;
}, z = (t, e, r) => `rgb(${Math.round(t)}, ${Math.round(e)}, ${Math.round(r)})`, E = (t, e, r, n) => `rgba(${Math.round(t)}, ${Math.round(e)}, ${Math.round(r)}, ${n})`, G = (t, e, r) => {
const n = p(t, "sentence");
switch (e) {
case "required":
return `${n} is required`;
case "email":
return `${n} must be a valid email address`;
case "minLength":
return `${n} must be at least ${r} characters`;
case "maxLength":
return `${n} must be no more than ${r} characters`;
case "pattern":
return `${n} format is invalid`;
case "number":
return `${n} must be a number`;
case "min":
return `${n} must be at least ${r}`;
case "max":
return `${n} must be no more than ${r}`;
default:
return `${n} is invalid`;
}
};
function q(t) {
switch (t) {
case "left":
return "text-left";
case "center":
return "text-center";
case "right":
return "text-right";
default:
return "text-left";
}
}
const H = {
// Date and time
formatDate: l,
formatDateTime: d,
formatTime: b,
formatRelativeTime: h,
formatDuration: M,
formatTimeAgo: w,
// Numbers
formatNumber: m,
formatCurrency: y,
formatPercentage: C,
formatFileSize: N,
formatCompactNumber: D,
// Strings
formatName: $,
formatInitials: I,
formatDisplayName: T,
formatEmail: j,
formatPhoneNumber: A,
maskEmail: B,
maskPhoneNumber: F,
truncateText: L,
truncateMiddle: g,
formatTextCase: p,
// IDs and tokens
formatId: U,
formatTokenPreview: k,
// Addresses
formatAddress: O,
// Lists
formatList: S,
// JSON
formatJSON: R,
formatJSONCompact: W,
// URLs
formatDomain: P,
formatURL: J,
// Colors
formatHexColor: Z,
formatRGBColor: z,
formatRGBAColor: E,
// Validation
formatValidationError: G
};
export {
H as FormatUtils,
O as formatAddress,
D as formatCompactNumber,
y as formatCurrency,
l as formatDate,
d as formatDateTime,
T as formatDisplayName,
P as formatDomain,
M as formatDuration,
j as formatEmail,
N as formatFileSize,
Z as formatHexColor,
U as formatId,
I as formatInitials,
R as formatJSON,
W as formatJSONCompact,
S as formatList,
$ as formatName,
m as formatNumber,
C as formatPercentage,
A as formatPhoneNumber,
E as formatRGBAColor,
z as formatRGBColor,
h as formatRelativeTime,
p as formatTextCase,
b as formatTime,
w as formatTimeAgo,
k as formatTokenPreview,
J as formatURL,
G as formatValidationError,
q as getTitleAlignment,
B as maskEmail,
F as maskPhoneNumber,
g as truncateMiddle,
L as truncateText
};
//# sourceMappingURL=format.js.map