geoiq-frontend-ui-kit
Version:
This project is a UI kit for GeoIQ's frontend. It's built with React, TypeScript, and Vite.
95 lines (94 loc) • 2.72 kB
JavaScript
let s = null;
function d() {
if (s !== null) return s;
if (typeof document > "u") return !1;
const t = document.createElement("canvas").getContext("2d");
return s = !!t && "filter" in t, s;
}
function p(t) {
return String(t).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
}
function h(t) {
const e = parseFloat(t);
return Number.isNaN(e) ? null : t.trim().endsWith("%") ? e / 100 : e;
}
function u(t, e) {
return `<feComponentTransfer>${["R", "G", "B"].map(
(n) => `<feFunc${n} type="linear" slope="${t}" intercept="${e}"/>`
).join("")}</feComponentTransfer>`;
}
function m(t) {
const e = 1 - t;
return `<feColorMatrix type="matrix" values="${[
0.393 + 0.607 * e,
0.769 - 0.769 * e,
0.189 - 0.189 * e,
0,
0,
0.349 - 0.349 * e,
0.686 + 0.314 * e,
0.168 - 0.168 * e,
0,
0,
0.272 - 0.272 * e,
0.534 - 0.534 * e,
0.131 + 0.869 * e,
0,
0,
0,
0,
0,
1,
0
].join(" ")}"/>`;
}
function g(t) {
const e = [], i = /([a-zA-Z-]+)\(([^)]*)\)/g;
let n;
for (; (n = i.exec(t)) !== null; ) {
const a = n[1].toLowerCase(), r = h(n[2]);
if (r !== null)
switch (a) {
case "brightness":
e.push(u(r, 0));
break;
case "contrast":
e.push(u(r, -0.5 * r + 0.5));
break;
case "saturate":
e.push(`<feColorMatrix type="saturate" values="${r}"/>`);
break;
case "grayscale":
e.push(
`<feColorMatrix type="saturate" values="${1 - r}"/>`
);
break;
case "sepia":
e.push(m(r));
break;
case "hue-rotate":
e.push(`<feColorMatrix type="hueRotate" values="${r}"/>`);
break;
case "blur":
r > 0 && e.push(`<feGaussianBlur stdDeviation="${r}"/>`);
break;
}
}
return e;
}
function v(t, e) {
return new Promise((i, n) => {
const a = g(e);
if (!a.length) {
n(new Error("no translatable filter primitives"));
return;
}
const { width: r, height: l } = t, c = t.toDataURL("image/png"), f = `<svg xmlns="http://www.w3.org/2000/svg" width="${r}" height="${l}"><filter id="f" color-interpolation-filters="sRGB" x="0" y="0" width="100%" height="100%">${a.join("")}</filter><image href="${p(c)}" width="${r}" height="${l}" filter="url(#f)"/></svg>`, o = new Image();
o.onload = () => i(o), o.onerror = () => n(new Error("filter rasterisation failed")), o.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(f);
});
}
export {
v as rasterizeWithFilter,
d as supportsContextFilter
};
//# sourceMappingURL=index162.es.js.map