(function () {
"use strict";
window.IS7v2 = window.IS7v2 || {};
// ── Constants ────────────────────────────────────────────────────────────
var WAPP = "5541987430349";
function wa(msg) {
return "https://wa.me/" + WAPP + "?text=" + encodeURIComponent(msg || "Olá, vim pelo site da IS7!");
}
// ── Inline SVG icon paths (Lucide subset) ────────────────────────────────
var ICONS = {
globe: '',
"shopping-bag": '',
"trending-up": '',
"map-pin": '',
check: '',
"check-circle": '',
"check-check": '',
star: '',
sun: '',
moon: '',
menu: '',
x: '',
"arrow-right": '',
"external-link": '',
expand: '',
"message-circle": '',
"message-square": '',
send: '',
"chevron-down": '',
"chevron-right": '',
"chevron-up": '',
instagram: '',
linkedin: '',
phone: '',
mail: '',
store: '',
award: '',
users: '',
zap: '',
lock: '',
package: '',
"calendar-days": '',
megaphone: '',
gauge: '',
sparkles: '',
"shield-check": '',
target: '',
"bar-chart": '',
search: '',
monitor: '',
palette: '',
headphones: '',
"file-text": '',
"arrow-up-right": '',
"arrow-left": '',
"layout-grid": '',
minus: '',
plus: '',
"map": '',
};
const Icon = function Icon({ name, size, color, strokeWidth, fill, style, className }) {
size = size || 20; color = color || "currentColor"; strokeWidth = strokeWidth || 2; fill = fill || "none";
var paths = ICONS[name] || "";
return (
);
};
// ── Logo ─────────────────────────────────────────────────────────────────
const Logo = function Logo({ size, onClick }) {
var fs = size === "large" ? 28 : size === "small" ? 18 : 22;
return (
iS7
);
};
// ── Eyebrow ───────────────────────────────────────────────────────────────
const Eyebrow = function Eyebrow({ children, center, style }) {
return (
{children}
);
};
// ── Reveal (IntersectionObserver scroll animation) ───────────────────────
const Reveal = function Reveal({ children, delay, as, className, style, onClick }) {
var Tag = as || "div";
var ref = React.useRef(null);
React.useEffect(function () {
var el = ref.current;
if (!el) return;
el.classList.add("reveal");
if (delay) el.style.transitionDelay = delay + "ms";
var obs = new IntersectionObserver(
function (entries) {
if (entries[0].isIntersecting) { el.classList.add("in"); obs.disconnect(); }
},
{ threshold: 0.06, rootMargin: "0px 0px -32px 0px" }
);
obs.observe(el);
return function () { obs.disconnect(); };
}, []);
return (
{children}
);
};
// ── useCountUp ────────────────────────────────────────────────────────────
const useCountUp = function useCountUp(target, duration, active) {
duration = duration || 1800;
var [count, setCount] = React.useState(0);
React.useEffect(function () {
if (!active) return;
var start = Date.now();
var raf;
function frame() {
var elapsed = Date.now() - start;
var progress = Math.min(elapsed / duration, 1);
var eased = 1 - Math.pow(1 - progress, 3);
setCount(Math.round(eased * target));
if (progress < 1) raf = requestAnimationFrame(frame);
else setCount(target);
}
raf = requestAnimationFrame(frame);
return function () { cancelAnimationFrame(raf); };
}, [target, duration, active]);
return count;
};
// useLightbox — simple open/close state for portfolio lightbox
const useLightbox = function useLightbox() {
return React.useState(null);
};
Object.assign(window.IS7v2, { Icon, Logo, Eyebrow, Reveal, useCountUp, useLightbox, wa, WAPP });
})();