UNPKG

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
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"); } 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